diff options
author | MikalaiR <nikolay.romanovich@narod.ru> | 2015-09-24 11:56:40 +0000 |
---|---|---|
committer | MikalaiR <nikolay.romanovich@narod.ru> | 2015-09-24 11:56:40 +0000 |
commit | d408de1957bcf6f07fefe94a1c4bb6a55791508b (patch) | |
tree | 387272bd00f156de64b56ac170fe0308d6e21de4 | |
parent | 1327fc6976d246fe73be1a73b9fb58767b8dc635 (diff) |
SendSS: dropbox fixes
git-svn-id: http://svn.miranda-ng.org/main/trunk@15431 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendDropbox.cpp | 29 | ||||
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendDropbox.h | 2 |
2 files changed, 23 insertions, 8 deletions
diff --git a/plugins/SendScreenshotPlus/src/CSendDropbox.cpp b/plugins/SendScreenshotPlus/src/CSendDropbox.cpp index e1d59255f3..635a7f3673 100644 --- a/plugins/SendScreenshotPlus/src/CSendDropbox.cpp +++ b/plugins/SendScreenshotPlus/src/CSendDropbox.cpp @@ -58,21 +58,17 @@ 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 - if (!ServiceExists(MS_DROPBOX_SEND_FILE)) - { - Error(LPGENT("Dropbox plugin is not installed")); - Exit(ACKRESULT_FAILED); return; - } - 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))) + if ((m_hDropSend = (HANDLE)CallService(MS_DROPBOX_SEND_FILE, (WPARAM)m_hContact, (LPARAM)m_pszFile)) == NULL) { Error(LPGENT("%s (%i):\nCould not add a share to the Dropbox plugin."), TranslateTS(m_pszSendTyp), (INT_PTR)m_hDropSend); Exit(ACKRESULT_FAILED); return; } - WaitForSingleObject(m_hEvent, 1000 * 60 * 5); + WaitForSingleObject(m_hEvent, INFINITE); + UnhookEvent(m_hOnAck); UnhookEvent(m_hDropHook); if (m_URL) @@ -96,6 +92,23 @@ int CSendDropbox::OnDropSend(void *obj, WPARAM, LPARAM lParam) 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; + } + } + return 0; +} + void CSendDropbox::SendThreadWrapper(void * Obj) { reinterpret_cast<CSendDropbox*>(Obj)->SendThread(); diff --git a/plugins/SendScreenshotPlus/src/CSendDropbox.h b/plugins/SendScreenshotPlus/src/CSendDropbox.h index cade8e9d8e..83b2db142e 100644 --- a/plugins/SendScreenshotPlus/src/CSendDropbox.h +++ b/plugins/SendScreenshotPlus/src/CSendDropbox.h @@ -41,10 +41,12 @@ class CSendDropbox : public CSend { HANDLE m_hEvent; HANDLE m_hDropHook; HANDLE m_hDropSend; + HANDLE m_hOnAck; void SendThread(); static void SendThreadWrapper(void *Obj); static int OnDropSend(void*, WPARAM, LPARAM); + static int OnDropAck(void*, WPARAM, LPARAM); }; //--------------------------------------------------------------------------- |