From 0106b105c7ac842eec10c5683be41cb50fd2e26c Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 30 Mar 2023 22:06:05 +0300 Subject: fix for #3471 applied to StdMsg & Scriver --- src/mir_app/src/chat_log.cpp | 2 +- src/mir_app/src/chat_opts.cpp | 1 + src/mir_app/src/chat_tools.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++ src/mir_app/src/mir_app.def | 2 ++ src/mir_app/src/mir_app64.def | 2 ++ src/mir_app/src/srmm_base.cpp | 13 +++++++---- 6 files changed, 68 insertions(+), 5 deletions(-) (limited to 'src/mir_app') diff --git a/src/mir_app/src/chat_log.cpp b/src/mir_app/src/chat_log.cpp index 582c7b4851..151662ab5d 100644 --- a/src/mir_app/src/chat_log.cpp +++ b/src/mir_app/src/chat_log.cpp @@ -290,7 +290,7 @@ char* Log_CreateRTF(LOGSTREAMDATA *streamData) for (LOGINFO *lin = streamData->lin; lin; lin = lin->prev) { // filter if (si->iType == GCW_CHATROOM || si->iType == GCW_PRIVMESS) - if (si->pDlg->m_bFilterEnabled && (si->pDlg->m_iLogFilterFlags & lin->iType) == 0) + if (!(si->pDlg->m_iLogFilterFlags & lin->iType)) continue; // create new line, and set font and color diff --git a/src/mir_app/src/chat_opts.cpp b/src/mir_app/src/chat_opts.cpp index af2b8c5176..22c7be9fa2 100644 --- a/src/mir_app/src/chat_opts.cpp +++ b/src/mir_app/src/chat_opts.cpp @@ -254,6 +254,7 @@ void LoadGlobalSettings(void) LoadMsgDlgFont(19, &lf, nullptr); g_Settings->UserListHeadingsFont = CreateFontIndirect(&lf); + Chat_ReconfigureFilters(); SetIndentSize(); } diff --git a/src/mir_app/src/chat_tools.cpp b/src/mir_app/src/chat_tools.cpp index 5e5c164597..938db7b19c 100644 --- a/src/mir_app/src/chat_tools.cpp +++ b/src/mir_app/src/chat_tools.cpp @@ -838,6 +838,59 @@ MIR_APP_DLL(int) Chat_GetTextPixelSize(const wchar_t *pszText, HFONT hFont, bool return bWidth ? rc.right - rc.left : rc.bottom - rc.top; } +///////////////////////////////////////////////////////////////////////////////////////// +// set all filters and notification config for a session +// uses per channel mask + filterbits, default config as backup + +MIR_APP_DLL(void) Chat_ReconfigureFilters() +{ + for (auto &si : g_arSessions) { + Chat_SetFilters(si); + if (si->pDlg) + si->pDlg->RedrawLog(); + } +} + +MIR_APP_DLL(void) Chat_SetFilters(SESSION_INFO *si) +{ + bool bEnabled = db_get_b(si->hContact, CHAT_MODULE, "FilterEnabled") != 0; + + CMsgDialog *pDlg = si->pDlg; + if (pDlg) { + uint32_t dwFlags = Chat::iFilterFlags; + uint32_t dwFlags_local = db_get_dw(si->hContact, CHAT_MODULE, "FilterFlags", GC_EVENT_ALL); + uint32_t dwMask = (bEnabled) ? db_get_dw(si->hContact, CHAT_MODULE, "FilterMask") : 0; + + for (int i = 0; i < 32; i++) { + uint32_t dwBit = 1 << i; + if (dwMask & dwBit) + dwFlags = (dwFlags_local & dwBit) ? dwFlags | dwBit : dwFlags & ~dwBit; + } + + pDlg->m_iLogFilterFlags = dwFlags; + } + + uint32_t dwFlags_local = db_get_dw(si->hContact, CHAT_MODULE, "PopupFlags", GC_EVENT_HIGHLIGHT); + uint32_t dwMask = (bEnabled) ? db_get_dw(si->hContact, CHAT_MODULE, "PopupMask") : 0; + + si->iPopupFlags = Chat::iPopupFlags; + for (int i = 0; i < 32; i++) { + uint32_t dwBit = 1 << i; + if (dwMask & dwBit) + si->iPopupFlags = (dwFlags_local & dwBit) ? si->iPopupFlags | dwBit : si->iPopupFlags & ~dwBit; + } + + dwFlags_local = db_get_dw(si->hContact, CHAT_MODULE, "TrayIconFlags", GC_EVENT_HIGHLIGHT); + dwMask = (bEnabled) ? db_get_dw(si->hContact, CHAT_MODULE, "TrayIconMask") : 0; + + si->iTrayFlags = Chat::iTrayIconFlags; + for (int i = 0; i < 32; i++) { + uint32_t dwBit = 1 << i; + if (dwMask & dwBit) + si->iTrayFlags = (dwFlags_local & dwBit) ? si->iTrayFlags | dwBit : si->iTrayFlags & ~dwBit; + } +} + ///////////////////////////////////////////////////////////////////////////////////////// // Chat serialization diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index b413153316..c454bed1ca 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -831,3 +831,5 @@ Chat_IsMuted @941 NONAME ?iSoundFlags@Chat@@3V?$CMOption@I@@A @946 NONAME ?iTrayIconFlags@Chat@@3V?$CMOption@I@@A @947 NONAME ?UpdateFilterButton@CSrmmBaseDialog@@UAEXXZ @948 NONAME +?Chat_SetFilters@@YGXPAUSESSION_INFO@@@Z @949 NONAME +?Chat_ReconfigureFilters@@YGXXZ @950 NONAME diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 7577223e3f..1f447d3ff0 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -831,3 +831,5 @@ Chat_IsMuted @941 NONAME ?iSoundFlags@Chat@@3V?$CMOption@I@@A @946 NONAME ?iTrayIconFlags@Chat@@3V?$CMOption@I@@A @947 NONAME ?UpdateFilterButton@CSrmmBaseDialog@@UEAAXXZ @948 NONAME +?Chat_SetFilters@@YAXPEAUSESSION_INFO@@@Z @949 NONAME +?Chat_ReconfigureFilters@@YAXXZ @950 NONAME diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index 0dfe3e31ca..1b3350552c 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -53,10 +53,6 @@ CSrmmBaseDialog::CSrmmBaseDialog(CMPluginBase &pPlugin, int idDialog, SESSION_IN m_hContact(0), m_clrInputBG(GetSysColor(COLOR_WINDOW)) { - m_bFilterEnabled = Chat::bFilterEnabled; - m_iLogFilterFlags = Chat::iFilterFlags; - m_bNicklistEnabled = Chat::bShowNicklist; - m_btnColor.OnClick = Callback(this, &CSrmmBaseDialog::onClick_Color); m_btnBkColor.OnClick = Callback(this, &CSrmmBaseDialog::onClick_BkColor); m_btnBold.OnClick = m_btnItalic.OnClick = m_btnUnderline.OnClick = Callback(this, &CSrmmBaseDialog::onClick_BIU); @@ -77,6 +73,10 @@ CSrmmBaseDialog::CSrmmBaseDialog(CMPluginBase &pPlugin, int idDialog, SESSION_IN m_iBG = 2; m_bBGSet = true; } + + m_bFilterEnabled = m_bFilterEnabled = db_get_b(m_hContact, CHAT_MODULE, "FilterEnabled", Chat::bFilterEnabled) != 0; + m_iLogFilterFlags = Chat::iFilterFlags; + m_bNicklistEnabled = Chat::bShowNicklist; } } @@ -690,6 +690,11 @@ void CSrmmBaseDialog::UpdateChatLog() void CSrmmBaseDialog::UpdateFilterButton() { + db_set_b(m_hContact, CHAT_MODULE, "FilterEnabled", m_bFilterEnabled); + + if (m_si) + Chat_SetFilters(m_si); + m_btnFilter.SendMsg(BUTTONADDTOOLTIP, (WPARAM)(m_bFilterEnabled ? TranslateT("Disable the event filter (Ctrl+F)") : TranslateT("Enable the event filter (Ctrl+F)")), BATF_UNICODE); } -- cgit v1.2.3