From edbfd659e4990494670e535d5be282659cd5bfc8 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 29 Jul 2023 14:23:02 +0300 Subject: =?UTF-8?q?fixes=20#3602=20("Copy=20path"=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=BD=D0=BE=D0=BC=20=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=8E=20=D0=B4=D0=BB=D1=8F=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/NewStory/src/history_array.cpp | 1 + plugins/NewStory/src/history_array.h | 2 +- plugins/NewStory/src/history_control.cpp | 22 +++++++++++++++++++--- plugins/NewStory/src/history_control.h | 1 + plugins/NewStory/src/history_menus.cpp | 30 ++++++++++++++++++++++++++++-- 5 files changed, 50 insertions(+), 6 deletions(-) (limited to 'plugins/NewStory/src') diff --git a/plugins/NewStory/src/history_array.cpp b/plugins/NewStory/src/history_array.cpp index 41b091b37c..5767b91330 100644 --- a/plugins/NewStory/src/history_array.cpp +++ b/plugins/NewStory/src/history_array.cpp @@ -215,6 +215,7 @@ void ItemData::load(bool bFullLoad) DB::FILE_BLOB blob(dbe); if (blob.isOffline()) { m_bOfflineFile = true; + m_bOfflineDownloaded = blob.isCompleted(); CMStringW buf; buf.Append(blob.getName() ? blob.getName() : TranslateT("Unnamed")); diff --git a/plugins/NewStory/src/history_array.h b/plugins/NewStory/src/history_array.h index 212a85adbb..df9f2f9595 100644 --- a/plugins/NewStory/src/history_array.h +++ b/plugins/NewStory/src/history_array.h @@ -9,7 +9,7 @@ struct ItemData : public MZeroedObject bool m_bRtf; bool m_bSelected; bool m_bLoaded; - bool m_bOfflineFile; + bool m_bOfflineFile, m_bOfflineDownloaded; int savedTop; DB::EventInfo dbe; diff --git a/plugins/NewStory/src/history_control.cpp b/plugins/NewStory/src/history_control.cpp index 4e723dfa1c..7f25cfbc94 100644 --- a/plugins/NewStory/src/history_control.cpp +++ b/plugins/NewStory/src/history_control.cpp @@ -596,8 +596,19 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM int eventCount = data->items.getCount(); for (int i = 0; i < eventCount; i++) { ItemData *p = data->items.get(i, false); - if (p->m_bSelected) - res.Append(ptrW(TplFormatString(p->getCopyTemplate(), p->hContact, p))); + if (!p->m_bSelected) + continue; + + if (p->m_bOfflineFile) { + DB::EventInfo dbei(p->hEvent); + DB::FILE_BLOB blob(dbei); + if (p->m_bOfflineDownloaded) + res.Append(blob.getLocalName()); + else + res.Append(_A2T(blob.getUrl())); + res.Append(L"\r\n"); + } + else res.Append(ptrW(TplFormatString(p->getCopyTemplate(), p->hContact, p))); } Utils_ClipboardCopy(res); @@ -605,6 +616,11 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM InvalidateRect(hwnd, 0, FALSE); break; + case NSM_DOWNLOAD: + if (auto *p = data->items[data->caret]) + Srmm_DownloadOfflineFile(p->hContact, p->hEvent, lParam); + break; + case UM_EDITEVENT: idx = data->items.find(lParam); if (idx != -1) { @@ -835,7 +851,7 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM pt.y -= pItem->savedTop; if (pItem->m_bOfflineFile) { - Srmm_DownloadOfflineFile(pItem->hContact, pItem->hEvent, true); + Srmm_DownloadOfflineFile(pItem->hContact, pItem->hEvent, OFD_DOWNLOAD | OFD_RUN); return 0; } diff --git a/plugins/NewStory/src/history_control.h b/plugins/NewStory/src/history_control.h index 743992e90a..9c63d44df2 100644 --- a/plugins/NewStory/src/history_control.h +++ b/plugins/NewStory/src/history_control.h @@ -67,6 +67,7 @@ enum // NSM_COPY, NSM_EXPORT, + NSM_DOWNLOAD, // NSM_GETCOUNT, diff --git a/plugins/NewStory/src/history_menus.cpp b/plugins/NewStory/src/history_menus.cpp index 263d45cdf0..ad27626716 100644 --- a/plugins/NewStory/src/history_menus.cpp +++ b/plugins/NewStory/src/history_menus.cpp @@ -2,10 +2,20 @@ static int hMenuObject; static HANDLE hEventPreBuildMenu; -static HGENMENU hmiHistory; +static HGENMENU hmiHistory, hmiCopy, hmiSaveAs, hmiDownload; HMENU NSMenu_Build(ItemData *item) { + if (item->m_bOfflineFile) { + Menu_ModifyItem(hmiCopy, (item->m_bOfflineDownloaded) ? TranslateT("Copy file name") : TranslateT("Copy url")); + Menu_ShowItem(hmiSaveAs, true); + Menu_ShowItem(hmiDownload, !item->m_bOfflineDownloaded); + } + else { + Menu_ShowItem(hmiSaveAs, false); + Menu_ShowItem(hmiDownload, false); + } + NotifyEventHooks(hEventPreBuildMenu, item->hContact, (LPARAM)&item->dbe); HMENU hMenu = CreatePopupMenu(); @@ -39,6 +49,14 @@ static INT_PTR NSMenuHelper(WPARAM wParam, LPARAM lParam) SendMessage(pData->hwnd, NSM_SELECTITEMS, 0, pData->items.getCount() - 1); break; + case 5: + SendMessage(pData->hwnd, NSM_DOWNLOAD, 0, OFD_SAVEAS | OFD_RUN); + break; + + case 6: + SendMessage(pData->hwnd, NSM_DOWNLOAD, 0, OFD_DOWNLOAD); + break; + default: if (auto *pDlg = pData->pMsgDlg) { PostMessage(pDlg->GetHwnd(), WM_MOUSEACTIVATE, 0, 0); @@ -128,7 +146,15 @@ void InitMenus() mi.position = 100000; mi.name.a = LPGEN("Copy"); - Menu_AddNewStoryMenuItem(&mi, 1); + hmiCopy = Menu_AddNewStoryMenuItem(&mi, 1); + + mi.position = 100001; + mi.name.a = LPGEN("Save as"); + hmiSaveAs = Menu_AddNewStoryMenuItem(&mi, 5); + + mi.position = 100002; + mi.name.a = LPGEN("Download"); + hmiDownload = Menu_AddNewStoryMenuItem(&mi, 6); mi.position = 200000; mi.name.a = LPGEN("Edit"); -- cgit v1.2.3