diff options
author | George Hazan <ghazan@miranda.im> | 2023-04-11 17:07:04 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2023-04-11 17:07:04 +0300 |
commit | 8f9292d483fcf3a10d9284512359c4562f5311eb (patch) | |
tree | 3593ca1eb6a5a4c3b2ef454fa6b4944d4b8da8c4 /src/mir_app | |
parent | 5f4f070347d20fc85b588138217aa744141e8053 (diff) |
DB::FILE_BLOB - file events' access unification
Diffstat (limited to 'src/mir_app')
-rw-r--r-- | src/mir_app/src/MDatabaseReadonly.cpp | 2 | ||||
-rw-r--r-- | src/mir_app/src/db_events.cpp | 49 | ||||
-rw-r--r-- | src/mir_app/src/mir_app.def | 8 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 8 | ||||
-rw-r--r-- | src/mir_app/src/proto_interface.cpp | 2 |
5 files changed, 56 insertions, 13 deletions
diff --git a/src/mir_app/src/MDatabaseReadonly.cpp b/src/mir_app/src/MDatabaseReadonly.cpp index c386c4d6f4..9a0194373a 100644 --- a/src/mir_app/src/MDatabaseReadonly.cpp +++ b/src/mir_app/src/MDatabaseReadonly.cpp @@ -108,7 +108,7 @@ BOOL MDatabaseReadonly::DeleteEvent(MEVENT) return 1;
}
-BOOL MDatabaseReadonly::EditEvent(MCONTACT, MEVENT, const DBEVENTINFO*)
+BOOL MDatabaseReadonly::EditEvent(MEVENT, const DBEVENTINFO*)
{
return 1;
}
diff --git a/src/mir_app/src/db_events.cpp b/src/mir_app/src/db_events.cpp index f4153d6850..9e413aac76 100644 --- a/src/mir_app/src/db_events.cpp +++ b/src/mir_app/src/db_events.cpp @@ -98,7 +98,7 @@ static wchar_t* getEventString(DBEVENTINFO *dbei, LPSTR &buf) return (dbei->flags & DBEF_UTF) ? mir_utf8decodeW(in) : mir_a2u(in);
}
-static INT_PTR DbEventGetTextWorker(DBEVENTINFO *dbei, int codepage, int datatype)
+static INT_PTR DbEventGetTextWorker(DB::EventInfo *dbei, int codepage, int datatype)
{
if (dbei == nullptr || dbei->szModule == nullptr)
return 0;
@@ -162,13 +162,12 @@ static INT_PTR DbEventGetTextWorker(DBEVENTINFO *dbei, int codepage, int datatyp }
if (dbei->eventType == EVENTTYPE_FILE) {
- char *buf = LPSTR(dbei->pBlob) + sizeof(uint32_t);
- ptrW tszFileName(getEventString(dbei, buf));
- ptrW tszDescription(getEventString(dbei, buf));
- CMStringW wszText(tszFileName.get());
- if (mir_wstrlen(tszDescription) > 0) {
+ DB::FILE_BLOB blob(*dbei);
+
+ CMStringW wszText(blob.getName());
+ if (mir_wstrlen(blob.getDescr()) > 0) {
wszText.Append(L": ");
- wszText.Append(tszDescription);
+ wszText.Append(blob.getDescr());
}
switch (datatype) {
@@ -208,12 +207,12 @@ static INT_PTR DbEventGetTextWorker(DBEVENTINFO *dbei, int codepage, int datatyp MIR_APP_DLL(char*) DbEvent_GetTextA(DBEVENTINFO *dbei, int codepage)
{
- return (char*)DbEventGetTextWorker(dbei, codepage, DBVT_ASCIIZ);
+ return (char*)DbEventGetTextWorker((DB::EventInfo *)dbei, codepage, DBVT_ASCIIZ);
}
MIR_APP_DLL(wchar_t*) DbEvent_GetTextW(DBEVENTINFO *dbei, int codepage)
{
- return (wchar_t*)DbEventGetTextWorker(dbei, codepage, DBVT_WCHAR);
+ return (wchar_t*)DbEventGetTextWorker((DB::EventInfo *)dbei, codepage, DBVT_WCHAR);
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -285,6 +284,38 @@ DB::EventInfo::~EventInfo() }
/////////////////////////////////////////////////////////////////////////////////////////
+// File blob helper
+
+DB::FILE_BLOB::FILE_BLOB(const wchar_t *pwszName, const wchar_t *pwszDescr) :
+ m_wszFileName(mir_wstrdup(pwszName)),
+ m_wszDescription(mir_wstrdup(pwszDescr))
+{}
+
+DB::FILE_BLOB::FILE_BLOB(const DB::EventInfo &dbei)
+{
+ JSONNode root = JSONNode::parse((const char *)dbei.pBlob);
+ if (root) {
+ m_wszFileName = root["f"].as_mstring().Detach();
+ m_wszDescription = root["d"].as_mstring().Detach();
+ }
+}
+
+DB::FILE_BLOB::~FILE_BLOB()
+{}
+
+void DB::FILE_BLOB::write(DB::EventInfo &dbei)
+{
+ JSONNode root;
+ root << WCHAR_PARAM("f", m_wszFileName) << WCHAR_PARAM("d", m_wszDescription ? m_wszDescription : L"");
+
+ std::string text = root.write();
+ dbei.cbBlob = (int)text.size() + 1;
+ dbei.pBlob = (uint8_t*)mir_realloc(dbei.pBlob, dbei.cbBlob);
+ memcpy(dbei.pBlob, text.c_str(), dbei.cbBlob);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Auth blob helper
DB::AUTH_BLOB::AUTH_BLOB(MCONTACT hContact, LPCSTR nick, LPCSTR fname, LPCSTR lname, LPCSTR email, LPCSTR reason) :
m_dwUin(0),
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 68c051c394..92990599e4 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -572,7 +572,7 @@ Menu_SetVisible @662 ??0MDatabaseReadonly@@QAE@XZ @684 NONAME
??_7MDatabaseReadonly@@6B@ @685 NONAME
?GetEventById@MDatabaseReadonly@@UAGIPBD0@Z @686 NONAME
-?EditEvent@MDatabaseReadonly@@UAGHIIPBUDBEVENTINFO@@@Z @688 NONAME
+?EditEvent@MDatabaseReadonly@@UAGHIPBUDBEVENTINFO@@@Z @688 NONAME
g_hevContactAdded @689 NONAME
g_hevContactDeleted @690 NONAME
g_hevEventAdded @691 NONAME
@@ -837,3 +837,9 @@ Chat_IsMuted @941 NONAME ??0EventInfo@DB@@QAE@XZ @952 NONAME
??1EventInfo@DB@@QAE@XZ @953 NONAME
??BEventInfo@DB@@QBE_NXZ @954 NONAME
+??0FILE_BLOB@DB@@QAE@ABVEventInfo@1@@Z @955 NONAME
+??0FILE_BLOB@DB@@QAE@PB_W0@Z @956 NONAME
+??1FILE_BLOB@DB@@QAE@XZ @957 NONAME
+?getDescr@FILE_BLOB@DB@@QBEPB_WXZ @958 NONAME
+?getName@FILE_BLOB@DB@@QBEPB_WXZ @959 NONAME
+?write@FILE_BLOB@DB@@QAEXAAVEventInfo@2@@Z @960 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 6f977c0379..41bbf55dc6 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -572,7 +572,7 @@ Menu_SetVisible @662 ??0MDatabaseReadonly@@QEAA@XZ @684 NONAME
??_7MDatabaseReadonly@@6B@ @685 NONAME
?GetEventById@MDatabaseReadonly@@UEAAIPEBD0@Z @686 NONAME
-?EditEvent@MDatabaseReadonly@@UEAAHIIPEBUDBEVENTINFO@@@Z @688 NONAME
+?EditEvent@MDatabaseReadonly@@UEAAHIPEBUDBEVENTINFO@@@Z @688 NONAME
g_hevContactAdded @689 NONAME
g_hevContactDeleted @690 NONAME
g_hevEventAdded @691 NONAME
@@ -837,3 +837,9 @@ Chat_IsMuted @941 NONAME ??0EventInfo@DB@@QEAA@XZ @952 NONAME
??1EventInfo@DB@@QEAA@XZ @953 NONAME
??BEventInfo@DB@@QEBA_NXZ @954 NONAME
+??0FILE_BLOB@DB@@QEAA@AEBVEventInfo@1@@Z @955 NONAME
+??0FILE_BLOB@DB@@QEAA@PEB_W0@Z @956 NONAME
+??1FILE_BLOB@DB@@QEAA@XZ @957 NONAME
+?getDescr@FILE_BLOB@DB@@QEBAPEB_WXZ @958 NONAME
+?getName@FILE_BLOB@DB@@QEBAPEB_WXZ @959 NONAME
+?write@FILE_BLOB@DB@@QEAAXAEAVEventInfo@2@@Z @960 NONAME
diff --git a/src/mir_app/src/proto_interface.cpp b/src/mir_app/src/proto_interface.cpp index a1b005d16b..07a276d20a 100644 --- a/src/mir_app/src/proto_interface.cpp +++ b/src/mir_app/src/proto_interface.cpp @@ -223,7 +223,7 @@ MEVENT PROTO_INTERFACE::RecvMsg(MCONTACT hContact, PROTORECVEVENT *pre) // if it's possible to find an existing event by its id, do that
if ((GetCaps(PFLAGNUM_4) & PF4_SERVERMSGID) && pre->szMsgId != nullptr) {
MEVENT hDbEvent = db_event_getById(m_szModuleName, pre->szMsgId);
- if (hDbEvent == 0 || db_event_edit(hContact, hDbEvent, &dbei)) {
+ if (hDbEvent == 0 || db_event_edit(hDbEvent, &dbei)) {
dbei.szId = pre->szMsgId;
hDbEvent = db_event_add(hContact, &dbei);
}
|