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 /plugins/TabSRMM | |
parent | 5f4f070347d20fc85b588138217aa744141e8053 (diff) |
DB::FILE_BLOB - file events' access unification
Diffstat (limited to 'plugins/TabSRMM')
-rw-r--r-- | plugins/TabSRMM/src/msgdialog.cpp | 39 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msglog.cpp | 31 |
2 files changed, 11 insertions, 59 deletions
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;
|