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 --- plugins/TabSRMM/src/msgdialog.cpp | 39 +++------------------------------------ plugins/TabSRMM/src/msglog.cpp | 31 ++++++++----------------------- 2 files changed, 11 insertions(+), 59 deletions(-) (limited to 'plugins/TabSRMM/src') diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index 5451beac4d..11065a5733 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -935,46 +935,13 @@ void CMsgDialog::onClick_Quote(CCtrlButton*) } if (!bUseSelection) { - DBEVENTINFO dbei = {}; - dbei.cbBlob = db_event_getBlobSize(hDBEvent); - wchar_t *szText = (wchar_t*)mir_alloc((dbei.cbBlob + 1) * sizeof(wchar_t)); // URLs are made one char bigger for crlf - dbei.pBlob = (uint8_t*)szText; - db_event_get(hDBEvent, &dbei); - int iSize = int(mir_strlen((char*)dbei.pBlob)) + 1; - - bool bNeedsFree = false; - wchar_t *szConverted; - if (dbei.flags & DBEF_UTF) { - szConverted = mir_utf8decodeW((char*)szText); - bNeedsFree = true; - } - else { - if (iSize != (int)dbei.cbBlob) - szConverted = (wchar_t*)&dbei.pBlob[iSize]; - else { - szConverted = (wchar_t*)mir_alloc(sizeof(wchar_t) * iSize); - bNeedsFree = true; - MultiByteToWideChar(CP_ACP, 0, (char*)dbei.pBlob, -1, szConverted, iSize); - } - } - - if (dbei.eventType == EVENTTYPE_FILE) { - size_t iDescr = mir_strlen((char *)(szText + sizeof(uint32_t))); - memmove(szText, szText + sizeof(uint32_t), iDescr); - memmove(szText + iDescr + 2, szText + sizeof(uint32_t) + iDescr, dbei.cbBlob - iDescr - sizeof(uint32_t) - 1); - szText[iDescr] = '\r'; - szText[iDescr + 1] = '\n'; - szConverted = (wchar_t*)mir_alloc(sizeof(wchar_t)* (1 + mir_strlen((char *)szText))); - MultiByteToWideChar(CP_ACP, 0, (char *)szText, -1, szConverted, 1 + (int)mir_strlen((char *)szText)); - bNeedsFree = true; - } + DB::EventInfo dbei(hDBEvent); + ptrW szConverted(DbEvent_GetTextW(&dbei, CP_ACP)); if (szConverted != nullptr) m_message.SendMsg(EM_SETTEXTEX, (WPARAM)&stx, ptrW(QuoteText(szConverted))); - mir_free(szText); - if (bNeedsFree) - mir_free(szConverted); + mir_free(szConverted); } SetFocus(m_message.GetHwnd()); diff --git a/plugins/TabSRMM/src/msglog.cpp b/plugins/TabSRMM/src/msglog.cpp index 86b0caf93a..3499e97cc3 100644 --- a/plugins/TabSRMM/src/msglog.cpp +++ b/plugins/TabSRMM/src/msglog.cpp @@ -432,16 +432,14 @@ static char* Template_CreateRTFFromDbEvent(CMsgDialog *dat, MCONTACT hContact, M bool skipToNext = false, skipFont = false; bool isBold = false, isItalic = false, isUnderline = false; - DBEVENTINFO dbei = {}; + DB::EventInfo dbei; if (streamData->dbei != nullptr) - dbei = *(streamData->dbei); + memcpy(&dbei, streamData->dbei, sizeof(DBEVENTINFO)); else { dbei.cbBlob = -1; db_event_get(hDbEvent, &dbei); - if (!DbEventIsShown(&dbei)) { - mir_free(dbei.pBlob); + if (!DbEventIsShown(&dbei)) return nullptr; - } } if (dbei.eventType == EVENTTYPE_MESSAGE && !dbei.markedRead()) @@ -455,10 +453,9 @@ static char* Template_CreateRTFFromDbEvent(CMsgDialog *dat, MCONTACT hContact, M } CMStringW msg(ptrW(DbEvent_GetTextW(&dbei, CP_UTF8))); - if (msg.IsEmpty()) { - mir_free(dbei.pBlob); + if (msg.IsEmpty()) return nullptr; - } + msg.TrimRight(); dat->FormatRaw(msg, 1, FALSE); @@ -854,20 +851,8 @@ static char* Template_CreateRTFFromDbEvent(CMsgDialog *dat, MCONTACT hContact, M str.Append(GetRTFFont(iFontIDOffset + (isSent ? MSGFONTID_MYMISC : MSGFONTID_YOURMISC))); str.AppendChar(' '); } - { - char *szFileName = (char *)dbei.pBlob + sizeof(uint32_t); - ptrW tszFileName(DbEvent_GetString(&dbei, szFileName)); - - char *szDescr = szFileName + mir_strlen(szFileName) + 1; - if (*szDescr != 0) { - ptrW tszDescr(DbEvent_GetString(&dbei, szDescr)); - wchar_t buf[1000]; - mir_snwprintf(buf, L"%s (%s)", tszFileName.get(), tszDescr.get()); - AppendUnicodeToBuffer(str, buf, 0); - } - else AppendUnicodeToBuffer(str, tszFileName, 0); - } + AppendUnicodeToBuffer(str, ptrW(DbEvent_GetTextW(&dbei, CP_ACP)), 0); break; default: @@ -1000,8 +985,8 @@ skip: str.Append("\\par"); - if (streamData->dbei == nullptr) - mir_free(dbei.pBlob); + if (streamData->dbei != nullptr) + dbei.pBlob = 0; dat->m_iLastEventType = MAKELONG((dbei.flags & (DBEF_SENT | DBEF_READ | DBEF_RTL)), dbei.eventType); dat->m_lastEventTime = dbei.timestamp; -- cgit v1.2.3