From 0c74ee3239a1846e654653ed008c40df2e73a362 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 12 Feb 2025 19:43:07 +0300 Subject: =?UTF-8?q?fixes=20#4866=20(StatusManager:=20Startup=20status=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=B2=D0=B8=D0=B4=D0=B8=D1=82=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=D0=B4=D1=83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/StatusManager/StatusManager.vcxproj | 5 ----- plugins/StatusManager/StatusManager.vcxproj.filters | 3 --- plugins/StatusManager/src/aaa_main.cpp | 2 +- plugins/StatusManager/src/aaa_options.cpp | 4 ++-- plugins/StatusManager/src/commonstatus.cpp | 14 +++++++++++--- plugins/StatusManager/src/commonstatus.h | 1 + plugins/StatusManager/src/confirmdialog.cpp | 4 ++-- plugins/StatusManager/src/ss_options.cpp | 4 +--- plugins/StatusManager/src/version.h | 2 +- 9 files changed, 19 insertions(+), 20 deletions(-) (limited to 'plugins') diff --git a/plugins/StatusManager/StatusManager.vcxproj b/plugins/StatusManager/StatusManager.vcxproj index 5ae7ba06e5..5e56395372 100644 --- a/plugins/StatusManager/StatusManager.vcxproj +++ b/plugins/StatusManager/StatusManager.vcxproj @@ -51,11 +51,6 @@ - - - NotUsing - - diff --git a/plugins/StatusManager/StatusManager.vcxproj.filters b/plugins/StatusManager/StatusManager.vcxproj.filters index d077f7ec80..c5ef5304a6 100644 --- a/plugins/StatusManager/StatusManager.vcxproj.filters +++ b/plugins/StatusManager/StatusManager.vcxproj.filters @@ -41,9 +41,6 @@ Source Files - - Source Files - diff --git a/plugins/StatusManager/src/aaa_main.cpp b/plugins/StatusManager/src/aaa_main.cpp index f69cd394bb..37e818a05f 100644 --- a/plugins/StatusManager/src/aaa_main.cpp +++ b/plugins/StatusManager/src/aaa_main.cpp @@ -444,7 +444,7 @@ int LoadAutoAwaySetting(SMProto &autoAwaySetting, char *protoName) if (g_bAAASettingSame) flags = 0xFFFFFF; else - flags = CallProtoService(protoName, PS_GETCAPS, PFLAGNUM_2, 0) & ~CallProtoService(protoName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0); + flags = GetStatusFlags(protoName); mir_snprintf(setting, "%s_Lv1Status", protoName); autoAwaySetting.lv1Status = AAAPlugin.getWord(setting, (flags & StatusModeToProtoFlag(ID_STATUS_AWAY)) ? ID_STATUS_AWAY : ID_STATUS_OFFLINE); diff --git a/plugins/StatusManager/src/aaa_options.cpp b/plugins/StatusManager/src/aaa_options.cpp index 6e976fe277..08efc53cd8 100644 --- a/plugins/StatusManager/src/aaa_options.cpp +++ b/plugins/StatusManager/src/aaa_options.cpp @@ -346,7 +346,7 @@ static INT_PTR CALLBACK DlgProcAutoAwayRulesOpts(HWND hwndDlg, UINT msg, WPARAM int flags = 0; if (!g_bAAASettingSame) - flags = CallProtoService(setting->m_szName, PS_GETCAPS, PFLAGNUM_2, 0) & ~CallProtoService(setting->m_szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0); + flags = GetStatusFlags(setting->m_szName); LVITEM lvItem = { 0 }; lvItem.mask = LVIF_TEXT | LVIF_PARAM; @@ -367,7 +367,7 @@ static INT_PTR CALLBACK DlgProcAutoAwayRulesOpts(HWND hwndDlg, UINT msg, WPARAM { int flags = 0; if (!g_bAAASettingSame) - flags = CallProtoService(setting->m_szName, PS_GETCAPS, PFLAGNUM_2, 0) & ~CallProtoService(setting->m_szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0); + flags = GetStatusFlags(setting->m_szName); // clear box and add new status, loop status and check if compatible with proto SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_RESETCONTENT, 0, 0); diff --git a/plugins/StatusManager/src/commonstatus.cpp b/plugins/StatusManager/src/commonstatus.cpp index c8ce7d10b7..7e83949b55 100644 --- a/plugins/StatusManager/src/commonstatus.cpp +++ b/plugins/StatusManager/src/commonstatus.cpp @@ -251,9 +251,8 @@ int SetStatusEx(TProtoSettings &ps) // status checks long protoFlag = Proto_Status2Flag(newstatus); - int b_Caps2 = CallProtoService(p->m_szName, PS_GETCAPS, PFLAGNUM_2, 0) & protoFlag; - int b_Caps5 = CallProtoService(p->m_szName, PS_GETCAPS, PFLAGNUM_5, 0) & protoFlag; - if (newstatus != ID_STATUS_OFFLINE && (!b_Caps2 || b_Caps5)) { + int b_Caps25 = GetStatusFlags(p->m_szName) & protoFlag; + if (newstatus != ID_STATUS_OFFLINE && !b_Caps25) { // status and status message for this status not supported log_debug(0, "CommonStatus: status not supported %s", p->m_szName); continue; @@ -297,6 +296,15 @@ static INT_PTR GetProtocolCountService(WPARAM, LPARAM) return pCount; } +int GetStatusFlags(const char *szProto) +{ + int flags = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_2, 0) & ~CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_5, 0); + if (flags == 0) + flags = PF2_ONLINE; + + return flags; +} + bool IsSuitableProto(PROTOACCOUNT *pa) { if (!pa || !pa->bIsVisible || !pa->IsEnabled() || !pa->ppro) diff --git a/plugins/StatusManager/src/commonstatus.h b/plugins/StatusManager/src/commonstatus.h index 6695cebaa8..569eafa59a 100644 --- a/plugins/StatusManager/src/commonstatus.h +++ b/plugins/StatusManager/src/commonstatus.h @@ -49,6 +49,7 @@ wchar_t *GetDefaultStatusMessage(PROTOCOLSETTINGEX *ps, int status); int GetActualStatus(PROTOCOLSETTINGEX *protoSetting); int InitCommonStatus(); bool IsSuitableProto(PROTOACCOUNT *pa); +int GetStatusFlags(const char *szProto); ///////////////////////////////////////////////////////////////////////////////////////// // external data diff --git a/plugins/StatusManager/src/confirmdialog.cpp b/plugins/StatusManager/src/confirmdialog.cpp index 5ef6a719a3..e5417e14e3 100644 --- a/plugins/StatusManager/src/confirmdialog.cpp +++ b/plugins/StatusManager/src/confirmdialog.cpp @@ -312,7 +312,7 @@ static INT_PTR CALLBACK ConfirmDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP } PROTOCOLSETTINGEX *proto = (PROTOCOLSETTINGEX*)lvItem.lParam; - int flags = CallProtoService(proto->m_szName, PS_GETCAPS, PFLAGNUM_2, 0) & ~CallProtoService(proto->m_szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0); + int flags = GetStatusFlags(proto->m_szName); // clear box and add new status, loop status and check if compatible with proto SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_RESETCONTENT, 0, 0); int actualStatus = proto->m_status; @@ -339,7 +339,7 @@ static INT_PTR CALLBACK ConfirmDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP for (auto &it : statusModes) { int pf5 = CallProtoService(proto->m_szName, PS_GETCAPS, PFLAGNUM_5, 0); - if (((flags & it.iFlag) || it.iFlag == PF2_OFFLINE) && (!(!(flags) & Proto_Status2Flag(it.iFlag)) || (pf5 & Proto_Status2Flag(it.iFlag)))) { + if (((flags & it.iFlag) || it.iFlag == PF2_OFFLINE) && (!(!(flags & Proto_Status2Flag(it.iFlag))) || (pf5 & Proto_Status2Flag(it.iFlag)))) { wchar_t *statusMode = Clist_GetStatusModeDescription(it.iStatus, 0); item = SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_ADDSTRING, 0, (LPARAM)statusMode); SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_SETITEMDATA, item, it.iStatus); diff --git a/plugins/StatusManager/src/ss_options.cpp b/plugins/StatusManager/src/ss_options.cpp index 4faef91bd1..8dddc81d68 100644 --- a/plugins/StatusManager/src/ss_options.cpp +++ b/plugins/StatusManager/src/ss_options.cpp @@ -557,9 +557,7 @@ class CSSAdvancedOptDlg : public CDlgBase // fill status box SMProto* ps = (SMProto*)lstAccount.GetItemData(idx); - int flags = (CallProtoService(ps->m_szName, PS_GETCAPS, PFLAGNUM_2, 0))&~(CallProtoService(ps->m_szName, PS_GETCAPS, PFLAGNUM_5, 0)); - if (flags == 0) - flags = PF2_ONLINE; + int flags = GetStatusFlags(ps->m_szName); lstStatus.ResetContent(); for (auto &it : statusModes) { diff --git a/plugins/StatusManager/src/version.h b/plugins/StatusManager/src/version.h index d94fbff878..75190fa143 100644 --- a/plugins/StatusManager/src/version.h +++ b/plugins/StatusManager/src/version.h @@ -2,7 +2,7 @@ #define __MAJOR_VERSION 1 #define __MINOR_VERSION 2 #define __RELEASE_NUM 0 -#define __BUILD_NUM 6 +#define __BUILD_NUM 7 // other stuff for Version resource #include -- cgit v1.2.3