summaryrefslogtreecommitdiff
path: root/plugins/NewStory/src
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2023-07-29 14:23:02 +0300
committerGeorge Hazan <george.hazan@gmail.com>2023-07-29 14:23:02 +0300
commitedbfd659e4990494670e535d5be282659cd5bfc8 (patch)
tree47dabe0dd71e2fa07b8476273e58ead785317f36 /plugins/NewStory/src
parenta63fdd451d23aa5d4b33c1bcf3540bea411f3358 (diff)
fixes #3602 ("Copy path" в контекстном меню для файлов)
Diffstat (limited to 'plugins/NewStory/src')
-rw-r--r--plugins/NewStory/src/history_array.cpp1
-rw-r--r--plugins/NewStory/src/history_array.h2
-rw-r--r--plugins/NewStory/src/history_control.cpp22
-rw-r--r--plugins/NewStory/src/history_control.h1
-rw-r--r--plugins/NewStory/src/history_menus.cpp30
5 files changed, 50 insertions, 6 deletions
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");