From 5c46a4ff3d889e7ef4b2c4a8e6c353f84207a7ab Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Mon, 30 Mar 2015 19:23:00 +0000 Subject: SkypeWeb: massive improvements (patch from MikalaiR) git-svn-id: http://svn.miranda-ng.org/main/trunk@12556 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/SkypeWeb/src/skype_status.cpp | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 protocols/SkypeWeb/src/skype_status.cpp (limited to 'protocols/SkypeWeb/src/skype_status.cpp') diff --git a/protocols/SkypeWeb/src/skype_status.cpp b/protocols/SkypeWeb/src/skype_status.cpp new file mode 100644 index 0000000000..b40aa44198 --- /dev/null +++ b/protocols/SkypeWeb/src/skype_status.cpp @@ -0,0 +1,62 @@ +#include "common.h" +int CSkypeProto::SetStatus(int iNewStatus) +{ + if (iNewStatus == m_iDesiredStatus) + { + return 0; + } + + debugLogA(__FUNCTION__ ": changing status from %i to %i", m_iStatus, iNewStatus); + + int old_status = m_iStatus; + m_iDesiredStatus = iNewStatus; + switch (iNewStatus) + { + case ID_STATUS_OFFLINE: + PushRequest(new LogoutRequest()); + requestQueue->Stop(); + if (!Miranda_Terminated()) + { + SetAllContactsStatus(ID_STATUS_OFFLINE); + } + + m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE; + break; + + case ID_STATUS_INVISIBLE: + case ID_STATUS_AWAY: + case ID_STATUS_DND: + case ID_STATUS_IDLE: + PushRequest(new GetEndpointRequest(ptrA(getStringA("registrationToken")), getStringA("endpointId"))); + PushRequest(new SetStatusRequest(ptrA(getStringA("registrationToken")), iNewStatus), &CSkypeProto::OnSetStatus); + break; + default: + if (old_status == ID_STATUS_CONNECTING) + return 0; + + if (m_iStatus == ID_STATUS_INVISIBLE || m_iStatus == ID_STATUS_AWAY || m_iStatus == ID_STATUS_DND || m_iStatus == ID_STATUS_IDLE) + { + PushRequest(new GetEndpointRequest(ptrA(getStringA("registrationToken")), getStringA("endpointId"))); + PushRequest(new SetStatusRequest(ptrA(getStringA("registrationToken")), ID_STATUS_ONLINE), &CSkypeProto::OnSetStatus); + } + else if (old_status == ID_STATUS_OFFLINE && m_iStatus == ID_STATUS_OFFLINE) + { + // login + m_iStatus = ID_STATUS_CONNECTING; + + requestQueue->Start(); + PushRequest(new LoginRequest(), &CSkypeProto::OnLoginFirst); + } + else + { + // set status + m_iStatus = iNewStatus; + } + break; + + } + ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, m_iStatus); + return 0; +} + +void CSkypeProto::SetServerStatus(int iNewStatus){ return; } \ No newline at end of file -- cgit v1.2.3