Module: wine Branch: master Commit: 978f6b98c9a67055f5a0f878a44b3b66c16a6019 URL: http://source.winehq.org/git/wine.git/?a=commit;h=978f6b98c9a67055f5a0f878a4...
Author: Misha Koshelev mk144210@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));