diff options
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendDropbox.cpp | 27 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendDropbox.h | 5 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/Utils.h | 13 |
3 files changed, 19 insertions, 26 deletions
diff --git a/plugins/SendScreenshotPlus/src/CSendDropbox.cpp b/plugins/SendScreenshotPlus/src/CSendDropbox.cpp index 635a7f3673..30d01d22f8 100644 --- a/plugins/SendScreenshotPlus/src/CSendDropbox.cpp +++ b/plugins/SendScreenshotPlus/src/CSendDropbox.cpp @@ -34,14 +34,12 @@ CSendDropbox::CSendDropbox(HWND Owner, MCONTACT hContact, bool bAsync) : CSend(Owner, hContact, bAsync) { /// @todo : re-enable SS_DLG_DELETEAFTERSSEND with full implemention of Dropbox upload with progress, msg and sounds - m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND/* | SS_DLG_DELETEAFTERSSEND*/; + m_EnableItem = SS_DLG_DESCRIPTION | SS_DLG_AUTOSEND | SS_DLG_DELETEAFTERSSEND; m_pszSendTyp = TranslateT("Dropbox transfer"); - m_hEvent = CreateEvent(NULL, 0, 0, NULL); } CSendDropbox::~CSendDropbox() { - CloseHandle(m_hEvent); } //--------------------------------------------------------------------------- @@ -59,7 +57,6 @@ void CSendDropbox::SendThread() /// @todo : SS_DLG_DESCRIPTION and SS_DLG_DELETEAFTERSSEND are of no use as of now since we don't track upload progress m_hDropHook = HookEventObj(ME_DROPBOX_SENT, OnDropSend, this); - m_hOnAck = HookEventObj(ME_PROTO_ACK, OnDropAck, this); if ((m_hDropSend = (HANDLE)CallService(MS_DROPBOX_SEND_FILE, (WPARAM)m_hContact, (LPARAM)m_pszFile)) == NULL) { @@ -67,8 +64,7 @@ void CSendDropbox::SendThread() Exit(ACKRESULT_FAILED); return; } - WaitForSingleObject(m_hEvent, INFINITE); - UnhookEvent(m_hOnAck); + m_hEvent.Wait(); UnhookEvent(m_hDropHook); if (m_URL) @@ -87,24 +83,7 @@ int CSendDropbox::OnDropSend(void *obj, WPARAM, LPARAM lParam) { self->m_URL = mir_strdup(info->data[0]); } - SetEvent(self->m_hEvent); - } - return 0; -} - -int CSendDropbox::OnDropAck(void *obj, WPARAM, LPARAM lParam) -{ - CSendDropbox* self = (CSendDropbox*)obj; - ACKDATA *ack = (ACKDATA*)lParam; - if (ack->hProcess == self->m_hDropSend) - { - switch (ack->result) - { - case ACKRESULT_DENIED: - case ACKRESULT_FAILED: - SetEvent(self->m_hEvent); - break; - } + self->m_hEvent.Set(); } return 0; } diff --git a/plugins/SendScreenshotPlus/src/CSendDropbox.h b/plugins/SendScreenshotPlus/src/CSendDropbox.h index 83b2db142e..66e644e537 100644 --- a/plugins/SendScreenshotPlus/src/CSendDropbox.h +++ b/plugins/SendScreenshotPlus/src/CSendDropbox.h @@ -29,6 +29,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef _CSEND_DROPBOX_FILE_H #define _CSEND_DROPBOX_FILE_H +#include "Utils.h" + //--------------------------------------------------------------------------- class CSendDropbox : public CSend { public: @@ -38,10 +40,9 @@ class CSendDropbox : public CSend { int Send(); protected: - HANDLE m_hEvent; + EventHandle m_hEvent; HANDLE m_hDropHook; HANDLE m_hDropSend; - HANDLE m_hOnAck; void SendThread(); static void SendThreadWrapper(void *Obj); diff --git a/plugins/SendScreenshotPlus/src/Utils.h b/plugins/SendScreenshotPlus/src/Utils.h index 0beeaabd18..94e5a73ea4 100644 --- a/plugins/SendScreenshotPlus/src/Utils.h +++ b/plugins/SendScreenshotPlus/src/Utils.h @@ -75,4 +75,17 @@ void SaveTIF(HBITMAP hBmp, TCHAR* szFilename); //void ShowPopup(char *title, char *text); */ + +class EventHandle
+{
+ HANDLE _hEvent;
+public:
+ inline EventHandle() { _hEvent = CreateEvent(NULL, 0, 0, NULL); }
+ inline ~EventHandle() { CloseHandle(_hEvent); }
+ inline void Set() { SetEvent(_hEvent); }
+ inline void Wait() { WaitForSingleObject(_hEvent, INFINITE); }
+ inline void Wait(DWORD dwMilliseconds) { WaitForSingleObject(_hEvent, dwMilliseconds); }
+ inline operator HANDLE() { return _hEvent; }
+}; + #endif |