summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2023-07-26 17:02:53 +0300
committerGeorge Hazan <george.hazan@gmail.com>2023-07-26 17:02:53 +0300
commite0bf792776131deef8f2634fb3eeb8bd8239c059 (patch)
treea004484e81d10505af43d1efa66726d4a9bb6d39 /src
parent6f0837663b1aac2ede278e7dd8fb416290f82dad (diff)
.
Diffstat (limited to 'src')
-rw-r--r--src/mir_app/src/db_events.cpp5
-rw-r--r--src/mir_app/src/file.cpp3
-rw-r--r--src/mir_app/src/filexferdlg.cpp5
-rw-r--r--src/mir_app/src/mir_app.def6
-rw-r--r--src/mir_app/src/mir_app64.def6
-rw-r--r--src/mir_app/src/proto_chains.cpp6
-rw-r--r--src/mir_app/src/proto_interface.cpp9
-rw-r--r--src/mir_app/src/protocols.cpp2
8 files changed, 32 insertions, 10 deletions
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);