summaryrefslogtreecommitdiff
path: root/plugins/StatusManager/src/KeepStatus
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/StatusManager/src/KeepStatus')
-rw-r--r--plugins/StatusManager/src/KeepStatus/keepstatus.cpp274
-rw-r--r--plugins/StatusManager/src/KeepStatus/keepstatus.h8
-rw-r--r--plugins/StatusManager/src/KeepStatus/ks_options.cpp1
3 files changed, 138 insertions, 145 deletions
diff --git a/plugins/StatusManager/src/KeepStatus/keepstatus.cpp b/plugins/StatusManager/src/KeepStatus/keepstatus.cpp
index d518b47edc..f0c0051e60 100644
--- a/plugins/StatusManager/src/KeepStatus/keepstatus.cpp
+++ b/plugins/StatusManager/src/KeepStatus/keepstatus.cpp
@@ -21,7 +21,8 @@
int hKSLangpack = 0;
-struct TimerInfo {
+struct TimerInfo
+{
int timer;
int timeout;
BOOL restart;
@@ -43,12 +44,12 @@ static HANDLE hCSStatusChangeExHook = NULL;
static HWND hMessageWindow = NULL;
-static int CompareConnections(const TConnectionSettings *p1, const TConnectionSettings *p2)
+static int CompareConnections(const TKSSettings *p1, const TKSSettings *p2)
{
- return mir_strcmp(p1->szName, p2->szName);
+ return mir_strcmp(p1->m_szName, p2->m_szName);
}
-static OBJLIST<TConnectionSettings> connectionSettings(10, CompareConnections);
+static OBJLIST<TKSSettings> connectionSettings(10, CompareConnections);
static UINT_PTR checkConnectionTimerId = 0;
static UINT_PTR afterCheckTimerId = 0;
@@ -69,18 +70,15 @@ static int showConnectionPopups = 0;
static int StartTimer(int timer, int timeout, BOOL restart);
static int StopTimer(int timer);
static void GetCurrentConnectionSettings();
-static int AssignStatus(TConnectionSettings* connSetting, int status, int lastStatus, wchar_t *szMsg);
static int ProcessProtoAck(WPARAM wParam, LPARAM lParam);
static VOID CALLBACK CheckConnectingTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime);
static VOID CALLBACK CheckAckStatusTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime);
static int StatusChange(WPARAM wParam, LPARAM lParam);
static int CSStatusChange(WPARAM wParam, LPARAM lParam);
static int CSStatusChangeEx(WPARAM wParam, LPARAM lParam);
-static VOID CALLBACK StatusChangeTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime);
static VOID CALLBACK CheckConnectionTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime);
static int StopChecking();
static VOID CALLBACK AfterCheckTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime);
-static void ContinueslyCheckFunction(void *arg);
static VOID CALLBACK CheckContinueslyTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime);
INT_PTR IsProtocolEnabledService(WPARAM wParam, LPARAM lParam);
@@ -92,21 +90,20 @@ static DWORD CALLBACK MessageWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
// options.c
extern int KeepStatusOptionsInit(WPARAM wparam, LPARAM);
-TConnectionSettings::TConnectionSettings(PROTOACCOUNT *pa)
+TKSSettings::TKSSettings(PROTOACCOUNT *pa)
{
- cbSize = sizeof(PROTOCOLSETTINGEX);
- szName = pa->szModuleName;
- tszAccName = pa->tszAccountName;
- szMsg = NULL;
+ m_szName = pa->szModuleName;
+ m_tszAccName = pa->tszAccountName;
+ m_szMsg = NULL;
int iStatus = CallProtoService(pa->szModuleName, PS_GETSTATUS, 0, 0);
- AssignStatus(this, iStatus, iStatus, NULL);
+ AssignStatus(iStatus, iStatus, nullptr);
}
-TConnectionSettings::~TConnectionSettings()
+TKSSettings::~TKSSettings()
{
- if (szMsg != NULL)
- free(szMsg);
+ if (m_szMsg != NULL)
+ free(m_szMsg);
}
int KSLoadOptions()
@@ -167,13 +164,13 @@ static void GetCurrentConnectionSettings()
for (int i = 0; i < count; i++)
if (IsSuitableProto(protos[i]))
- connectionSettings.insert(new TConnectionSettings(protos[i]));
+ connectionSettings.insert(new TKSSettings(protos[i]));
}
static PROTOCOLSETTINGEX** GetCurrentProtoSettingsCopy()
{
mir_cslock lck(GenStatusCS);
- PROTOCOLSETTINGEX **ps = (PROTOCOLSETTINGEX**)malloc(connectionSettings.getCount()*sizeof(PROTOCOLSETTINGEX *));
+ PROTOCOLSETTINGEX **ps = (PROTOCOLSETTINGEX**)malloc(connectionSettings.getCount() * sizeof(PROTOCOLSETTINGEX *));
if (ps == NULL) {
return NULL;
}
@@ -184,13 +181,12 @@ static PROTOCOLSETTINGEX** GetCurrentProtoSettingsCopy()
return NULL;
}
- TConnectionSettings& cs = connectionSettings[i];
- ps[i]->cbSize = sizeof(PROTOCOLSETTINGEX);
- ps[i]->lastStatus = cs.lastStatus;
- ps[i]->status = cs.status;
- ps[i]->szMsg = NULL;
- ps[i]->szName = cs.szName;
- ps[i]->tszAccName = cs.tszAccName;
+ TKSSettings& cs = connectionSettings[i];
+ ps[i]->m_lastStatus = cs.m_lastStatus;
+ ps[i]->m_status = cs.m_status;
+ ps[i]->m_szMsg = NULL;
+ ps[i]->m_szName = cs.m_szName;
+ ps[i]->m_tszAccName = cs.m_tszAccName;
}
return ps;
@@ -199,67 +195,71 @@ static PROTOCOLSETTINGEX** GetCurrentProtoSettingsCopy()
static void FreeProtoSettings(PROTOCOLSETTINGEX** ps)
{
for (int i = 0; i < connectionSettings.getCount(); i++) {
- if (ps[i]->szMsg != NULL)
- free(ps[i]->szMsg);
+ if (ps[i]->m_szMsg != NULL)
+ free(ps[i]->m_szMsg);
free(ps[i]);
}
free(ps);
}
-static int AssignStatus(TConnectionSettings* cs, int status, int lastStatus, wchar_t *szMsg)
+int TKSSettings::AssignStatus(int iStatus, int iLastStatus, wchar_t *pwszMsg)
{
- if (status < MIN_STATUS || status > MAX_STATUS)
+ if (iStatus < MIN_STATUS || iStatus > MAX_STATUS)
return -1;
+ if (iStatus != ID_STATUS_OFFLINE && m_status == ID_STATUS_DISABLED)
+ return -2;
+ if (!db_get_b(NULL, KSMODULENAME, SETTING_NOLOCKED, 0) && db_get_b(NULL, m_szName, "LockMainStatus", 0))
+ return -3;
mir_cslock lck(GenStatusCS);
char dbSetting[128];
- mir_snprintf(dbSetting, "%s_enabled", cs->szName);
- cs->lastStatus = lastStatus == 0 ? cs->status : lastStatus;
+ mir_snprintf(dbSetting, "%s_enabled", m_szName);
+ m_lastStatus = iLastStatus == 0 ? m_status : iLastStatus;
if (!db_get_b(NULL, KSMODULENAME, dbSetting, 1))
- cs->status = ID_STATUS_DISABLED;
- else if (status == ID_STATUS_LAST)
- cs->status = cs->lastStatus;
+ m_status = ID_STATUS_DISABLED;
+ else if (m_status == ID_STATUS_LAST)
+ m_status = m_lastStatus;
else
- cs->status = status;
+ m_status = iStatus;
- log_infoA("KeepStatus: assigning status %d to %s", cs->status, cs->szName);
+ log_infoA("KeepStatus: assigning status %d to %s", m_status, m_szName);
- if (szMsg != NULL && mir_wstrcmp(szMsg, cs->szMsg)) {
- if (cs->szMsg != NULL)
- free(cs->szMsg);
+ if (pwszMsg != NULL && mir_wstrcmp(pwszMsg, m_szMsg)) {
+ if (m_szMsg != NULL)
+ free(m_szMsg);
- cs->szMsg = wcsdup(szMsg);
+ m_szMsg = wcsdup(pwszMsg);
}
- else if (szMsg != cs->szMsg) {
- if (cs->szMsg != NULL)
- free(cs->szMsg);
+ else if (pwszMsg != m_szMsg) {
+ if (m_szMsg != NULL)
+ free(m_szMsg);
- cs->szMsg = NULL;
+ m_szMsg = NULL;
}
return 0;
}
-static int GetStatus(const TConnectionSettings& cs)
+static int GetStatus(const TKSSettings& cs)
{
- if (cs.status == ID_STATUS_CURRENT)
- return CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+ if (cs.m_status == ID_STATUS_CURRENT)
+ return CallProtoService(cs.m_szName, PS_GETSTATUS, 0, 0);
- return cs.status;
+ return cs.m_status;
}
static int SetCurrentStatus()
{
PROTOCOLSETTINGEX **ps = GetCurrentProtoSettingsCopy();
for (int i = 0; i < connectionSettings.getCount(); i++) {
- int realStatus = CallProtoService(ps[i]->szName, PS_GETSTATUS, 0, 0);
- if (ps[i]->status == ID_STATUS_DISABLED || ps[i]->status == realStatus) { // ignore this proto by removing it's name (not so nice)
- ps[i]->szName = "";
+ int realStatus = CallProtoService(ps[i]->m_szName, PS_GETSTATUS, 0, 0);
+ if (ps[i]->m_status == ID_STATUS_DISABLED || ps[i]->m_status == realStatus) { // ignore this proto by removing it's name (not so nice)
+ ps[i]->m_szName = "";
}
- else if ((ps[i]->status != ID_STATUS_DISABLED) && (ps[i]->status != realStatus) && (realStatus != ID_STATUS_OFFLINE) && (db_get_b(NULL, KSMODULENAME, SETTING_FIRSTOFFLINE, FALSE))) {
+ else if ((ps[i]->m_status != ID_STATUS_DISABLED) && (ps[i]->m_status != realStatus) && (realStatus != ID_STATUS_OFFLINE) && (db_get_b(NULL, KSMODULENAME, SETTING_FIRSTOFFLINE, FALSE))) {
// force offline before reconnecting
- log_infoA("KeepStatus: Setting %s offline before making a new connection attempt", ps[i]->szName);
- CallProtoService(ps[i]->szName, PS_SETSTATUS, (WPARAM)ID_STATUS_OFFLINE, 0);
+ log_infoA("KeepStatus: Setting %s offline before making a new connection attempt", ps[i]->m_szName);
+ CallProtoService(ps[i]->m_szName, PS_SETSTATUS, (WPARAM)ID_STATUS_OFFLINE, 0);
}
}
ProcessPopup(KS_CONN_STATE_RETRY, (LPARAM)ps);
@@ -274,18 +274,15 @@ static int StatusChange(WPARAM wParam, LPARAM lParam)
char* szProto = (char *)lParam;
if (szProto == NULL) { // global status change
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (GetStatus(cs) != ID_STATUS_DISABLED)
- if (db_get_b(NULL, KSMODULENAME, SETTING_NOLOCKED, 0) ||
- !db_get_b(NULL, cs.szName, "LockMainStatus", 0))
- AssignStatus(&cs, wParam, 0, cs.szMsg);
+ TKSSettings& cs = connectionSettings[i];
+ cs.AssignStatus(wParam, 0, cs.m_szMsg);
}
}
else {
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (GetStatus(cs) != ID_STATUS_DISABLED && !mir_strcmp(cs.szName, szProto))
- AssignStatus(&cs, wParam, 0, cs.szMsg);
+ TKSSettings& cs = connectionSettings[i];
+ if (!mir_strcmp(cs.m_szName, szProto))
+ cs.AssignStatus(wParam, 0, cs.m_szMsg);
}
}
@@ -297,18 +294,16 @@ static int CSStatusChange(WPARAM wParam, LPARAM)
// the status was changed by commonstatus (old)
if (wParam != 0) {
PROTOCOLSETTING** protoSettings = *(PROTOCOLSETTING***)wParam;
-
if (protoSettings == NULL)
return -1;
for (int i = 0; i < connectionSettings.getCount(); i++) {
for (int j = 0; j < connectionSettings.getCount(); j++) {
- if ((protoSettings[i]->szName == NULL) || (connectionSettings[j].szName == NULL))
+ if ((protoSettings[i]->szName == NULL) || (connectionSettings[j].m_szName == NULL))
continue;
- if (!mir_strcmp(protoSettings[i]->szName, connectionSettings[j].szName))
- if (GetStatus(connectionSettings[j]) != ID_STATUS_DISABLED)
- AssignStatus(&connectionSettings[j], protoSettings[i]->status, protoSettings[i]->lastStatus, connectionSettings[j].szMsg);
+ if (!mir_strcmp(protoSettings[i]->szName, connectionSettings[j].m_szName))
+ connectionSettings[j].AssignStatus(protoSettings[i]->status, protoSettings[i]->lastStatus, connectionSettings[j].m_szMsg);
}
}
}
@@ -327,12 +322,11 @@ static int CSStatusChangeEx(WPARAM wParam, LPARAM)
for (int i = 0; i < connectionSettings.getCount(); i++) {
for (int j = 0; j < connectionSettings.getCount(); j++) {
- if ((protoSettings[i]->szName == NULL) || (connectionSettings[j].szName == NULL))
+ if ((protoSettings[i]->m_szName == NULL) || (connectionSettings[j].m_szName == NULL))
continue;
- if (!mir_strcmp(protoSettings[i]->szName, connectionSettings[j].szName)) {
- if (GetStatus(connectionSettings[j]) != ID_STATUS_DISABLED)
- AssignStatus(&connectionSettings[j], protoSettings[i]->status, protoSettings[i]->lastStatus, protoSettings[i]->szMsg);
- }
+
+ if (!mir_strcmp(protoSettings[i]->m_szName, connectionSettings[j].m_szName))
+ connectionSettings[j].AssignStatus(protoSettings[i]->m_status, protoSettings[i]->m_lastStatus, protoSettings[i]->m_szMsg);
}
}
}
@@ -528,8 +522,8 @@ static int ProcessProtoAck(WPARAM, LPARAM lParam)
if (ack->type == ACKTYPE_STATUS && ack->result == ACKRESULT_SUCCESS) {
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (!mir_strcmp(cs.szName, ack->szModule))
+ TKSSettings& cs = connectionSettings[i];
+ if (!mir_strcmp(cs.m_szName, ack->szModule))
cs.lastStatusAckTime = GetTickCount();
}
StartTimer(IDT_PROCESSACK, 0, FALSE);
@@ -539,17 +533,16 @@ static int ProcessProtoAck(WPARAM, LPARAM lParam)
if (ack->type == ACKTYPE_LOGIN) {
if (ack->lParam == LOGINERR_OTHERLOCATION) {
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (!mir_strcmp(ack->szModule, cs.szName)) {
- AssignStatus(&cs, ID_STATUS_OFFLINE, 0, NULL);
+ TKSSettings& cs = connectionSettings[i];
+ if (!mir_strcmp(ack->szModule, cs.m_szName)) {
+ cs.AssignStatus(ID_STATUS_OFFLINE);
if (db_get_b(NULL, KSMODULENAME, SETTING_CNCOTHERLOC, 0)) {
StopTimer(IDT_PROCESSACK);
- for (int j = 0; j < connectionSettings.getCount(); j++) {
- AssignStatus(&connectionSettings[j], ID_STATUS_OFFLINE, 0, NULL);
- }
+ for (int j = 0; j < connectionSettings.getCount(); j++)
+ connectionSettings[j].AssignStatus(ID_STATUS_OFFLINE);
}
- NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_OTHERLOCATION, (LPARAM)cs.szName);
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_OTHERLOCATION, (LPARAM)cs.m_szName);
ProcessPopup(KS_CONN_STATE_OTHERLOCATION, (LPARAM)ack->szModule);
}
}
@@ -559,26 +552,26 @@ static int ProcessProtoAck(WPARAM, LPARAM lParam)
NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
switch (db_get_b(NULL, KSMODULENAME, SETTING_LOGINERR, LOGINERR_NOTHING)) {
case LOGINERR_CANCEL:
- {
- log_infoA("KeepStatus: cancel on login error (%s)", ack->szModule);
- for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (!mir_strcmp(ack->szModule, cs.szName))
- AssignStatus(&cs, ID_STATUS_OFFLINE, 0, NULL);
+ {
+ log_infoA("KeepStatus: cancel on login error (%s)", ack->szModule);
+ for (int i = 0; i < connectionSettings.getCount(); i++) {
+ TKSSettings& cs = connectionSettings[i];
+ if (!mir_strcmp(ack->szModule, cs.m_szName))
+ cs.AssignStatus(ID_STATUS_OFFLINE);
+ }
+ ProcessPopup(KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
+ StopChecking();
}
- ProcessPopup(KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
- StopChecking();
- }
- break;
+ break;
case LOGINERR_SETDELAY:
- {
- int newDelay = 1000 * db_get_dw(NULL, KSMODULENAME, SETTING_LOGINERR_DELAY, DEFAULT_MAXDELAY);
- log_infoA("KeepStatus: set delay to %d on login error (%s)", newDelay / 1000, ack->szModule);
- StartTimer(IDT_CHECKCONN, newDelay, TRUE);
- }
- ProcessPopup(KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
- break;
+ {
+ int newDelay = 1000 * db_get_dw(NULL, KSMODULENAME, SETTING_LOGINERR_DELAY, DEFAULT_MAXDELAY);
+ log_infoA("KeepStatus: set delay to %d on login error (%s)", newDelay / 1000, ack->szModule);
+ StartTimer(IDT_CHECKCONN, newDelay, TRUE);
+ }
+ ProcessPopup(KS_CONN_STATE_LOGINERROR, (LPARAM)ack->szModule);
+ break;
default:
case LOGINERR_NOTHING:
@@ -598,7 +591,7 @@ static VOID CALLBACK CheckConnectingTimer(HWND, UINT, UINT_PTR, DWORD)
StopTimer(IDT_CHECKCONNECTING);
//log_debugA("KeepStatus: CheckConnectingTimer");
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
+ TKSSettings& cs = connectionSettings[i];
int curStatus = GetStatus(cs);
if (IsStatusConnecting(curStatus)) { // connecting
@@ -606,8 +599,8 @@ static VOID CALLBACK CheckConnectingTimer(HWND, UINT, UINT_PTR, DWORD)
if (maxConnectingTime > 0) {
if ((unsigned int)maxConnectingTime <= ((GetTickCount() - cs.lastStatusAckTime) / 1000)) {
// set offline
- log_infoA("KeepStatus: %s is too long connecting; setting offline", cs.szName);
- CallProtoService(cs.szName, PS_SETSTATUS, (WPARAM)ID_STATUS_OFFLINE, 0);
+ log_infoA("KeepStatus: %s is too long connecting; setting offline", cs.m_szName);
+ CallProtoService(cs.m_szName, PS_SETSTATUS, (WPARAM)ID_STATUS_OFFLINE, 0);
}
}
}
@@ -621,10 +614,10 @@ static VOID CALLBACK CheckAckStatusTimer(HWND, UINT, UINT_PTR, DWORD)
StopTimer(IDT_PROCESSACK);
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
+ TKSSettings& cs = connectionSettings[i];
int curStatus = GetStatus(cs);
- int newStatus = CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+ int newStatus = CallProtoService(cs.m_szName, PS_GETSTATUS, 0, 0);
// ok, np
if (curStatus == ID_STATUS_CURRENT || curStatus == ID_STATUS_DISABLED || curStatus == newStatus || newStatus > MAX_STATUS)
continue;
@@ -636,15 +629,15 @@ static VOID CALLBACK CheckAckStatusTimer(HWND, UINT, UINT_PTR, DWORD)
}
// keepstatus' administration was wrong!
else if (newStatus != ID_STATUS_OFFLINE)
- AssignStatus(&cs, newStatus, 0, NULL);
+ cs.AssignStatus(newStatus);
// connection lost
else if (newStatus == ID_STATUS_OFFLINE) {// start checking connection
if (!StartTimer(IDT_CHECKCONN, -1, FALSE)) { /* check if not already checking */
needChecking = true;
- log_infoA("KeepStatus: connection lost! (%s)", cs.szName);
- NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_LOST, (LPARAM)cs.szName);
- ProcessPopup(KS_CONN_STATE_LOST, (LPARAM)cs.szName);
+ log_infoA("KeepStatus: connection lost! (%s)", cs.m_szName);
+ NotifyEventHooks(hConnectionEvent, (WPARAM)KS_CONN_STATE_LOST, (LPARAM)cs.m_szName);
+ ProcessPopup(KS_CONN_STATE_LOST, (LPARAM)cs.m_szName);
}
}
}
@@ -664,17 +657,17 @@ static VOID CALLBACK CheckConnectionTimer(HWND, UINT, UINT_PTR, DWORD)
hIcon = Skin_LoadIcon(SKINICON_STATUS_OFFLINE);
for (int i = 0; i < connectionSettings.getCount() && !setStatus; i++) {
- TConnectionSettings& cs = connectionSettings[i];
- realStatus = CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+ TKSSettings& cs = connectionSettings[i];
+ realStatus = CallProtoService(cs.m_szName, PS_GETSTATUS, 0, 0);
shouldBeStatus = GetStatus(cs);
if (shouldBeStatus == ID_STATUS_LAST)
- shouldBeStatus = cs.lastStatus;
+ shouldBeStatus = cs.m_lastStatus;
if (shouldBeStatus == ID_STATUS_DISABLED)
continue;
if ((shouldBeStatus != realStatus) && (realStatus == ID_STATUS_OFFLINE) || (realStatus < MIN_STATUS)) {
setStatus = true;
if (showConnectionPopups)
- hIcon = Skin_LoadProtoIcon(cs.szName, ID_STATUS_OFFLINE);
+ hIcon = Skin_LoadProtoIcon(cs.m_szName, ID_STATUS_OFFLINE);
}
}
@@ -709,11 +702,11 @@ static int StopChecking()
BOOL isOk = TRUE;
for (int i = 0; i < connectionSettings.getCount() && isOk; i++) {
- TConnectionSettings& cs = connectionSettings[i];
+ TKSSettings& cs = connectionSettings[i];
int curStatus = GetStatus(cs);
- int newStatus = CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
- if (newStatus != curStatus && curStatus != ID_STATUS_DISABLED) {
- AssignStatus(&cs, newStatus, 0, NULL);
+ int newStatus = CallProtoService(cs.m_szName, PS_GETSTATUS, 0, 0);
+ if (newStatus != curStatus) {
+ cs.AssignStatus(newStatus);
isOk = FALSE;
}
}
@@ -735,11 +728,11 @@ static VOID CALLBACK AfterCheckTimer(HWND, UINT, UINT_PTR, DWORD)
bool setStatus = false;
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- int realStatus = CallProtoService(cs.szName, PS_GETSTATUS, 0, 0);
+ TKSSettings& cs = connectionSettings[i];
+ int realStatus = CallProtoService(cs.m_szName, PS_GETSTATUS, 0, 0);
int shouldBeStatus = GetStatus(cs);
if (shouldBeStatus == ID_STATUS_LAST) // this should never happen
- shouldBeStatus = cs.lastStatus;
+ shouldBeStatus = cs.m_lastStatus;
if (shouldBeStatus == ID_STATUS_DISABLED) // (on ignoring proto)
continue;
if ((shouldBeStatus != realStatus) && (realStatus == ID_STATUS_OFFLINE) || (realStatus < MIN_STATUS))
@@ -762,16 +755,16 @@ static void CheckContinueslyFunction(void *)
// do a ping, even if reconnecting
bool doPing = false;
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
+ TKSSettings& cs = connectionSettings[i];
int shouldBeStatus = GetStatus(cs);
if (shouldBeStatus == ID_STATUS_LAST)
- shouldBeStatus = cs.lastStatus;
+ shouldBeStatus = cs.m_lastStatus;
if (shouldBeStatus == ID_STATUS_DISABLED)
continue;
if (shouldBeStatus != ID_STATUS_OFFLINE) {
- log_debugA("CheckContinueslyFunction: %s should be %d", cs.szName, shouldBeStatus);
+ log_debugA("CheckContinueslyFunction: %s should be %d", cs.m_szName, shouldBeStatus);
doPing = true;
}
}
@@ -935,14 +928,14 @@ static int ProcessPopup(int reason, LPARAM lParam)
memset(protoInfo, '\0', sizeof(protoInfo));
mir_wstrcpy(protoInfo, L"\r\n");
for (int i = 0; i < connectionSettings.getCount(); i++) {
- if (mir_wstrlen(ps[i]->tszAccName) > 0 && mir_strlen(ps[i]->szName) > 0) {
+ if (mir_wstrlen(ps[i]->m_tszAccName) > 0 && mir_strlen(ps[i]->m_szName) > 0) {
if (db_get_b(NULL, KSMODULENAME, SETTING_PUSHOWEXTRA, TRUE)) {
- mir_snwprintf(protoInfoLine, TranslateT("%s\t(will be set to %s)\r\n"), ps[i]->tszAccName, pcli->pfnGetStatusModeDescription(ps[i]->status, 0));
+ mir_snwprintf(protoInfoLine, TranslateT("%s\t(will be set to %s)\r\n"), ps[i]->m_tszAccName, pcli->pfnGetStatusModeDescription(ps[i]->m_status, 0));
mir_wstrncat(protoInfo, protoInfoLine, _countof(protoInfo) - mir_wstrlen(protoInfo) - 1);
}
}
}
- hIcon = Skin_LoadProtoIcon(ps[0]->szName, SKINICON_STATUS_OFFLINE);
+ hIcon = Skin_LoadProtoIcon(ps[0]->m_szName, SKINICON_STATUS_OFFLINE);
rtrimw(protoInfo);
if (retryCount == (maxRetries - 1))
@@ -1061,13 +1054,12 @@ INT_PTR EnableProtocolService(WPARAM wParam, LPARAM lParam)
int ret = -2;
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (!mir_strcmp(szProto, cs.szName)) {
- if (wParam) {
- if (GetStatus(cs) == ID_STATUS_DISABLED)
- AssignStatus(&cs, CallProtoService(cs.szName, PS_GETSTATUS, 0, 0), 0, NULL);
- }
- else AssignStatus(&cs, ID_STATUS_DISABLED, 0, NULL);
+ TKSSettings& cs = connectionSettings[i];
+ if (!mir_strcmp(szProto, cs.m_szName)) {
+ if (wParam)
+ cs.AssignStatus(CallProtoService(cs.m_szName, PS_GETSTATUS, 0, 0));
+ else
+ cs.AssignStatus(ID_STATUS_DISABLED);
ret = 0;
break;
@@ -1086,8 +1078,8 @@ INT_PTR IsProtocolEnabledService(WPARAM, LPARAM lParam)
return FALSE;
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (!mir_strcmp(szProto, cs.szName))
+ TKSSettings& cs = connectionSettings[i];
+ if (!mir_strcmp(szProto, cs.m_szName))
return GetStatus(cs) != ID_STATUS_DISABLED;
}
@@ -1097,12 +1089,12 @@ INT_PTR IsProtocolEnabledService(WPARAM, LPARAM lParam)
INT_PTR AnnounceStatusChangeService(WPARAM, LPARAM lParam)
{
PROTOCOLSETTINGEX *newSituation = (PROTOCOLSETTINGEX *)lParam;
- log_infoA("Another plugin announced a status change to %d for %s", newSituation->status, newSituation->szName == NULL ? "all" : newSituation->szName);
+ log_infoA("Another plugin announced a status change to %d for %s", newSituation->m_status, newSituation->m_szName == NULL ? "all" : newSituation->m_szName);
for (int i = 0; i < connectionSettings.getCount(); i++) {
- TConnectionSettings& cs = connectionSettings[i];
- if (!mir_strcmp(cs.szName, newSituation->szName))
- AssignStatus(&cs, newSituation->status, newSituation->lastStatus, newSituation->szMsg);
+ TKSSettings& cs = connectionSettings[i];
+ if (!mir_strcmp(cs.m_szName, newSituation->m_szName))
+ cs.AssignStatus(newSituation->m_status, newSituation->m_lastStatus, newSituation->m_szMsg);
}
return 0;
@@ -1122,7 +1114,7 @@ static DWORD CALLBACK MessageWndProc(HWND, UINT msg, WPARAM wParam, LPARAM lPara
if (ps == NULL) {
ps = GetCurrentProtoSettingsCopy();
for (int i = 0; i < connectionSettings.getCount(); i++)
- EnableProtocolService(0, (LPARAM)ps[i]->szName);
+ EnableProtocolService(0, (LPARAM)ps[i]->m_szName);
// set proto's offline, the clist will not try to reconnect in that case
Clist_SetStatusMode(ID_STATUS_OFFLINE);
@@ -1135,7 +1127,7 @@ static DWORD CALLBACK MessageWndProc(HWND, UINT msg, WPARAM wParam, LPARAM lPara
log_infoA("KeepStatus: resume from suspend state");
if (ps != NULL) {
for (int i = 0; i < connectionSettings.getCount(); i++)
- AssignStatus(&connectionSettings[i], ps[i]->status, ps[i]->lastStatus, ps[i]->szMsg);
+ connectionSettings[i].AssignStatus(ps[i]->m_status, ps[i]->m_lastStatus, ps[i]->m_szMsg);
FreeProtoSettings(ps);
ps = NULL;
}
@@ -1163,12 +1155,12 @@ int OnKSAccChanged(WPARAM wParam, LPARAM lParam)
PROTOACCOUNT *pa = (PROTOACCOUNT*)lParam;
switch (wParam) {
case PRAC_ADDED:
- connectionSettings.insert(new TConnectionSettings(pa));
+ connectionSettings.insert(new TKSSettings(pa));
break;
case PRAC_REMOVED:
for (int i = 0; i < connectionSettings.getCount(); i++) {
- if (!mir_strcmp(connectionSettings[i].szName, pa->szModuleName)) {
+ if (!mir_strcmp(connectionSettings[i].m_szName, pa->szModuleName)) {
connectionSettings.remove(i);
break;
}
diff --git a/plugins/StatusManager/src/KeepStatus/keepstatus.h b/plugins/StatusManager/src/KeepStatus/keepstatus.h
index 167bb1a051..3aa16d78b5 100644
--- a/plugins/StatusManager/src/KeepStatus/keepstatus.h
+++ b/plugins/StatusManager/src/KeepStatus/keepstatus.h
@@ -93,10 +93,12 @@ extern int hKSLangpack;
#define TRIGGER_CONNGIVEUP 0x20
#define SETTING_TRIGGERON "TriggerOn"
-struct TConnectionSettings : public PROTOCOLSETTINGEX
+struct TKSSettings : public PROTOCOLSETTINGEX
{
- TConnectionSettings(PROTOACCOUNT *pa);
- ~TConnectionSettings();
+ TKSSettings(PROTOACCOUNT *pa);
+ ~TKSSettings();
+
+ int AssignStatus(int status, int lastStatus = 0, wchar_t *szMsg = nullptr);
int lastStatusAckTime; // the time the last status ack was received
};
diff --git a/plugins/StatusManager/src/KeepStatus/ks_options.cpp b/plugins/StatusManager/src/KeepStatus/ks_options.cpp
index 1a4d6075b8..0db88f5264 100644
--- a/plugins/StatusManager/src/KeepStatus/ks_options.cpp
+++ b/plugins/StatusManager/src/KeepStatus/ks_options.cpp
@@ -20,7 +20,6 @@
#include "..\stdafx.h"
// prototypes
-INT_PTR CALLBACK OptDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PopupOptDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK DlgProcKSBasicOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)