summaryrefslogtreecommitdiff
path: root/src/mir_app
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-01-19 15:44:57 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-01-19 15:44:57 +0300
commit010952c5c2dde278a024f6876e8189b949ea5dcf (patch)
tree06d2a2cadd982b4c742e4d839d7c1924faefc351 /src/mir_app
parentb509e969b7e5e6991c0590cbe43282f219bcc2c1 (diff)
the ancient atavism extincted: PROTORECVFILE structure with its own set of flags
Diffstat (limited to 'src/mir_app')
-rw-r--r--src/mir_app/src/db_events.cpp6
-rw-r--r--src/mir_app/src/file.cpp52
-rw-r--r--src/mir_app/src/file.h2
-rw-r--r--src/mir_app/src/mir_app.def5
-rw-r--r--src/mir_app/src/mir_app64.def5
-rw-r--r--src/mir_app/src/netlib_http.cpp2
-rw-r--r--src/mir_app/src/proto_chains.cpp4
-rw-r--r--src/mir_app/src/proto_interface.cpp4
-rw-r--r--src/mir_app/src/proto_internal.cpp4
-rw-r--r--src/mir_app/src/protocols.cpp2
10 files changed, 30 insertions, 56 deletions
diff --git a/src/mir_app/src/db_events.cpp b/src/mir_app/src/db_events.cpp
index e4296816b1..f8e34191de 100644
--- a/src/mir_app/src/db_events.cpp
+++ b/src/mir_app/src/db_events.cpp
@@ -331,6 +331,12 @@ wchar_t* DB::EventInfo::getString(const char *str) const
/////////////////////////////////////////////////////////////////////////////////////////
// File blob helper
+DB::FILE_BLOB::FILE_BLOB(void *pUserInfo, const char *pszName, const char *pszDescr, bool bUtf) :
+ m_wszFileName(bUtf ? mir_utf8decodeW(pszName) : mir_a2u(pszName)),
+ m_wszDescription(bUtf ? mir_utf8decodeW(pszDescr) : mir_a2u(pszDescr)),
+ m_pUserInfo(pUserInfo)
+{}
+
DB::FILE_BLOB::FILE_BLOB(const wchar_t *pwszName, const wchar_t *pwszDescr) :
m_wszFileName(mir_wstrdup(pwszName)),
m_wszDescription(mir_wstrdup(pwszDescr))
diff --git a/src/mir_app/src/file.cpp b/src/mir_app/src/file.cpp
index 4be92ea9be..7410ac05f4 100644
--- a/src/mir_app/src/file.cpp
+++ b/src/mir_app/src/file.cpp
@@ -211,58 +211,20 @@ INT_PTR openRecDir(WPARAM, LPARAM)
/////////////////////////////////////////////////////////////////////////////////////////
-MEVENT Proto_RecvFile(MCONTACT hContact, PROTORECVFILE *pre)
+MEVENT Proto_RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei)
{
- if (!pre || !pre->fileCount)
- return 0;
-
- bool bSilent = (pre->dwFlags & PRFF_SILENT) != 0;
- bool bSent = (pre->dwFlags & PRFF_SENT) != 0;
- bool bRead = (pre->dwFlags & PRFF_READ) != 0;
+ bool bSilent = (dbei.flags & DBEF_TEMPORARY) != 0;
+ bool bSent = (dbei.flags & DBEF_SENT) != 0;
+ bool bRead = (dbei.flags & DBEF_READ) != 0;
- DB::EventInfo dbei;
dbei.szModule = Proto_GetBaseAccountName(hContact);
- dbei.timestamp = pre->timestamp;
- dbei.szId = pre->szId;
- dbei.szUserId = pre->szUserId;
- dbei.szReplyId = pre->szReplyId;
dbei.eventType = EVENTTYPE_FILE;
- dbei.flags = DBEF_UTF;
- if (bSent)
- dbei.flags |= DBEF_SENT;
- if (bRead)
- dbei.flags |= DBEF_READ;
+ dbei.flags = (dbei.flags & ~DBEF_TEMPORARY) | DBEF_UTF;
CMStringW wszFiles, wszDescr;
- if ((pre->dwFlags & PRFF_UNICODE) == PRFF_UNICODE) {
- for (int i = 0; i < pre->fileCount; i++) {
- if (i != 0)
- wszFiles.AppendChar(',');
- wszFiles.Append(pre->files.w[i]);
- }
-
- wszDescr = pre->descr.w;
- }
- else {
- bool bUtf = (pre->dwFlags & PRFF_UTF) != 0;
-
- for (int i = 0; i < pre->fileCount; i++) {
- if (i != 0)
- wszFiles.AppendChar(',');
-
- if (bUtf)
- wszFiles.Append(Utf2T(pre->files.a[i]));
- else
- wszFiles.Append(_A2T(pre->files.a[i]));
- }
-
- wszDescr = (bUtf) ? Utf2T(pre->descr.a).get() : _A2T(pre->descr.a);
- }
-
- DB::FILE_BLOB blob(wszFiles, wszDescr);
if (auto *ppro = Proto_GetContactInstance(hContact))
- ppro->OnReceiveOfflineFile(blob, pre->pUserInfo);
+ ppro->OnReceiveOfflineFile(blob, blob.getUserInfo());
blob.write(dbei);
MEVENT hdbe = db_event_add(hContact, &dbei);
@@ -273,7 +235,7 @@ MEVENT Proto_RecvFile(MCONTACT hContact, PROTORECVFILE *pre)
CLISTEVENT cle = {};
cle.hContact = hContact;
cle.hDbEvent = hdbe;
- cle.lParam = LPARAM(pre->pUserInfo);
+ cle.lParam = LPARAM(blob.getUserInfo());
if (!bSilent && File::bAutoAccept && Contact::OnList(hContact))
LaunchRecvDialog(&cle);
diff --git a/src/mir_app/src/file.h b/src/mir_app/src/file.h
index a0d3937872..28ce186397 100644
--- a/src/mir_app/src/file.h
+++ b/src/mir_app/src/file.h
@@ -68,7 +68,7 @@ struct FileDlgData : public MZeroedObject
};
// file.c
-MEVENT Proto_RecvFile(MCONTACT hContact, PROTORECVFILE *pre);
+MEVENT Proto_RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei);
// filerecv.c
void LaunchRecvDialog(CLISTEVENT *cle);
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def
index 20d41c159c..1fa9ad6573 100644
--- a/src/mir_app/src/mir_app.def
+++ b/src/mir_app/src/mir_app.def
@@ -54,7 +54,7 @@ Button_SetSkin_IcoLib @24
?OnProtoRefresh@CProtoIntDlgBase@@MAEXIJ@Z @55 NONAME
?ProtoBroadcastAck@PROTO_INTERFACE@@QAEHIHHPAXJ@Z @56 NONAME
?RecvContacts@PROTO_INTERFACE@@UAEHIPAUPROTORECVEVENT@@@Z @58 NONAME
-?RecvFile@PROTO_INTERFACE@@UAEIIPAUPROTORECVFILE@@@Z @59 NONAME
+?RecvFile@PROTO_INTERFACE@@UAEIIAAVFILE_BLOB@DB@@AAVEventInfo@3@@Z @59 NONAME
?RecvMsg@PROTO_INTERFACE@@UAEIIPAUPROTORECVEVENT@@@Z @60 NONAME
?SearchAdvanced@PROTO_INTERFACE@@UAEPAXPAUHWND__@@@Z @62 NONAME
?SearchBasic@PROTO_INTERFACE@@UAEPAXPB_W@Z @63 NONAME
@@ -960,3 +960,6 @@ Netlib_HttpResult @1096
?SetData@MHttpRequest@@QAEXPBXI@Z @1097 NONAME
?DeleteHeader@MHttpHeaders@@QAEXPBD@Z @1098 NONAME
_Netlib_DownloadFile@20 @1099 NONAME
+??0FILE_BLOB@DB@@QAE@PAXPBD1_N@Z @1100 NONAME
+?getUserInfo@FILE_BLOB@DB@@QBEPAXXZ @1101 NONAME
+?setUserInfo@FILE_BLOB@DB@@QAEXPAX@Z @1102 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def
index 5761132572..6b2391f2cb 100644
--- a/src/mir_app/src/mir_app64.def
+++ b/src/mir_app/src/mir_app64.def
@@ -54,7 +54,7 @@ Button_SetSkin_IcoLib @24
?OnProtoRefresh@CProtoIntDlgBase@@MEAAX_K_J@Z @55 NONAME
?ProtoBroadcastAck@PROTO_INTERFACE@@QEAA_JIHHPEAX_J@Z @56 NONAME
?RecvContacts@PROTO_INTERFACE@@UEAAHIPEAUPROTORECVEVENT@@@Z @58 NONAME
-?RecvFile@PROTO_INTERFACE@@UEAAIIPEAUPROTORECVFILE@@@Z @59 NONAME
+?RecvFile@PROTO_INTERFACE@@UEAAIIAEAVFILE_BLOB@DB@@AEAVEventInfo@3@@Z @59 NONAME
?RecvMsg@PROTO_INTERFACE@@UEAAIIPEAUPROTORECVEVENT@@@Z @60 NONAME
?SearchAdvanced@PROTO_INTERFACE@@UEAAPEAXPEAUHWND__@@@Z @62 NONAME
?SearchBasic@PROTO_INTERFACE@@UEAAPEAXPEB_W@Z @63 NONAME
@@ -960,3 +960,6 @@ Netlib_HttpResult @1090
?SetData@MHttpRequest@@QEAAXPEBX_K@Z @1091 NONAME
?DeleteHeader@MHttpHeaders@@QEAAXPEBD@Z @1092 NONAME
Netlib_DownloadFile @1093 NONAME
+??0FILE_BLOB@DB@@QEAA@PEAXPEBD1_N@Z @1094 NONAME
+?getUserInfo@FILE_BLOB@DB@@QEBAPEAXXZ @1095 NONAME
+?setUserInfo@FILE_BLOB@DB@@QEAAXPEAX@Z @1096 NONAME
diff --git a/src/mir_app/src/netlib_http.cpp b/src/mir_app/src/netlib_http.cpp
index de0a5255cd..cfe28998f1 100644
--- a/src/mir_app/src/netlib_http.cpp
+++ b/src/mir_app/src/netlib_http.cpp
@@ -1150,7 +1150,7 @@ void MFileChunkStorage::apply(MHttpResponse *nlhr)
bool MFileChunkStorage::updateChunk(const void *pData, size_t cbLen)
{
- if (cbLen != _write(fileId, pData, unsigned(cbLen))) {
+ if (cbLen != (unsigned)_write(fileId, pData, unsigned(cbLen))) {
_close(fileId);
fileId = -1;
return false;
diff --git a/src/mir_app/src/proto_chains.cpp b/src/mir_app/src/proto_chains.cpp
index 707e8996f9..315ad6ff2b 100644
--- a/src/mir_app/src/proto_chains.cpp
+++ b/src/mir_app/src/proto_chains.cpp
@@ -105,10 +105,10 @@ MIR_APP_DLL(INT_PTR) Proto_ChainRecv(int iOrder, CCSDATA *ccs)
for (int i = iOrder - 1; i >= 0; i--)
if ((ret = CallProtoService(g_arFilters[i]->szName, ccs->szProtoService, i + 1, (LPARAM)ccs)) != CALLSERVICE_NOTFOUND)
- //chain was started, exit
+ // chain was started, exit
return ret;
- //end of chain, call network protocol again
+ // end of chain, call network protocol again
char szProto[40];
if (GetProtocolP(ccs->hContact, szProto, sizeof(szProto)))
return 1;
diff --git a/src/mir_app/src/proto_interface.cpp b/src/mir_app/src/proto_interface.cpp
index 42584b0f86..31f04aaf0d 100644
--- a/src/mir_app/src/proto_interface.cpp
+++ b/src/mir_app/src/proto_interface.cpp
@@ -204,9 +204,9 @@ int PROTO_INTERFACE::RecvContacts(MCONTACT, PROTORECVEVENT*)
return 1; // error
}
-MEVENT PROTO_INTERFACE::RecvFile(MCONTACT hContact, PROTORECVFILE *pre)
+MEVENT PROTO_INTERFACE::RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei)
{
- return Proto_RecvFile(hContact, pre);
+ return Proto_RecvFile(hContact, blob, dbei);
}
MEVENT PROTO_INTERFACE::RecvMsg(MCONTACT hContact, PROTORECVEVENT *pre)
diff --git a/src/mir_app/src/proto_internal.cpp b/src/mir_app/src/proto_internal.cpp
index 6a17124f8e..d70491b902 100644
--- a/src/mir_app/src/proto_internal.cpp
+++ b/src/mir_app/src/proto_internal.cpp
@@ -175,9 +175,9 @@ struct DEFAULT_PROTO_INTERFACE : public PROTO_INTERFACE
return (int)ProtoCallService(m_szModuleName, PSR_CONTACTS, 0, (LPARAM)&ccs);
}
- MEVENT RecvFile(MCONTACT hContact, PROTORECVFILE* evt) override
+ MEVENT RecvFile(MCONTACT hContact, DB::FILE_BLOB &blob, DB::EventInfo &dbei) override
{
- CCSDATA ccs = { hContact, PSR_FILE, 0, (LPARAM)evt };
+ CCSDATA ccs = { hContact, PSR_FILE, (WPARAM)&blob, (LPARAM)&dbei };
return ProtoCallService(m_szModuleName, PSR_FILE, 0, (LPARAM)&ccs);
}
diff --git a/src/mir_app/src/protocols.cpp b/src/mir_app/src/protocols.cpp
index 4b14130520..509f1bbedb 100644
--- a/src/mir_app/src/protocols.cpp
+++ b/src/mir_app/src/protocols.cpp
@@ -418,7 +418,7 @@ INT_PTR CallContactServiceInt(MCONTACT hContact, const char *szModule, const cha
case 18: return (INT_PTR)ppi->SearchAdvanced((HWND)lParam);
case 19: return (INT_PTR)ppi->CreateExtendedSearchUI((HWND)lParam);
case 20: return (INT_PTR)ppi->RecvContacts(hContact, (PROTORECVEVENT *)lParam);
- case 21: return (INT_PTR)ppi->RecvFile(hContact, (PROTORECVFILE *)lParam);
+ case 21: return (INT_PTR)ppi->RecvFile(hContact, *(DB::FILE_BLOB*)wParam, *(DB::EventInfo*)lParam);
case 22: return (INT_PTR)ppi->RecvMsg(hContact, (PROTORECVEVENT *)lParam);
case 23: return (INT_PTR)ppi->SendContacts(hContact, LOWORD(wParam), HIWORD(wParam), (MCONTACT *)lParam);
case 24: return (INT_PTR)ppi->SendFile(hContact, (wchar_t *)wParam, (wchar_t **)lParam);