From 93b3a77b2590443e2b1e868b96196175f99180b9 Mon Sep 17 00:00:00 2001 From: George Hazan <ghazan@miranda.im> Date: Sun, 22 Mar 2020 14:20:52 +0300 Subject: File transfers: - fixes #2274 (StdMsg & Scriver cannot send files to offline contacts even if their protocol allows that to do); - all copies of AddToFileList in all plugins removed; - ProcessFileDrop() function introduced to handle all file drop operations in all SRMM plugins & contact list --- src/core/stdmsg/src/msgdialog.cpp | 52 +++------------------------------------ src/core/stdmsg/src/msgs.h | 1 - 2 files changed, 3 insertions(+), 50 deletions(-) (limited to 'src/core') diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index 8d57bab10d..8e5aa0a79d 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -37,30 +37,6 @@ LIST<CMsgDialog> g_arDialogs(10, PtrKeySortT); ///////////////////////////////////////////////////////////////////////////////////////// -static void AddToFileList(wchar_t ***pppFiles, int &totalCount, const wchar_t *szFilename) -{ - *pppFiles = (wchar_t **)mir_realloc(*pppFiles, (++totalCount + 1) * sizeof(wchar_t *)); - (*pppFiles)[totalCount] = nullptr; - (*pppFiles)[totalCount - 1] = mir_wstrdup(szFilename); - - if (GetFileAttributes(szFilename) & FILE_ATTRIBUTE_DIRECTORY) { - WIN32_FIND_DATA fd; - wchar_t szPath[MAX_PATH]; - mir_snwprintf(szPath, L"%s\\*", szFilename); - HANDLE hFind = FindFirstFile(szPath, &fd); - if (hFind != INVALID_HANDLE_VALUE) { - do { - if (!mir_wstrcmp(fd.cFileName, L".") || !mir_wstrcmp(fd.cFileName, L"..")) continue; - mir_snwprintf(szPath, L"%s\\%s", szFilename, fd.cFileName); - AddToFileList(pppFiles, totalCount, szPath); - } while (FindNextFile(hFind, &fd)); - FindClose(hFind); - } - } -} - -///////////////////////////////////////////////////////////////////////////////////////// - CMsgDialog::CMsgDialog(CTabbedWindow *pOwner, MCONTACT hContact) : CSuper(g_plugin, IDD_MSG), m_btnOk(this, IDOK), @@ -573,7 +549,7 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) break; case WM_DROPFILES: // Mod from tabsrmm - ProcessFileDrop((HDROP)wParam); + ProcessFileDrop((HDROP)wParam, m_hContact); return TRUE; case HM_AVATARACK: @@ -987,7 +963,7 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) break; case WM_DROPFILES: - ProcessFileDrop((HDROP)wParam); + ProcessFileDrop((HDROP)wParam, m_hContact); break; case WM_LBUTTONDOWN: @@ -1107,7 +1083,7 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) if (OpenClipboard(m_message.GetHwnd())) { HANDLE hDrop = GetClipboardData(CF_HDROP); if (hDrop) - ProcessFileDrop((HDROP)hDrop); + ProcessFileDrop((HDROP)hDrop, m_hContact); CloseClipboard(); } } @@ -1501,28 +1477,6 @@ void CMsgDialog::RemakeLog() m_pLog->LogEvents(m_hDbEventFirst, -1, 0); } -void CMsgDialog::ProcessFileDrop(HDROP hDrop) -{ - if (m_szProto == nullptr) return; - if (!(CallProtoService(m_szProto, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_FILESEND)) return; - if (m_wStatus == ID_STATUS_OFFLINE) return; - if (m_hContact != 0) { - wchar_t szFilename[MAX_PATH]; - int fileCount = DragQueryFile(hDrop, -1, nullptr, 0), totalCount = 0; - wchar_t **ppFiles = nullptr; - for (int i = 0; i < fileCount; i++) { - DragQueryFile(hDrop, i, szFilename, _countof(szFilename)); - AddToFileList(&ppFiles, totalCount, szFilename); - } - CallServiceSync(MS_FILE_SENDSPECIFICFILEST, m_hContact, (LPARAM)ppFiles); - if (ppFiles) { - for (int i = 0; ppFiles[i]; i++) - mir_free(ppFiles[i]); - mir_free(ppFiles); - } - } -} - void CMsgDialog::ShowAvatar() { if (g_dat.bShowAvatar) { diff --git a/src/core/stdmsg/src/msgs.h b/src/core/stdmsg/src/msgs.h index 3f045dc17a..7b77bae289 100644 --- a/src/core/stdmsg/src/msgs.h +++ b/src/core/stdmsg/src/msgs.h @@ -58,7 +58,6 @@ class CMsgDialog : public CSrmmBaseDialog void Init(void); void NotifyTyping(int mode); - void ProcessFileDrop(HDROP hDrop); void ShowAvatar(void); void ShowTime(bool bForce); void SetupStatusBar(void); -- cgit v1.2.3