Sfoglia il codice sorgente

improved http progress event

[email protected] 8 anni fa
parent
commit
3562613fcd

+ 16 - 3
oxygine/src/HttpRequestTask.cpp

@@ -121,8 +121,19 @@ namespace oxygine
         return _url;
     }
 
+    size_t HttpRequestTask::getReceivedSize() const
+    {
+        return _receivedContentSize;
+    }
+
+    size_t HttpRequestTask::getExpectedSize() const
+    {
+        return _expectedContentSize;
+    }
+
     bool HttpRequestTask::_prerun()
     {
+        _firstTimeProgressDispatched = false;
         _progressDeltaDelayed = 0;
         _progressDispatched = false;
         _suitableResponse = false;
@@ -162,9 +173,11 @@ namespace oxygine
     }
 
     void HttpRequestTask::dispatchProgress(size_t delta, size_t loaded, size_t total)
-    {
-        ProgressEvent event(delta, loaded, total);
-        dispatchEvent(&event);
+    {        
+        ProgressEvent event(delta, loaded, total, !_firstTimeProgressDispatched);
+        _firstTimeProgressDispatched = true;
+
+        dispatchEvent(&event);        
     }
 
     void HttpRequestTask::asyncProgress(size_t delta, size_t loaded, size_t total)

+ 6 - 2
oxygine/src/HttpRequestTask.h

@@ -31,11 +31,12 @@ namespace oxygine
         {
         public:
             enum {EVENT = PROGRESS};
-            ProgressEvent(size_t Delta, size_t Loaded, size_t Total) : Event(PROGRESS), delta(Delta), loaded(Loaded), total(Total) {};
+            ProgressEvent(size_t Delta, size_t Loaded, size_t Total, bool First) : Event(PROGRESS), delta(Delta), loaded(Loaded), total(Total), first(First){};
 
             size_t delta;
             size_t loaded;
             size_t total;
+            bool first;
         };
 
         HttpRequestTask();
@@ -45,7 +46,8 @@ namespace oxygine
         const std::vector<unsigned char>&   getPostData() const;
         const std::string&                  getFileName() const;
         const std::string&                  getUrl() const;
-
+        size_t                              getReceivedSize() const;
+        size_t                              getExpectedSize() const;
 
         /**swap version of getResponse if you want to modify result buffer inplace*/
         void getResponseSwap(std::vector<unsigned char>&);
@@ -61,6 +63,7 @@ namespace oxygine
 
         void setResponseCodeChecker(const responseCodeChecker& f) {_responseCodeChecker = f;}
         void setSuccessOnAnyResponseCode(bool en);
+        void setExpectedSize(size_t size) { _expectedContentSize = size; }
 
     protected:
         bool _prerun() override;
@@ -90,6 +93,7 @@ namespace oxygine
         file::handle _fhandle;
         bool _writeFileError;
         bool _cacheEnabled;
+        bool _firstTimeProgressDispatched;
 
         bool _progressDispatched;
         unsigned int _progressDeltaDelayed;

+ 2 - 2
oxygine/src/core/curl/HttpRequestCurlTask.cpp

@@ -177,8 +177,8 @@ namespace oxygine
 
         int contentLength = 0;
         if (sscanf(d, "Content-Length: %d", &contentLength) == 1)
-        {
-            _expectedContentSize = contentLength;
+        {            
+            _expectedContentSize = contentLength;            
         }
 
         int responseCode = 0;

+ 4 - 5
oxygine/src/core/emscripten/HttpRequestEmscriptenTask.cpp

@@ -38,15 +38,14 @@ namespace oxygine
     void HttpRequestEmscriptenTask::_onprogress(int a, int b)
     {
         log::messageln(" HttpRequestEmscriptenTask::_onprogress %d %d", a, b);
-        dispatchProgress(a - _loaded, a, b);
-        _loaded = a;
-        //Event ev(HttpRequestTask::PROGRESS);        
-        //dispatchEvent(&ev);
+        int delta = a - _receivedContentSize;
+        _receivedContentSize = a;
+        _expectedContentSize = b;
+        dispatchProgress(delta, _receivedContentSize, b);
     }
 
     void HttpRequestEmscriptenTask::_run()
     {
-        _loaded = 0;
         addRef();
 
         const char* method = _postData.empty() ? "GET" : "POST";

+ 0 - 2
oxygine/src/core/emscripten/HttpRequestEmscriptenTask.h

@@ -24,8 +24,6 @@ namespace oxygine
         void _onprogress(int, int);
 
         void _run();
-
-        int _loaded;
     };
 }