From e0bf792776131deef8f2634fb3eeb8bd8239c059 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 26 Jul 2023 17:02:53 +0300 Subject: . --- src/mir_app/src/db_events.cpp | 5 ++++- src/mir_app/src/file.cpp | 3 ++- src/mir_app/src/filexferdlg.cpp | 5 ++++- src/mir_app/src/mir_app.def | 6 +++++- src/mir_app/src/mir_app64.def | 6 +++++- src/mir_app/src/proto_chains.cpp | 6 ++++++ src/mir_app/src/proto_interface.cpp | 9 ++++++--- src/mir_app/src/protocols.cpp | 2 -- 8 files changed, 32 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/mir_app/src/db_events.cpp b/src/mir_app/src/db_events.cpp index ed1dcd0921..b31742623c 100644 --- a/src/mir_app/src/db_events.cpp +++ b/src/mir_app/src/db_events.cpp @@ -340,8 +340,11 @@ void DB::FILE_BLOB::write(DB::EventInfo &dbei) { JSONNode root; root << WCHAR_PARAM("f", m_wszFileName) << WCHAR_PARAM("d", m_wszDescription ? m_wszDescription : L""); - if (isOffline()) + if (isOffline()) { root << CHAR_PARAM("u", m_szProtoString) << INT_PARAM("fs", m_iFileSize) << INT_PARAM("ft", m_iTransferred); + if (mir_wstrlen(m_wszLocalName)) + root << WCHAR_PARAM("lf", m_wszLocalName); + } std::string text = root.write(); dbei.cbBlob = (int)text.size() + 1; diff --git a/src/mir_app/src/file.cpp b/src/mir_app/src/file.cpp index 1caa5414b8..5267fad64b 100644 --- a/src/mir_app/src/file.cpp +++ b/src/mir_app/src/file.cpp @@ -260,7 +260,8 @@ MEVENT Proto_RecvFile(MCONTACT hContact, PROTORECVFILE *pre) } DB::FILE_BLOB blob(wszFiles, wszDescr); - CallProtoService(dbei.szModule, PS_PRECREATE_OFFLINEFILE, WPARAM(&blob), pre->lParam); + if (auto *ppro = Proto_GetContactInstance(hContact)) + ppro->OnReceiveOfflineFile(blob, (void*)pre->lParam); blob.write(dbei); MEVENT hdbe = db_event_add(hContact, &dbei); diff --git a/src/mir_app/src/filexferdlg.cpp b/src/mir_app/src/filexferdlg.cpp index c1cd617cf5..7812d7ba90 100644 --- a/src/mir_app/src/filexferdlg.cpp +++ b/src/mir_app/src/filexferdlg.cpp @@ -589,7 +589,7 @@ INT_PTR CALLBACK DlgProcFileTransfer(HWND hwndDlg, UINT msg, WPARAM wParam, LPAR else { Skin_PlaySound("FileDone"); if (dat->send) { - dat->fs = nullptr; /* protocol will free structure */ + HANDLE fs = dat->fs; dat->fs = nullptr; /* protocol will free structure */ SetFtStatus(hwndDlg, LPGENW("Transfer completed."), FTS_TEXT); DB::EventInfo dbei; @@ -599,7 +599,10 @@ INT_PTR CALLBACK DlgProcFileTransfer(HWND hwndDlg, UINT msg, WPARAM wParam, LPAR dbei.timestamp = time(0); DB::FILE_BLOB blob(dat->szFilenames, dat->szMsg); + if (auto *ppro = Proto_GetContactInstance(dat->hContact)) + ppro->OnSendOfflineFile(dbei, blob, fs); blob.write(dbei); + db_event_add(dat->hContact, &dbei); dat->files = nullptr; // protocol library frees this diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index eced6ed67c..1d06496629 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -864,7 +864,7 @@ Chat_IsMuted @941 NONAME ?getIcon@LOGINFO@@QBEHXZ @981 NONAME ?getIndex@LOGINFO@@QBEHXZ @982 NONAME ?write@LOGINFO@@QBEXPAURtfChatLogStreamData@@_NAAV?$CMStringT@DV?$ChTraitsCRT@D@@@@PB_W@Z @983 NONAME -?OnCreateOfflineFile@PROTO_INTERFACE@@UAEXAAVFILE_BLOB@DB@@PAX@Z @984 NONAME +?OnReceiveOfflineFile@PROTO_INTERFACE@@UAEXAAVFILE_BLOB@DB@@PAX@Z @984 NONAME ?setSize@FILE_BLOB@DB@@QAEX_J@Z @985 NONAME ?setUrl@FILE_BLOB@DB@@QAEXPBD@Z @986 NONAME ?Clist_GetEvent@@YGPAUCListEvent@@IH@Z @987 NONAME @@ -886,3 +886,7 @@ Clist_GroupRestoreExpanded @1002 NONAME Clist_GroupSaveExpanded @1003 NONAME ?OnRedrawTimer@CSrmmBaseDialog@@AAEXPAVCTimer@@@Z @1004 NONAME ?ScheduleRedrawLog@CSrmmBaseDialog@@QAEXXZ @1005 NONAME +?OnSendOfflineFile@PROTO_INTERFACE@@UAEXAAVEventInfo@DB@@AAVFILE_BLOB@3@PAX@Z @1006 NONAME +?Proto_GetContactInstance@@YGPAUPROTO_INTERFACE@@I@Z @1007 NONAME +?complete@FILE_BLOB@DB@@QAEX_J@Z @1008 NONAME +?setName@FILE_BLOB@DB@@QAEXPB_W@Z @1009 NONAME diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 3598906804..8c6bc1eadc 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -864,7 +864,7 @@ Chat_IsMuted @941 NONAME ?getIcon@LOGINFO@@QEBAHXZ @981 NONAME ?getIndex@LOGINFO@@QEBAHXZ @982 NONAME ?write@LOGINFO@@QEBAXPEAURtfChatLogStreamData@@_NAEAV?$CMStringT@DV?$ChTraitsCRT@D@@@@PEB_W@Z @983 NONAME -?OnCreateOfflineFile@PROTO_INTERFACE@@UEAAXAEAVFILE_BLOB@DB@@PEAX@Z @984 NONAME +?OnReceiveOfflineFile@PROTO_INTERFACE@@UEAAXAEAVFILE_BLOB@DB@@PEAX@Z @984 NONAME ?setSize@FILE_BLOB@DB@@QEAAX_J@Z @985 NONAME ?setUrl@FILE_BLOB@DB@@QEAAXPEBD@Z @986 NONAME ?Clist_GetEvent@@YAPEAUCListEvent@@IH@Z @987 NONAME @@ -886,3 +886,7 @@ Clist_GroupRestoreExpanded @1002 NONAME Clist_GroupSaveExpanded @1003 NONAME ?OnRedrawTimer@CSrmmBaseDialog@@AEAAXPEAVCTimer@@@Z @1004 NONAME ?ScheduleRedrawLog@CSrmmBaseDialog@@QEAAXXZ @1005 NONAME +?OnSendOfflineFile@PROTO_INTERFACE@@UEAAXAEAVEventInfo@DB@@AEAVFILE_BLOB@3@PEAX@Z @1006 NONAME +?Proto_GetContactInstance@@YAPEAUPROTO_INTERFACE@@I@Z @1007 NONAME +?complete@FILE_BLOB@DB@@QEAAX_J@Z @1008 NONAME +?setName@FILE_BLOB@DB@@QEAAXPEB_W@Z @1009 NONAME diff --git a/src/mir_app/src/proto_chains.cpp b/src/mir_app/src/proto_chains.cpp index 5417c07995..69b5adc285 100644 --- a/src/mir_app/src/proto_chains.cpp +++ b/src/mir_app/src/proto_chains.cpp @@ -134,6 +134,12 @@ MIR_APP_DLL(INT_PTR) Proto_ChainRecv(int iOrder, CCSDATA *ccs) return ret; } +MIR_APP_DLL(PROTO_INTERFACE *) Proto_GetContactInstance(MCONTACT hContact) +{ + auto *pa = Proto_GetContactAccount(hContact); + return (pa) ? pa->ppro : nullptr; +} + MIR_APP_DLL(PROTOACCOUNT*) Proto_GetContactAccount(MCONTACT hContact) { if (hContact == 0) diff --git a/src/mir_app/src/proto_interface.cpp b/src/mir_app/src/proto_interface.cpp index 7029c6295a..b4621cf918 100644 --- a/src/mir_app/src/proto_interface.cpp +++ b/src/mir_app/src/proto_interface.cpp @@ -80,9 +80,6 @@ MWindow PROTO_INTERFACE::OnCreateAccMgrUI(MWindow) return nullptr; // error } -void PROTO_INTERFACE::OnCreateOfflineFile(DB::FILE_BLOB&, void *) -{} - void PROTO_INTERFACE::OnEventDeleted(MCONTACT, MEVENT) {} @@ -103,6 +100,12 @@ bool PROTO_INTERFACE::IsReadyToExit() return true; } +void PROTO_INTERFACE::OnReceiveOfflineFile(DB::FILE_BLOB &, void *) +{} + +void PROTO_INTERFACE::OnSendOfflineFile(DB::EventInfo &, DB::FILE_BLOB &, void *) +{} + void PROTO_INTERFACE::OnShutdown() {} diff --git a/src/mir_app/src/protocols.cpp b/src/mir_app/src/protocols.cpp index d369bdf4da..f4d7b42d2d 100644 --- a/src/mir_app/src/protocols.cpp +++ b/src/mir_app/src/protocols.cpp @@ -49,7 +49,6 @@ static TServiceListItem serviceItems[] = { PS_AUTHDENY, 4 }, { PSR_AUTH, 5 }, { PSS_AUTHREQUEST, 6 }, - { PS_PRECREATE_OFFLINEFILE, 7 }, { PSS_FILEALLOW, 8 }, { PSS_FILECANCEL, 9 }, { PSS_FILEDENY, 10 }, @@ -401,7 +400,6 @@ INT_PTR CallProtoServiceInt(MCONTACT hContact, const char *szModule, const char case 4: return (INT_PTR)ppi->AuthDeny((MEVENT)wParam, (wchar_t *)lParam); case 5: return (INT_PTR)ppi->AuthRecv(hContact, (PROTORECVEVENT *)lParam); case 6: return (INT_PTR)ppi->AuthRequest(hContact, (wchar_t *)lParam); - case 7: ppi->OnCreateOfflineFile(*(DB::FILE_BLOB *)wParam, (void *)lParam); return 0; case 8: return (INT_PTR)ppi->FileAllow(hContact, (HANDLE)wParam, (wchar_t *)lParam); case 9: return (INT_PTR)ppi->FileCancel(hContact, (HANDLE)wParam); case 10: return (INT_PTR)ppi->FileDeny(hContact, (HANDLE)wParam, (wchar_t *)lParam); -- cgit v1.2.3