diff options
author | George Hazan <ghazan@miranda.im> | 2022-10-03 19:27:43 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-10-03 19:27:43 +0300 |
commit | f23e1a5e267d9feec25b3a8a2f26017d03963f25 (patch) | |
tree | ac65dcd088573e6503b6fd8eddbc5c00b378a324 /protocols/WhatsAppWeb | |
parent | f914ae11d7192baf20a170e6ad6f2ae9a8cc0585 (diff) |
WhatsApp: setting statuses
Diffstat (limited to 'protocols/WhatsAppWeb')
-rw-r--r-- | protocols/WhatsAppWeb/src/proto.cpp | 25 | ||||
-rw-r--r-- | protocols/WhatsAppWeb/src/proto.h | 1 | ||||
-rw-r--r-- | protocols/WhatsAppWeb/src/server.cpp | 10 |
3 files changed, 19 insertions, 17 deletions
diff --git a/protocols/WhatsAppWeb/src/proto.cpp b/protocols/WhatsAppWeb/src/proto.cpp index 8e94628b92..c29a7d60d9 100644 --- a/protocols/WhatsAppWeb/src/proto.cpp +++ b/protocols/WhatsAppWeb/src/proto.cpp @@ -118,7 +118,7 @@ INT_PTR WhatsAppProto::GetCaps(int type, MCONTACT) case PFLAGNUM_1: return PF1_IM | PF1_FILE | PF1_CHAT | PF1_BASICSEARCH | PF1_ADDSEARCHRES | PF1_MODEMSGRECV; case PFLAGNUM_2: - return PF2_ONLINE | PF2_INVISIBLE; + return PF2_ONLINE; case PFLAGNUM_3: return 0; case PFLAGNUM_4: @@ -141,22 +141,20 @@ int WhatsAppProto::SetStatus(int new_status) // Routing statuses not supported by WhatsApp switch (new_status) { - case ID_STATUS_INVISIBLE: case ID_STATUS_OFFLINE: m_iDesiredStatus = new_status; break; case ID_STATUS_ONLINE: case ID_STATUS_FREECHAT: - m_iDesiredStatus = ID_STATUS_ONLINE; - break; - default: - m_iDesiredStatus = ID_STATUS_INVISIBLE; + m_iDesiredStatus = ID_STATUS_ONLINE; break; } if (m_iDesiredStatus == ID_STATUS_OFFLINE) { + SetServerStatus(m_iDesiredStatus); + if (m_hServerConn != nullptr) Netlib_Shutdown(m_hServerConn); @@ -170,17 +168,10 @@ int WhatsAppProto::SetStatus(int new_status) ForkThread(&WhatsAppProto::ServerThread); } else if (m_hServerConn != nullptr) { - if (m_iDesiredStatus == ID_STATUS_ONLINE) { - // m_pConn->sendAvailableForChat(); - m_iStatus = ID_STATUS_ONLINE; - ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus); - } - else if (m_iStatus == ID_STATUS_ONLINE && m_iDesiredStatus == ID_STATUS_INVISIBLE) { - // m_pConn->sendClose(); - m_iStatus = ID_STATUS_INVISIBLE; - setAllContactStatuses(ID_STATUS_OFFLINE); - ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus); - } + SetServerStatus(m_iDesiredStatus); + + m_iStatus = m_iDesiredStatus; + ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus); } else ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus); diff --git a/protocols/WhatsAppWeb/src/proto.h b/protocols/WhatsAppWeb/src/proto.h index ff1d4fe18e..14ef70bd94 100644 --- a/protocols/WhatsAppWeb/src/proto.h +++ b/protocols/WhatsAppWeb/src/proto.h @@ -195,6 +195,7 @@ class WhatsAppProto : public PROTO<WhatsAppProto> void ShutdownSession(void); void SendKeepAlive(); + void SetServerStatus(int iStatus); /// Request handlers /////////////////////////////////////////////////////////////////// diff --git a/protocols/WhatsAppWeb/src/server.cpp b/protocols/WhatsAppWeb/src/server.cpp index cf53d72896..1ac49b6037 100644 --- a/protocols/WhatsAppWeb/src/server.cpp +++ b/protocols/WhatsAppWeb/src/server.cpp @@ -231,6 +231,8 @@ void WhatsAppProto::OnLoggedIn() { debugLogA("WhatsAppProto::OnLoggedIn"); + SetServerStatus(m_iDesiredStatus); + ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)m_iStatus, m_iDesiredStatus); m_iStatus = m_iDesiredStatus; @@ -269,6 +271,14 @@ void WhatsAppProto::SendKeepAlive() } } +void WhatsAppProto::SetServerStatus(int iStatus) +{ + WANode iq("presence"); + iq << CHAR_PARAM("name", getMStringA("Nick")) << CHAR_PARAM("type", (iStatus == ID_STATUS_ONLINE) ? "available" : "unavailable"); + WSSendNode(iq); +} + + ///////////////////////////////////////////////////////////////////////////////////////// void WhatsAppProto::ShutdownSession() |