summaryrefslogtreecommitdiff
path: root/protocols/SkypeWeb/src/skype_polling.cpp
diff options
context:
space:
mode:
authorMikalaiR <nikolay.romanovich@narod.ru>2015-08-14 18:28:24 +0000
committerMikalaiR <nikolay.romanovich@narod.ru>2015-08-14 18:28:24 +0000
commit68a3fc7b15763f415970ec49623a449fbae41e7c (patch)
tree7844790dc04e583853f70f4058f41d5932b4f64f /protocols/SkypeWeb/src/skype_polling.cpp
parent6c47e76c6d7296528b55d514910a6af1663f7b99 (diff)
SkypeWeb: Unneeded code removed
git-svn-id: http://svn.miranda-ng.org/main/trunk@14954 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/SkypeWeb/src/skype_polling.cpp')
-rw-r--r--protocols/SkypeWeb/src/skype_polling.cpp200
1 files changed, 156 insertions, 44 deletions
diff --git a/protocols/SkypeWeb/src/skype_polling.cpp b/protocols/SkypeWeb/src/skype_polling.cpp
index bf2fc714ff..4d9fd04318 100644
--- a/protocols/SkypeWeb/src/skype_polling.cpp
+++ b/protocols/SkypeWeb/src/skype_polling.cpp
@@ -17,49 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdafx.h"
-void CSkypeProto::ParsePollData(void *pData)
-{
- debugLogA("CSkypeProto::ParsePollData");
-
- JSONNode data = JSONNode::parse(ptrA((char*)pData));
- if (!data) return;
-
- const JSONNode &node = data["eventMessages"];
- if (!node) return;
-
- for (auto it = node.begin(); it != node.end(); ++it)
- {
- const JSONNode &message = *it;
- const JSONNode &resType = message["resourceType"];
- const JSONNode &resource = message["resource"];
-
- std::string resourceType = resType.as_string();
- if (resourceType == "NewMessage")
- {
- ProcessNewMessageRes(resource);
- }
- else if (resourceType == "UserPresence")
- {
- ProcessUserPresenceRes(resource);
- }
- else if (resourceType == "EndpointPresence")
- {
- ProcessEndpointPresenceRes(resource);
- }
- else if (resourceType == "ConversationUpdate")
- {
- ProcessConversationUpdateRes(resource);
- }
- else if (resourceType == "ThreadUpdate")
- {
- ProcessThreadUpdateRes(resource);
- }
- }
-}
-
void CSkypeProto::PollingThread(void*)
{
- debugLogA(__FUNCTION__": entering");
+ debugLogA(__FUNCTION__ ": entering");
int errors = 0;
isTerminated = false;
@@ -110,10 +70,162 @@ void CSkypeProto::PollingThread(void*)
if (!isTerminated)
{
- debugLogA(__FUNCTION__": unexpected termination; switching protocol to offline");
+ debugLogA(__FUNCTION__ ": unexpected termination; switching protocol to offline");
SetStatus(ID_STATUS_OFFLINE);
}
m_hPollingThread = NULL;
m_pollingConnection = NULL;
- debugLogA(__FUNCTION__": leaving");
-} \ No newline at end of file
+ debugLogA(__FUNCTION__ ": leaving");
+}
+
+void CSkypeProto::ParsePollData(void *pData)
+{
+ debugLogA(__FUNCTION__);
+
+ JSONNode data = JSONNode::parse(ptrA((char*)pData));
+ if (!data) return;
+
+ const JSONNode &node = data["eventMessages"];
+ if (!node) return;
+
+ for (auto it = node.begin(); it != node.end(); ++it)
+ {
+ const JSONNode &message = *it;
+ const JSONNode &resType = message["resourceType"];
+ const JSONNode &resource = message["resource"];
+
+ std::string resourceType = resType.as_string();
+ if (resourceType == "NewMessage")
+ {
+ ProcessNewMessage(resource);
+ }
+ else if (resourceType == "UserPresence")
+ {
+ ProcessUserPresence(resource);
+ }
+ else if (resourceType == "EndpointPresence")
+ {
+ ProcessEndpointPresence(resource);
+ }
+ else if (resourceType == "ConversationUpdate")
+ {
+ ProcessConversationUpdate(resource);
+ }
+ else if (resourceType == "ThreadUpdate")
+ {
+ ProcessThreadUpdate(resource);
+ }
+ }
+}
+
+void CSkypeProto::ProcessEndpointPresence(const JSONNode &node)
+{
+ debugLogA("CSkypeProto::ProcessEndpointPresenceRes");
+ std::string selfLink = node["selfLink"].as_string();
+ CMStringA skypename(UrlToSkypename(selfLink.c_str()));
+
+ MCONTACT hContact = FindContact(skypename);
+ if (hContact == NULL)
+ return;
+
+ const JSONNode &publicInfo = node["publicInfo"];
+ const JSONNode &privateInfo = node["privateInfo"];
+ CMStringA MirVer;
+ if (publicInfo)
+ {
+ std::string skypeNameVersion = publicInfo["skypeNameVersion"].as_string();
+ std::string version = publicInfo["version"].as_string();
+ std::string typ = publicInfo["typ"].as_string();
+ int iTyp = atoi(typ.c_str());
+ switch (iTyp)
+ {
+ case 0:
+ case 1:
+ MirVer.AppendFormat("Skype (Web) %s", ParseUrl(version.c_str(), "/"));
+ break;
+ case 10:
+ MirVer.AppendFormat("Skype (XBOX) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 17:
+ MirVer.AppendFormat("Skype (Android) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 16:
+ MirVer.AppendFormat("Skype (iOS) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 12:
+ MirVer.AppendFormat("Skype (WinRT) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 15:
+ MirVer.AppendFormat("Skype (WP) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 13:
+ MirVer.AppendFormat("Skype (OSX) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 11:
+ MirVer.AppendFormat("Skype (Windows) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 14:
+ MirVer.AppendFormat("Skype (Linux) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
+ break;
+ case 125:
+ MirVer.AppendFormat("Miranda NG Skype %s", version.c_str());
+ break;
+ default:
+ MirVer.Append("Skype (Unknown)");
+ }
+ }
+ if (privateInfo != NULL)
+ {
+ std::string epname = privateInfo["epname"].as_string();
+ if (!epname.empty())
+ {
+ MirVer.AppendFormat(" [%s]", epname.c_str());
+ }
+ }
+ db_set_s(hContact, m_szModuleName, "MirVer", MirVer);
+}
+
+void CSkypeProto::ProcessUserPresence(const JSONNode &node)
+{
+ debugLogA("CSkypeProto::ProcessUserPresenceRes");
+
+ std::string selfLink = node["selfLink"].as_string();
+ std::string status = node["status"].as_string();
+ CMStringA skypename = UrlToSkypename(selfLink.c_str());
+
+ if (!skypename.IsEmpty())
+ {
+ if (IsMe(skypename))
+ {
+ int iNewStatus = SkypeToMirandaStatus(status.c_str());
+ int old_status = m_iStatus;
+ m_iDesiredStatus = iNewStatus;
+ m_iStatus = iNewStatus;
+ if (old_status != iNewStatus)
+ {
+ ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)old_status, iNewStatus);
+ }
+ }
+ else
+ {
+ MCONTACT hContact = FindContact(skypename);
+ if (hContact != NULL)
+ SetContactStatus(hContact, SkypeToMirandaStatus(status.c_str()));
+ }
+ }
+}
+
+void CSkypeProto::ProcessNewMessage(const JSONNode &node)
+{
+ debugLogA(__FUNCTION__);
+
+ std::string conversationLink = node["conversationLink"].as_string();
+
+ if (conversationLink.find("/8:") != std::string::npos)
+ OnPrivateMessageEvent(node);
+ else if (conversationLink.find("/19:") != std::string::npos)
+ OnChatEvent(node);
+}
+
+void CSkypeProto::ProcessConversationUpdate(const JSONNode&){}
+void CSkypeProto::ProcessThreadUpdate(const JSONNode&){} \ No newline at end of file