Misha Koshelev : urlmon: Use BSCF_ values passed to report_data to keep track of download state.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Aug 2 06:23:15 CDT 2007


Module: wine
Branch: master
Commit: 978f6b98c9a67055f5a0f878a44b3b66c16a6019
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=978f6b98c9a67055f5a0f878a44b3b66c16a6019

Author: Misha Koshelev <mk144210 at bcm.edu>
Date:   Thu Aug  2 00:05:36 2007 -0500

urlmon: Use BSCF_ values passed to report_data to keep track of download state.

---

 dlls/urlmon/binding.c |   23 +++++++----------------
 1 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c
index 4527aa4..db61ab2 100644
--- a/dlls/urlmon/binding.c
+++ b/dlls/urlmon/binding.c
@@ -67,12 +67,6 @@ typedef struct {
     HRESULT hres;
 } ProtocolStream;
 
-typedef enum {
-    BEFORE_DOWNLOAD,
-    DOWNLOADING,
-    END_DOWNLOAD
-} download_state_t;
-
 struct Binding {
     const IBindingVtbl               *lpBindingVtbl;
     const IInternetProtocolSinkVtbl  *lpInternetProtocolSinkVtbl;
@@ -94,7 +88,6 @@ struct Binding {
     BOOL report_mime;
     DWORD continue_call;
     BOOL request_locked;
-    download_state_t download_state;
 
     DWORD apartment_thread;
     HWND notif_hwnd;
@@ -912,12 +905,10 @@ static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink
 static void report_data(Binding *This, DWORD bscf, ULONG progress, ULONG progress_max)
 {
     FORMATETC formatetc = {0, NULL, 1, -1, TYMED_ISTREAM};
+    BOOL end_download = FALSE;
 
     TRACE("(%p)->(%d %u %u)\n", This, bscf, progress, progress_max);
 
-    if(This->download_state == END_DOWNLOAD)
-        return;
-
     if(GetCurrentThreadId() != This->apartment_thread)
         FIXME("called from worked hread\n");
 
@@ -935,15 +926,17 @@ static void report_data(Binding *This, DWORD bscf, ULONG progress, ULONG progres
                 BINDSTATUS_MIMETYPEAVAILABLE, mime);
     }
 
-    if(This->download_state == BEFORE_DOWNLOAD) {
+    if(bscf & BSCF_FIRSTDATANOTIFICATION) {
         fill_stream_buffer(This->stream);
 
-        This->download_state = DOWNLOADING;
         IBindStatusCallback_OnProgress(This->callback, progress, progress_max,
                 BINDSTATUS_BEGINDOWNLOADDATA, This->url);
     }
 
-    if(This->stream->hres == S_FALSE || (bscf & BSCF_LASTDATANOTIFICATION)) {
+    if((bscf & BSCF_LASTDATANOTIFICATION) ||
+       (bscf & BSCF_DATAFULLYAVAILABLE) ||
+        progress == progress_max) {
+        end_download = TRUE;
         IBindStatusCallback_OnProgress(This->callback, progress, progress_max,
                 BINDSTATUS_ENDDOWNLOADDATA, This->url);
     }
@@ -958,8 +951,7 @@ static void report_data(Binding *This, DWORD bscf, ULONG progress, ULONG progres
     IBindStatusCallback_OnDataAvailable(This->callback, bscf, This->stream->buf_size,
             &formatetc, &This->stgmed);
 
-    if(This->stream->hres == S_FALSE) {
-        This->download_state = END_DOWNLOAD;
+    if(end_download) {
         IBindStatusCallback_OnStopBinding(This->callback, S_OK, NULL);
     }
 }
@@ -1312,7 +1304,6 @@ static HRESULT Binding_Create(LPCWSTR url, IBindCtx *pbc, REFIID riid, Binding *
     ret->report_mime = TRUE;
     ret->continue_call = 0;
     ret->request_locked = FALSE;
-    ret->download_state = BEFORE_DOWNLOAD;
     ret->task_queue_head = ret->task_queue_tail = NULL;
 
     memset(&ret->bindinfo, 0, sizeof(BINDINFO));




More information about the wine-cvs mailing list