summaryrefslogtreecommitdiff
path: root/src/mir_app
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2023-11-26 12:09:14 +0300
committerGeorge Hazan <george.hazan@gmail.com>2023-11-26 12:09:14 +0300
commitf4051cf4da1635d66e8738d65dd6564dc4998df8 (patch)
treee6ba50631b1d179d22af853dda7318b1de0f00be /src/mir_app
parent7f73433ab8374b7456b29d3a607591029fe97c81 (diff)
fixes #3965 (NewStory: не стирать исходящий файл с диска при удалении события)
Diffstat (limited to 'src/mir_app')
-rw-r--r--src/mir_app/src/file.cpp14
-rw-r--r--src/mir_app/src/file.h1
-rw-r--r--src/mir_app/src/srmm_util.cpp8
3 files changed, 18 insertions, 5 deletions
diff --git a/src/mir_app/src/file.cpp b/src/mir_app/src/file.cpp
index 6810acb103..aaa5477a4b 100644
--- a/src/mir_app/src/file.cpp
+++ b/src/mir_app/src/file.cpp
@@ -193,13 +193,19 @@ static int SRFilePreShutdown(WPARAM, LPARAM)
return 0;
}
-static int SRFileEventDeleted(WPARAM /*hContact*/, LPARAM hDbEvent)
+static int SRFileEventDeleted(WPARAM hContact, LPARAM hDbEvent)
{
DB::EventInfo dbei(hDbEvent);
- if (dbei && dbei.eventType == EVENTTYPE_FILE && (dbei.flags & DBEF_SENT) == 0) {
+ if (dbei && dbei.eventType == EVENTTYPE_FILE) {
DB::FILE_BLOB blob(dbei);
- if (auto *pwszName = blob.getLocalName())
- DeleteFileW(pwszName);
+ if (auto *pwszName = blob.getLocalName()) {
+ wchar_t wszReceiveFolder[MAX_PATH];
+ GetContactSentFilesDir(hContact, wszReceiveFolder, _countof(wszReceiveFolder));
+
+ // we don't remove sent files, located outside Miranda's folder for sent offline files
+ if ((dbei.flags & DBEF_SENT) == 0 || wcsnicmp(pwszName, wszReceiveFolder, wcslen(wszReceiveFolder)))
+ DeleteFileW(pwszName);
+ }
}
return 0;
diff --git a/src/mir_app/src/file.h b/src/mir_app/src/file.h
index 9a21931359..62931d81b4 100644
--- a/src/mir_app/src/file.h
+++ b/src/mir_app/src/file.h
@@ -84,6 +84,7 @@ void LaunchRecvDialog(CLISTEVENT *cle);
void RemoveInvalidFilenameChars(wchar_t *tszString);
void RemoveInvalidPathChars(wchar_t *tszString);
void GetContactReceivedFilesDir(MCONTACT hContact, wchar_t *szDir, int cchDir, BOOL substVars);
+void GetContactSentFilesDir(MCONTACT hContact, wchar_t *szDir, int cchDir);
void GetReceivedFilesDir(wchar_t *szDir, int cchDir);
int BrowseForFolder(HWND hwnd, wchar_t *szPath);
diff --git a/src/mir_app/src/srmm_util.cpp b/src/mir_app/src/srmm_util.cpp
index c064aa6ce0..c8e1747e67 100644
--- a/src/mir_app/src/srmm_util.cpp
+++ b/src/mir_app/src/srmm_util.cpp
@@ -153,11 +153,17 @@ void OFDTHREAD::ResetFileName(const wchar_t *pwszNewName)
/////////////////////////////////////////////////////////////////////////////////////////
+void GetContactSentFilesDir(MCONTACT hContact, wchar_t *szDir, int cchDir)
+{
+ mir_snwprintf(szDir, cchDir, L"%s\\dlFiles\\%d\\", VARSW(L"%miranda_userdata%").get(), hContact);
+}
+
+
static void GenerateLocalName(const DB::EventInfo &dbei, DB::FILE_BLOB &blob, MCONTACT hContact)
{
wchar_t wszReceiveFolder[MAX_PATH];
if (dbei.flags & DBEF_SENT) // don't mix sent & received files
- mir_snwprintf(wszReceiveFolder, L"%s\\dlFiles\\%d\\", VARSW(L"%miranda_userdata%").get(), hContact);
+ GetContactSentFilesDir(hContact, wszReceiveFolder, _countof(wszReceiveFolder));
else
GetContactReceivedFilesDir(hContact, wszReceiveFolder, _countof(wszReceiveFolder), true);
CreateDirectoryTreeW(wszReceiveFolder);