From 1e201d7057741b48d559e5ee6db2c5b2a2748d92 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Mon, 29 Apr 2019 15:12:32 +0300 Subject: [PATCH] [RAPPS] CDownloadManager: Get rid of the implementation of IBindStatusCallback as we stopped using URLDownloadToFileW a decade ago --- base/applications/rapps/loaddlg.cpp | 176 +++++++--------------------- 1 file changed, 42 insertions(+), 134 deletions(-) diff --git a/base/applications/rapps/loaddlg.cpp b/base/applications/rapps/loaddlg.cpp index 9880b7691e2..201538f7edb 100644 --- a/base/applications/rapps/loaddlg.cpp +++ b/base/applications/rapps/loaddlg.cpp @@ -218,127 +218,6 @@ public: END_MSG_MAP() }; -class CDownloadDialog : - public CComObjectRootEx, - public IBindStatusCallback -{ - HWND m_hDialog; - BOOL m_UrlHasBeenCopied; - CDownloaderProgress* m_progress; - -public: - ~CDownloadDialog() - { - //DestroyWindow(m_hDialog); - } - - HRESULT Initialize(HWND Dlg, CDownloaderProgress* pProgress) - { - m_hDialog = Dlg; - m_UrlHasBeenCopied = FALSE; - m_progress = pProgress; - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE OnStartBinding( - DWORD dwReserved, - IBinding *pib) - { - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE GetPriority( - LONG *pnPriority) - { - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE OnLowResource( - DWORD reserved) - { - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE OnProgress( - ULONG ulProgress, - ULONG ulProgressMax, - ULONG ulStatusCode, - LPCWSTR szStatusText) - { - HWND Item; - LONG r; - - m_progress->SetProgress(ulProgress, ulProgressMax); - - Item = GetDlgItem(m_hDialog, IDC_DOWNLOAD_STATUS); - if (Item && szStatusText && wcslen(szStatusText) > 0 && m_UrlHasBeenCopied == FALSE) - { - SIZE_T len = wcslen(szStatusText) + 1; - ATL::CStringW buf; - DWORD dummyLen; - - /* beautify our url for display purposes */ - if (!InternetCanonicalizeUrlW(szStatusText, buf.GetBuffer(len), &dummyLen, ICU_DECODE | ICU_NO_ENCODE)) - { - /* just use the original */ - buf.ReleaseBuffer(); - buf = szStatusText; - } - else - { - buf.ReleaseBuffer(); - } - - /* paste it into our dialog and don't do it again in this instance */ - SendMessageW(Item, WM_SETTEXT, 0, (LPARAM) buf.GetString()); - m_UrlHasBeenCopied = TRUE; - } - - SetLastError(ERROR_SUCCESS); - r = GetWindowLongPtrW(m_hDialog, GWLP_USERDATA); - if (r || GetLastError() != ERROR_SUCCESS) - { - return E_ABORT; - } - - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE OnStopBinding( - HRESULT hresult, - LPCWSTR szError) - { - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE GetBindInfo( - DWORD *grfBINDF, - BINDINFO *pbindinfo) - { - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE OnDataAvailable( - DWORD grfBSCF, - DWORD dwSize, - FORMATETC *pformatetc, - STGMEDIUM *pstgmed) - { - return S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE OnObjectAvailable( - REFIID riid, - IUnknown *punk) - { - return S_OK; - } - - BEGIN_COM_MAP(CDownloadDialog) - COM_INTERFACE_ENTRY_IID(IID_IBindStatusCallback, IBindStatusCallback) - END_COM_MAP() -}; - class CDowloadingAppsListView : public CListView { @@ -406,12 +285,6 @@ public: } }; -extern "C" -HRESULT WINAPI CDownloadDialog_Constructor(HWND Dlg, CDownloaderProgress* pProgress, REFIID riid, LPVOID *ppv) -{ - return ShellObjectCreatorInit(Dlg, pProgress, riid, ppv); -} - #ifdef USE_CERT_PINNING typedef CHeapPtr CLocalPtr; @@ -472,6 +345,7 @@ class CDownloadManager static CDowloadingAppsListView DownloadsListView; static CDownloaderProgress ProgressBar; static BOOL bCancelled; + static VOID UpdateProgress(HWND hDlg, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText); public: static VOID Add(DownloadInfo info); static VOID Download(const DownloadInfo& DLInfo, BOOL bIsModal = FALSE); @@ -586,9 +460,46 @@ INT_PTR CALLBACK CDownloadManager::DownloadDlgProc(HWND Dlg, UINT uMsg, WPARAM w } } +BOOL UrlHasBeenCopied; + +VOID CDownloadManager::UpdateProgress( + HWND hDlg, + ULONG ulProgress, + ULONG ulProgressMax, + ULONG ulStatusCode, + LPCWSTR szStatusText) +{ + HWND Item; + + ProgressBar.SetProgress(ulProgress, ulProgressMax); + + Item = GetDlgItem(hDlg, IDC_DOWNLOAD_STATUS); + if (Item && szStatusText && wcslen(szStatusText) > 0 && UrlHasBeenCopied == FALSE) + { + SIZE_T len = wcslen(szStatusText) + 1; + ATL::CStringW buf; + DWORD dummyLen; + + /* beautify our url for display purposes */ + if (!InternetCanonicalizeUrlW(szStatusText, buf.GetBuffer(len), &dummyLen, ICU_DECODE | ICU_NO_ENCODE)) + { + /* just use the original */ + buf.ReleaseBuffer(); + buf = szStatusText; + } + else + { + buf.ReleaseBuffer(); + } + + /* paste it into our dialog and don't do it again in this instance */ + SendMessageW(Item, WM_SETTEXT, 0, (LPARAM) buf.GetString()); + UrlHasBeenCopied = TRUE; + } +} + DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) { - CComPtr dl; ATL::CStringW Path; PWSTR p, q; @@ -700,11 +611,8 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) DownloadsListView.SetDownloadStatus(iAppId, DLSTATUS_DOWNLOADING); // download it + UrlHasBeenCopied = FALSE; bTempfile = TRUE; - CDownloadDialog_Constructor(hDlg, &ProgressBar, IID_PPV_ARG(IBindStatusCallback, &dl)); - - if (dl == NULL) - goto end; /* FIXME: this should just be using the system-wide proxy settings */ switch (SettingsInfo.Proxy) @@ -843,7 +751,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) } dwCurrentBytesRead += dwBytesRead; - dl->OnProgress(dwCurrentBytesRead, dwContentLen, 0, InfoArray[iAppId].szUrl.GetString()); + UpdateProgress(hDlg, dwCurrentBytesRead, dwContentLen, 0, InfoArray[iAppId].szUrl.GetString()); } while (dwBytesRead && !bCancelled); CloseHandle(hOut); @@ -858,7 +766,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) ProgressBar.SetMarquee(FALSE); dwContentLen = dwCurrentBytesRead; - dl->OnProgress(dwCurrentBytesRead, dwContentLen, 0, InfoArray[iAppId].szUrl.GetString()); + UpdateProgress(hDlg, dwCurrentBytesRead, dwContentLen, 0, InfoArray[iAppId].szUrl.GetString()); } /* if this thing isn't a RAPPS update and it has a SHA-1 checksum -- 2.17.1