diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/auth/Loginbox/downloadResult.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/auth/Loginbox/downloadResult.h')
-rw-r--r-- | Src/auth/Loginbox/downloadResult.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/Src/auth/Loginbox/downloadResult.h b/Src/auth/Loginbox/downloadResult.h new file mode 100644 index 00000000..aa4e4c5e --- /dev/null +++ b/Src/auth/Loginbox/downloadResult.h @@ -0,0 +1,110 @@ +#ifndef NULLSOFT_AUTH_LOGIN_DOWNLOAD_RESULT_HEADER +#define NULLSOFT_AUTH_LOGIN_DOWNLOAD_RESULT_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#include <wtypes.h> +#include "../dlmgr/api_downloadmanager.h" + +#define E_DWNLD_OK S_OK +#define E_DWNLD_BUSY E_PENDING +#define E_DWNLD_FAIL E_FAIL +#define E_DWNLD_ABORT E_ABORT +#define E_DWNLD_TIMEOUT HRESULT_FROM_WIN32(ERROR_TIMEOUT) +#define E_DWNLD_CANT_CONNECT HRESULT_FROM_WIN32(ERROR_NOT_CONNECTED) +#define E_DWNLD_WRITE_ERROR HRESULT_FROM_WIN32(ERROR_WRITE_FAULT) + +class LoginStatus; + +class LoginDownloadResult : public ifc_downloadManagerCallback +{ +public: + typedef void (CALLBACK *Callback)(LoginDownloadResult *result, void *data); + + typedef enum + { + stateMask = 0x00000FF00, + stateReady = 0x00000000, + stateInitializing = 0x00000100, + stateConnecting = 0x00000200, + stateReceiving = 0x00000300, + stateCompleted = 0x00000400, + stateAborting = 0x00000500, + } States; + + typedef enum + { + typeMask = 0x0000000FF, + typeUnknown = 0x00000000, + typeImage = 0x00000001, + typeProviderList = 0x00000002, + } Types; + + typedef enum + { + flagsMask = 0xFFFF0000, + flagUserAbort = 0x00010000, + } Flags; + +protected: + LoginDownloadResult(api_downloadManager *pManager, UINT uType, Callback fnCallback, void *pData, LoginStatus *pStatus); + ~LoginDownloadResult(); + +public: + static HRESULT CreateInstance(api_downloadManager *pManager, UINT uType, Callback fnCallback, void *pData, LoginStatus *pStatus, LoginDownloadResult **instance); + +public: + /* Dispatchable */ + size_t AddRef(); + size_t Release(); + int QueryInterface(GUID interface_guid, void **object); + + HRESULT GetWaitHandle(HANDLE *handle); + HRESULT GetData(void **data); + HRESULT GetType(UINT *type); + HRESULT GetState(UINT *state); + HRESULT GetFile(LPCWSTR *ppszPath); + + HRESULT CreateDownloadFileName(LPSTR pszBuffer, UINT cchBufferMax); + HRESULT GetUrl(LPSTR pszBuffer, UINT cchBufferMax); + HRESULT RequestAbort(BOOL fDrop); + +protected: + /* ifc_downloadManagerCallback */ + void Event_DownloadFinish(DownloadToken token); + void Event_DownloadTick(DownloadToken token); + void Event_DownloadError(DownloadToken token, int errorCode); + void Event_DownloadCancel(DownloadToken token); + void Event_DownloadConnect(DownloadToken token); + void Event_DownloadInit(DownloadToken token); + + void DownloadCompleted(int errorCode); + void SetState(UINT uState); + void SetType(UINT uType); + void SetFlags(UINT uFlags, UINT uMask); + void SetStatus(); + void RemoveStatus(); + + + +protected: + size_t ref; + UINT flags; + LPWSTR address; + INT result; + api_downloadManager *manager; + DownloadToken cookie; + HANDLE completed; + Callback callback; + void *data; + LoginStatus *status; + UINT statusCookie; + CRITICAL_SECTION lock; + +protected: + RECVS_DISPATCH; +}; + +#endif //NULLSOFT_AUTH_LOGINDOWNLOADER_HEADER
\ No newline at end of file |