From ffb61c98cc33470e7f5f6051c91d2b01a16eb143 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 7 Jan 2024 13:17:02 +0300 Subject: =?UTF-8?q?fixes=20#4102=20(ICQ,=20Facebook:=20=D1=80=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=BA=D0=BE=D0=BB=D1=8B=20=D0=B2=D1=8B=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D1=8F=D1=8E=D1=82=20=D0=BD=D0=B5=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=D0=B5/=D0=BD=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D1=8B?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocols/Facebook/src/proto.cpp | 5 +++++ protocols/ICQ-WIM/src/proto.cpp | 19 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'protocols') diff --git a/protocols/Facebook/src/proto.cpp b/protocols/Facebook/src/proto.cpp index bec6bac475..229d5b7c73 100644 --- a/protocols/Facebook/src/proto.cpp +++ b/protocols/Facebook/src/proto.cpp @@ -247,6 +247,11 @@ int FacebookProto::SetStatus(int iNewStatus) case ID_STATUS_OFFLINE: break; + case ID_STATUS_FREECHAT: + case ID_STATUS_INVISIBLE: + iNewStatus = ID_STATUS_ONLINE; + break; + default: iNewStatus = ID_STATUS_AWAY; break; diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp index ac913a8afe..9173a4faca 100644 --- a/protocols/ICQ-WIM/src/proto.cpp +++ b/protocols/ICQ-WIM/src/proto.cpp @@ -616,10 +616,18 @@ int CIcqProto::SetStatus(int iNewStatus) { debugLogA("CIcqProto::SetStatus iNewStatus = %d, m_iStatus = %d, m_iDesiredStatus = %d m_hWorkerThread = %p", iNewStatus, m_iStatus, m_iDesiredStatus, m_hWorkerThread); + switch (iNewStatus) { + case ID_STATUS_OFFLINE: + case ID_STATUS_ONLINE: + break; + + default: + iNewStatus = ID_STATUS_ONLINE; + } + if (iNewStatus == m_iStatus) return 0; - m_iDesiredStatus = iNewStatus; int iOldStatus = m_iStatus; // go offline @@ -627,13 +635,17 @@ int CIcqProto::SetStatus(int iNewStatus) if (m_bOnline) SetServerStatus(ID_STATUS_OFFLINE); - m_iStatus = m_iDesiredStatus; + m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE; setAllContactStatuses(ID_STATUS_OFFLINE, false); ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)iOldStatus, m_iStatus); + return 0; } + + m_iDesiredStatus = iNewStatus; + // not logged in? come on - else if (!m_bOnline && !IsStatusConnecting(m_iStatus)) { + if (!m_bOnline && !IsStatusConnecting(m_iStatus)) { m_iStatus = ID_STATUS_CONNECTING; ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)iOldStatus, m_iStatus); @@ -655,7 +667,6 @@ int CIcqProto::SetStatus(int iNewStatus) debugLogA("setting server online status to %d", iNewStatus); SetServerStatus(iNewStatus); } - return 0; } -- cgit v1.2.3