From 5cfd54b9152944f686c2ca2402e85280b3130f32 Mon Sep 17 00:00:00 2001
From: MikalaiR <nikolay.romanovich@narod.ru>
Date: Thu, 24 Sep 2015 16:30:09 +0000
Subject: SendSS: correct version of prevoious commit

git-svn-id: http://svn.miranda-ng.org/main/trunk@15434 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 plugins/SendScreenshotPlus/src/CSendDropbox.cpp | 27 +++----------------------
 plugins/SendScreenshotPlus/src/CSendDropbox.h   |  5 +++--
 plugins/SendScreenshotPlus/src/Utils.h          | 13 ++++++++++++
 3 files changed, 19 insertions(+), 26 deletions(-)

(limited to 'plugins')

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
-- 
cgit v1.2.3