diff options
-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);
|