From 3f45ae2cea6bc24aa4f0c94a3c7c4009c64faa56 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 17 Jun 2024 14:48:39 +0300 Subject: fixes #4458 (IEView: Template Does not apply to Groupchats) --- plugins/IEView/src/TemplateHTMLBuilder.cpp | 30 +++++++++++++++++------------- plugins/IEView/src/TemplateHTMLBuilder.h | 6 +++--- 2 files changed, 20 insertions(+), 16 deletions(-) (limited to 'plugins/IEView/src') diff --git a/plugins/IEView/src/TemplateHTMLBuilder.cpp b/plugins/IEView/src/TemplateHTMLBuilder.cpp index 0c83b98d07..ac7b1e90ea 100644 --- a/plugins/IEView/src/TemplateHTMLBuilder.cpp +++ b/plugins/IEView/src/TemplateHTMLBuilder.cpp @@ -61,22 +61,26 @@ char* TemplateHTMLBuilder::getAvatar(MCONTACT hContact, const char *szProto) } db_free(&dbv); } - char* res = mir_utf8encodeW(result); + char *res = mir_utf8encodeW(result); Utils::convertPath(res); return res; } -TemplateMap *TemplateHTMLBuilder::getTemplateMap(ProtocolSettings * protoSettings) +TemplateMap* TemplateHTMLBuilder::getTemplateMap(MCONTACT hContact, ProtocolSettings *protoSettings) { + if (Contact::IsGroupChat(hContact)) + if (auto *result = TemplateMap::getTemplateMap(_T2A(protoSettings->getChatTemplateFilename()))) + return result; + return TemplateMap::getTemplateMap(_T2A(protoSettings->getSRMMTemplateFilename())); } -int TemplateHTMLBuilder::getFlags(ProtocolSettings * protoSettings) +int TemplateHTMLBuilder::getFlags(ProtocolSettings *protoSettings) { return protoSettings->getSRMMFlags(); } -char *TemplateHTMLBuilder::timestampToString(uint32_t dwFlags, time_t check, int mode) +char* TemplateHTMLBuilder::timestampToString(uint32_t dwFlags, time_t check, int mode) { static char szResult[512]; szResult[0] = '\0'; wchar_t str[300]; @@ -109,7 +113,7 @@ void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, Pr return; DBVARIANT dbv; - + char tempStr[1024]; char *szNameIn = nullptr; char *szNameOut = nullptr; @@ -122,7 +126,7 @@ void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, Pr MCONTACT hRealContact = getRealContact(event->hContact); const char *szRealProto = Proto_GetBaseAccountName(hRealContact); - TemplateMap *tmpm = getTemplateMap(protoSettings); + TemplateMap *tmpm = getTemplateMap(hRealContact, protoSettings); if (tmpm == nullptr) return; @@ -147,13 +151,13 @@ void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, Pr szNameIn = mir_strdup(" "); } mir_snprintf(tempStr, "%snoavatar.png", tempBase); - + CMStringW szNoAvatarPath(protoSettings->getSRMMTemplateFilename()); int idx = szNoAvatarPath.Find('\\'); if (idx != -1) szNoAvatarPath.Delete(0, idx); szNoAvatarPath.Append(L"\\noavatar.png"); - + if (_waccess(szNoAvatarPath, 0) == -1) mir_snprintf(tempStr, "%snoavatar.jpg", tempBase); else @@ -263,7 +267,7 @@ void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, Pr iLastEventType = -1; } -void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings* protoSettings) +void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings *protoSettings) { if (protoSettings == nullptr) return; @@ -290,12 +294,12 @@ void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, const char *szProto = Proto_GetBaseAccountName(event->hContact); tempBase[0] = '\0'; - TemplateMap *tmpm = getTemplateMap(protoSettings); + TemplateMap *tmpm = getTemplateMap(hRealContact, protoSettings); if (tmpm != nullptr) { strncpy_s(tempBase, "file://", _TRUNCATE); mir_strcat(tempBase, _T2A(tmpm->getFilename())); - char* pathrun = nullptr; + char *pathrun = nullptr; if (pathrun = strrchr(tempBase, '\\')) *(++pathrun) = '\0'; else if (pathrun = strrchr(tempBase, '/')) @@ -322,7 +326,7 @@ void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, if (idx != -1) szNoAvatarPath.Delete(0, idx); szNoAvatarPath.Append(L"\\noavatar.png"); - + if (_waccess(szNoAvatarPath, 0) == -1) mir_snprintf(tempStr, "%snoavatar.jpg", tempBase); else @@ -364,7 +368,7 @@ void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, CMStringA str; bool isSent = (eventData->dwFlags & IEEDF_SENT) != 0; bool isRTL = (eventData->dwFlags & IEEDF_RTL) && tmpm->isRTL(); - bool isHistory = (eventData->time < (uint32_t)getStartedTime() && (eventData->dwFlags &IEEDF_READ || eventData->dwFlags & IEEDF_SENT)); + bool isHistory = (eventData->time < (uint32_t)getStartedTime() && (eventData->dwFlags & IEEDF_READ || eventData->dwFlags & IEEDF_SENT)); bool isGroupBreak = true; if ((getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES) && eventData->dwFlags == LOWORD(getLastEventType()) && eventData->iType == IEED_EVENT_MESSAGE && HIWORD(getLastEventType()) == IEED_EVENT_MESSAGE diff --git a/plugins/IEView/src/TemplateHTMLBuilder.h b/plugins/IEView/src/TemplateHTMLBuilder.h index 96b850ef68..2d373116a4 100644 --- a/plugins/IEView/src/TemplateHTMLBuilder.h +++ b/plugins/IEView/src/TemplateHTMLBuilder.h @@ -33,11 +33,11 @@ protected: time_t startedTime; time_t getStartedTime(); const char *groupTemplate; - char *getAvatar(MCONTACT hContact, const char *szProto); + char* getAvatar(MCONTACT hContact, const char *szProto); void buildHeadTemplate(IEView *, IEVIEWEVENT *event, ProtocolSettings* protoSettings); void appendEventTemplate(IEView *, IEVIEWEVENT *event, ProtocolSettings* protoSettings); - virtual TemplateMap *getTemplateMap(ProtocolSettings *); - virtual int getFlags(ProtocolSettings *); + virtual TemplateMap *getTemplateMap(MCONTACT hContact, ProtocolSettings *protoSettings); + virtual int getFlags(ProtocolSettings *protoSettings); public: TemplateHTMLBuilder(); virtual ~TemplateHTMLBuilder(); -- cgit v1.2.3