From c42f503c8e3c1e6e4a7689b3b3cff17d2722c9ac Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 13 May 2025 11:36:44 +0300 Subject: fixes #5021 (Allow a different log viewer for group chats than for 1on1 chats) --- include/m_chat_int.h | 3 +- src/mir_app/res/resource.rc | 9 +++--- src/mir_app/src/chat.h | 2 ++ src/mir_app/src/chat_svc.cpp | 1 - src/mir_app/src/mir_app.def | 1 - src/mir_app/src/mir_app64.def | 1 - src/mir_app/src/resource.h | 7 +++-- src/mir_app/src/srmm_log.cpp | 66 ++++++++++++++++++++++++------------------- src/mir_app/src/srmm_main.cpp | 1 + 9 files changed, 50 insertions(+), 41 deletions(-) diff --git a/include/m_chat_int.h b/include/m_chat_int.h index 431ffd2a34..1cd4797197 100644 --- a/include/m_chat_int.h +++ b/include/m_chat_int.h @@ -398,8 +398,7 @@ namespace Chat bDoubleClick4Privat, bLogIndentEnabled, bLogLimitNames, - bStripFormat, - bEnableCustomLogs; + bStripFormat; extern MIR_APP_EXPORT CMOption iPopupFlags, diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index fd51407196..0933ec329e 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -683,10 +683,11 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - LTEXT "Choose needed logger from listed below:",IDC_STATIC,2,3,299,8 - LISTBOX IDC_LIST,0,16,305,189,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - CONTROL "Enable custom loggers in group chats",IDC_ENABLE_CUSTOM, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,210,297,12 + GROUPBOX "Choose a log viewer",IDC_STATIC,7,5,292,76 + LTEXT "For the private chats",IDC_STATIC,20,18,272,8 + LTEXT "For the group chats",IDC_STATIC,20,48,272,8 + COMBOBOX IDC_LOGGER,20,29,222,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_LOGGER_GC,20,60,222,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END IDD_OPT_LANGUAGES DIALOGEX 0, 0, 301, 191 diff --git a/src/mir_app/src/chat.h b/src/mir_app/src/chat.h index 41a4f67cac..270a57ce32 100644 --- a/src/mir_app/src/chat.h +++ b/src/mir_app/src/chat.h @@ -153,6 +153,8 @@ CMStringW Chat_GetFolderName(SESSION_INFO *si = nullptr); void Chat_Serialize(SESSION_INFO *si); bool Chat_Unserialize(SESSION_INFO *si); +void CheckLogOptions(void); + EXTERN_C MIR_APP_DLL(HANDLE) Srmm_AddButton(const BBButton *bbdi, HPLUGIN _hLang); #pragma comment(lib,"comctl32.lib") diff --git a/src/mir_app/src/chat_svc.cpp b/src/mir_app/src/chat_svc.cpp index cbefe28564..4276d8c5f1 100644 --- a/src/mir_app/src/chat_svc.cpp +++ b/src/mir_app/src/chat_svc.cpp @@ -32,7 +32,6 @@ CMOption Chat::bUseGroup(CHAT_MODULE, "UseGroup", true); CMOption Chat::bDoubleClick4Privat(CHAT_MODULE, "DoubleClick4Privat", false); CMOption Chat::bShowContactStatus(CHAT_MODULE, "ShowContactStatus", true); CMOption Chat::bContactStatusFirst(CHAT_MODULE, "ContactStatusFirst", false); -CMOption Chat::bEnableCustomLogs(SRMM_MODULE, "EnableCustomLogs", false); CMOption Chat::bFlashWindow(CHAT_MODULE, "FlashWindow", false); CMOption Chat::bFlashWindowHighlight(CHAT_MODULE, "FlashWindowHighlight", false); diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index f5b4697d98..0041a0dba8 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -885,7 +885,6 @@ Clist_GroupSaveExpanded @1003 NONAME ??0MAsyncObject@@QAE@XZ @1016 NONAME ??1MAsyncObject@@UAE@XZ @1017 NONAME ??_7MAsyncObject@@6B@ @1018 NONAME -?bEnableCustomLogs@Chat@@3V?$CMOption@_N@@A @1019 NONAME ?Srmm_IsCustomLogUsed@@YG_N_N@Z @1020 NONAME ?IconFlashTime@Clist@@3V?$CMOption@I@@A @1021 NONAME ?Srmm_Quote@@YG?AV?$CMStringT@_WV?$ChTraitsCRT@_W@@@@PB_WH@Z @1022 NONAME diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index bb13b5bd53..5390e1d7fc 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -885,7 +885,6 @@ Clist_GroupSaveExpanded @1003 NONAME ??0MAsyncObject@@QEAA@XZ @1016 NONAME ??1MAsyncObject@@UEAA@XZ @1017 NONAME ??_7MAsyncObject@@6B@ @1018 NONAME -?bEnableCustomLogs@Chat@@3V?$CMOption@_N@@A @1019 NONAME ?Srmm_IsCustomLogUsed@@YA_N_N@Z @1020 NONAME ?IconFlashTime@Clist@@3V?$CMOption@I@@A @1021 NONAME ?Srmm_Quote@@YA?AV?$CMStringT@_WV?$ChTraitsCRT@_W@@@@PEB_WH@Z @1022 NONAME diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index 6151d191c1..65b746277a 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -585,7 +585,6 @@ #define IDC_RADIO1 1740 #define IDC_RADIO2 1741 #define IDC_ADDCHECK 1742 -#define IDC_ENABLE_CUSTOM 1743 #define IDC_GETMOREPLUGINS 1744 #define IDC_DISABLEMENUICONS 1745 #define IDC_SM_ENABLED 1746 @@ -604,6 +603,8 @@ #define IDC_OFFLINE_AUTOSIZE_SPIN 1758 #define IDC_OFFLINE_DELETE 1759 #define IDC_SHOWPASSWORD 1760 +#define IDC_LOGGER 1761 +#define IDC_LOGGER_GC 1762 #define IDC_EFFECT_COLOUR_TEXT1 1853 #define IDC_EFFECT_COLOUR_SPIN1 1854 #define IDC_EXTRAORDER 1889 @@ -696,9 +697,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 340 +#define _APS_NEXT_RESOURCE_VALUE 341 #define _APS_NEXT_COMMAND_VALUE 40018 -#define _APS_NEXT_CONTROL_VALUE 1761 +#define _APS_NEXT_CONTROL_VALUE 1762 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/src/mir_app/src/srmm_log.cpp b/src/mir_app/src/srmm_log.cpp index 793fa2bcea..00e2982282 100644 --- a/src/mir_app/src/srmm_log.cpp +++ b/src/mir_app/src/srmm_log.cpp @@ -30,19 +30,24 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static OBJLIST g_arLogClasses(1, PtrKeySortT); static CMOption g_logger(SRMM_MODULE, "Logger", "built-in"); +static CMOption g_loggerGC(SRMM_MODULE, "LoggerGC", "built-in"); + +void CheckLogOptions() +{ + if (db_get_b(0, SRMM_MODULE, "EnableCustomLogs")) { + g_loggerGC = (char*)g_logger; + db_unset(0, SRMM_MODULE, "EnableCustomLogs"); + } +} ///////////////////////////////////////////////////////////////////////////////////////// static bool sttEnableCustomLogs(CMsgDialog *pDlg) { // always enable custom log viewers for private chats - if (!pDlg || !pDlg->isChat()) + if (!pDlg) return true; - // if custom log viewers are disable, use build-in one - if (!Chat::bEnableCustomLogs) - return false; - // check if custom viewers are forbidden for this particular account auto *szProto = Proto_GetBaseAccountName(pDlg->m_hContact); if (szProto) { @@ -69,9 +74,9 @@ MIR_APP_DLL(SrmmLogWindowClass *) Srmm_GetWindowClass(CMsgDialog *pDlg) if (sttEnableCustomLogs(pDlg)) { CMStringA szViewerName; if (pDlg != nullptr) - szViewerName = db_get_sm(pDlg->m_hContact, SRMSGMOD, "Logger"); + szViewerName = db_get_sm(pDlg->m_hContact, SRMSGMOD, pDlg->isChat() ? "LoggerGC" : "Logger"); if (szViewerName.IsEmpty()) - szViewerName = g_logger; + szViewerName = pDlg->isChat() ? g_loggerGC : g_logger; for (auto &it : g_arLogClasses) if (szViewerName == it->szShortName) @@ -87,8 +92,8 @@ MIR_APP_DLL(SrmmLogWindowClass *) Srmm_GetWindowClass(CMsgDialog *pDlg) MIR_APP_DLL(bool) Srmm_IsCustomLogUsed(bool forGroupChats) { - if (forGroupChats && !Chat::bEnableCustomLogs) - return false; + if (forGroupChats) + return mir_strcmp(g_loggerGC, "built-in") != 0; return mir_strcmp(g_logger, "built-in") != 0; } @@ -113,42 +118,46 @@ static class CSrmmLogOptionsDlg *pDialog = nullptr; class CSrmmLogOptionsDlg : public CDlgBase { - CCtrlListBox m_list; - CCtrlCheck chkCustomLogs; + CCtrlCombo cmbLogger, cmbLoggerGC; + + void PopulateCombo(const char *pszClass, CCtrlCombo &ctrl) + { + ctrl.ResetContent(); + + for (auto &it : g_arLogClasses) { + int idx = ctrl.AddString(TranslateW_LP(it->wszScreenName, it->pPlugin), LPARAM(it)); + if (!mir_strcmp(it->szShortName, pszClass)) + ctrl.SetCurSel(idx); + } + } public: CSrmmLogOptionsDlg() : CDlgBase(g_plugin, IDD_OPT_SRMMLOG), - m_list(this, IDC_LIST), - chkCustomLogs(this, IDC_ENABLE_CUSTOM) + cmbLogger(this, IDC_LOGGER), + cmbLoggerGC(this, IDC_LOGGER_GC) { - CreateLink(chkCustomLogs, Chat::bEnableCustomLogs); - - m_list.OnSelChange = Callback(this, &CSrmmLogOptionsDlg::onChange_List); } bool OnInitDialog() override { pDialog = this; - - auto *pClass = Srmm_GetWindowClass(0); - for (auto &it : g_arLogClasses) { - int idx = m_list.AddString(TranslateW_LP(it->wszScreenName, it->pPlugin), LPARAM(it)); - if (it == pClass) - m_list.SetCurSel(idx); - } - + PopulateCombo(g_logger, cmbLogger); + PopulateCombo(g_loggerGC, cmbLoggerGC); return true; } bool OnApply() override { - int idx = m_list.GetCurSel(); - if (idx == -1) + if (auto *pLogger = (SrmmLogWindowClass *)cmbLogger.GetCurData()) + g_logger = pLogger->szShortName; + else return false; - if (auto *pLogger = (SrmmLogWindowClass *)m_list.GetItemData(idx)) - g_logger = pLogger->szShortName; + if (auto *pLogger = (SrmmLogWindowClass *)cmbLoggerGC.GetCurData()) + g_loggerGC = pLogger->szShortName; + else + return false; if (!m_bExiting) { PostMessage(m_hwndParent, WM_CLOSE, 1, 0); @@ -164,7 +173,6 @@ public: void Rebuild() { - m_list.ResetContent(); OnInitDialog(); } diff --git a/src/mir_app/src/srmm_main.cpp b/src/mir_app/src/srmm_main.cpp index 9f08f8c221..af9b4007bc 100644 --- a/src/mir_app/src/srmm_main.cpp +++ b/src/mir_app/src/srmm_main.cpp @@ -198,6 +198,7 @@ int LoadSrmmModule() g_hCurHyperlinkHand = LoadCursor(nullptr, IDC_HAND); + CheckLogOptions(); LoadSrmmToolbarModule(); CreateServiceFunction(MS_HISTORY_EMPTY, svcEmptyHistory); -- cgit v1.2.3