Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Zolotarev <deathbaba@gmail.com>2011-11-09 18:34:19 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:27:31 +0300
commita38ccdfe6b4b7f4fc516924b945712d447a690b8 (patch)
tree45bec6419b707b2ec5082cf8b78479f3245aa495 /platform/http_request.cpp
parentb214f6823cbd61b02a0b633e31b685633065912a (diff)
[downloader] Changed behavior - now only HttpRequest::GetFile() uses files for storage
Diffstat (limited to 'platform/http_request.cpp')
-rw-r--r--platform/http_request.cpp75
1 files changed, 42 insertions, 33 deletions
diff --git a/platform/http_request.cpp b/platform/http_request.cpp
index 323ab3156d..63174a80a8 100644
--- a/platform/http_request.cpp
+++ b/platform/http_request.cpp
@@ -8,6 +8,8 @@
#include "../coding/file_writer.hpp"
+#include "../std/scoped_ptr.hpp"
+
class HttpThread;
namespace downloader
@@ -15,38 +17,34 @@ namespace downloader
/// @return 0 if creation failed
HttpThread * CreateNativeHttpThread(string const & url,
- IHttpThreadCallback & callback,
- int64_t begRange = 0,
- int64_t endRange = -1,
- int64_t expectedSize = -1,
- string const & postBody = string());
+ IHttpThreadCallback & callback,
+ int64_t begRange = 0,
+ int64_t endRange = -1,
+ int64_t expectedSize = -1,
+ string const & postBody = string());
void DeleteNativeHttpThread(HttpThread * request);
//////////////////////////////////////////////////////////////////////////////////////////
-HttpRequest::HttpRequest(string const & filePath, CallbackT onFinish, CallbackT onProgress)
+HttpRequest::HttpRequest(CallbackT onFinish, CallbackT onProgress)
: m_status(EInProgress), m_progress(make_pair(0, -1)),
m_onFinish(onFinish), m_onProgress(onProgress)
{
- if (filePath.empty())
- m_writer.reset(new MemWriter<string>(m_data));
- else
- {
- m_data = filePath;
- m_writer.reset(new FileWriter(filePath, FileWriter::OP_WRITE_EXISTING));
- }
}
HttpRequest::~HttpRequest()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
-class SimpleHttpRequest : public HttpRequest, public IHttpThreadCallback
+class MemoryHttpRequest : public HttpRequest, public IHttpThreadCallback
{
HttpThread * m_thread;
+ string m_downloadedData;
+ MemWriter<string> m_writer;
+
virtual void OnWrite(int64_t, void const * buffer, size_t size)
{
- m_writer->Write(buffer, size);
+ m_writer.Write(buffer, size);
m_progress.first += size;
if (m_onProgress)
m_onProgress(*this);
@@ -55,50 +53,55 @@ class SimpleHttpRequest : public HttpRequest, public IHttpThreadCallback
virtual void OnFinish(long httpCode, int64_t, int64_t)
{
m_status = (httpCode == 200) ? ECompleted : EFailed;
- m_writer.reset();
m_onFinish(*this);
}
public:
- SimpleHttpRequest(string const & url, string const & filePath, CallbackT onFinish, CallbackT onProgress)
- : HttpRequest(filePath, onFinish, onProgress)
+ MemoryHttpRequest(string const & url, CallbackT onFinish, CallbackT onProgress)
+ : HttpRequest(onFinish, onProgress), m_writer(m_downloadedData)
{
m_thread = CreateNativeHttpThread(url, *this);
}
- SimpleHttpRequest(string const & url, string const & filePath, string const & postData,
+ MemoryHttpRequest(string const & url, string const & postData,
CallbackT onFinish, CallbackT onProgress)
- : HttpRequest(filePath, onFinish, onProgress)
+ : HttpRequest(onFinish, onProgress), m_writer(m_downloadedData)
{
m_thread = CreateNativeHttpThread(url, *this, 0, -1, -1, postData);
}
- virtual ~SimpleHttpRequest()
+ virtual ~MemoryHttpRequest()
{
DeleteNativeHttpThread(m_thread);
}
+
+ virtual string const & Data() const
+ {
+ return m_downloadedData;
+ }
};
-HttpRequest * HttpRequest::Get(string const & url, string const & filePath,
- CallbackT onFinish, CallbackT onProgress)
+HttpRequest * HttpRequest::Get(string const & url, CallbackT onFinish, CallbackT onProgress)
{
- return new SimpleHttpRequest(url, filePath, onFinish, onProgress);
+ return new MemoryHttpRequest(url, onFinish, onProgress);
}
-HttpRequest * HttpRequest::Post(string const & url, string const & filePath, string const & postData,
+HttpRequest * HttpRequest::PostJson(string const & url, string const & postData,
CallbackT onFinish, CallbackT onProgress)
{
- return new SimpleHttpRequest(url, filePath, postData, onFinish, onProgress);
+ return new MemoryHttpRequest(url, postData, onFinish, onProgress);
}
-
////////////////////////////////////////////////////////////////////////////////////////////////
-class ChunksHttpRequest : public HttpRequest, public IHttpThreadCallback
+class FileHttpRequest : public HttpRequest, public IHttpThreadCallback
{
ChunksDownloadStrategy m_strategy;
typedef list<pair<HttpThread *, int64_t> > ThreadsContainerT;
ThreadsContainerT m_threads;
+ string m_filePath;
+ scoped_ptr<FileWriter> m_writer;
+
ChunksDownloadStrategy::ResultT StartThreads()
{
string url;
@@ -165,9 +168,10 @@ class ChunksHttpRequest : public HttpRequest, public IHttpThreadCallback
}
public:
- ChunksHttpRequest(vector<string> const & urls, string const & filePath, int64_t fileSize,
+ FileHttpRequest(vector<string> const & urls, string const & filePath, int64_t fileSize,
CallbackT onFinish, CallbackT onProgress, int64_t chunkSize)
- : HttpRequest(filePath, onFinish, onProgress), m_strategy(urls, fileSize, chunkSize)
+ : HttpRequest(onFinish, onProgress), m_strategy(urls, fileSize, chunkSize),
+ m_filePath(filePath), m_writer(new FileWriter(filePath, FileWriter::OP_WRITE_EXISTING))
{
ASSERT(!urls.empty(), ("Urls list shouldn't be empty"));
// store expected file size for future checks
@@ -175,17 +179,22 @@ public:
StartThreads();
}
- virtual ~ChunksHttpRequest()
+ virtual ~FileHttpRequest()
{
for (ThreadsContainerT::iterator it = m_threads.begin(); it != m_threads.end(); ++it)
DeleteNativeHttpThread(it->first);
}
+
+ virtual string const & Data() const
+ {
+ return m_filePath;
+ }
};
-HttpRequest * HttpRequest::GetChunks(vector<string> const & urls, string const & filePath, int64_t fileSize,
+HttpRequest * HttpRequest::GetFile(vector<string> const & urls, string const & filePath, int64_t fileSize,
CallbackT onFinish, CallbackT onProgress, int64_t chunkSize)
{
- return new ChunksHttpRequest(urls, filePath, fileSize, onFinish, onProgress, chunkSize);
+ return new FileHttpRequest(urls, filePath, fileSize, onFinish, onProgress, chunkSize);
}
} // namespace downloader