From 8f9292d483fcf3a10d9284512359c4562f5311eb Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 11 Apr 2023 17:07:04 +0300 Subject: DB::FILE_BLOB - file events' access unification --- src/mir_app/src/MDatabaseReadonly.cpp | 2 +- src/mir_app/src/db_events.cpp | 49 ++++++++++++++++++++++++++++------- src/mir_app/src/mir_app.def | 8 +++++- src/mir_app/src/mir_app64.def | 8 +++++- src/mir_app/src/proto_interface.cpp | 2 +- 5 files changed, 56 insertions(+), 13 deletions(-) (limited to 'src/mir_app') 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); } -- cgit v1.2.3