diff options
author | George Hazan <george.hazan@gmail.com> | 2023-11-26 12:09:14 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-11-26 12:09:14 +0300 |
commit | f4051cf4da1635d66e8738d65dd6564dc4998df8 (patch) | |
tree | e6ba50631b1d179d22af853dda7318b1de0f00be /src/mir_app | |
parent | 7f73433ab8374b7456b29d3a607591029fe97c81 (diff) |
fixes #3965 (NewStory: не стирать исходящий файл с диска при удалении события)
Diffstat (limited to 'src/mir_app')
-rw-r--r-- | src/mir_app/src/file.cpp | 14 | ||||
-rw-r--r-- | src/mir_app/src/file.h | 1 | ||||
-rw-r--r-- | src/mir_app/src/srmm_util.cpp | 8 |
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);
|