summaryrefslogtreecommitdiff
path: root/protocols/SkypeWeb/src/skype_search.cpp
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2015-04-10 06:32:35 +0000
committerKirill Volinsky <mataes2007@gmail.com>2015-04-10 06:32:35 +0000
commit42f650093d1e855ef0ddbbc7dd5fd6f85e5f7279 (patch)
tree7317bba8ed61ec208297045f536306c0d8f2005e /protocols/SkypeWeb/src/skype_search.cpp
parent6b09aaa679a7263da7ed4ba7954f537e5c339d77 (diff)
skype search 1st attempt
git-svn-id: http://svn.miranda-ng.org/main/trunk@12722 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/SkypeWeb/src/skype_search.cpp')
-rw-r--r--protocols/SkypeWeb/src/skype_search.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/protocols/SkypeWeb/src/skype_search.cpp b/protocols/SkypeWeb/src/skype_search.cpp
new file mode 100644
index 0000000000..e8ed4c3b5d
--- /dev/null
+++ b/protocols/SkypeWeb/src/skype_search.cpp
@@ -0,0 +1,121 @@
+/*
+Copyright (c) 2015 Miranda NG project (http://miranda-ng.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation version 2
+of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "common.h"
+
+HANDLE CSkypeProto::SearchBasic(const PROTOCHAR* id)
+{
+ ForkThread(&CSkypeProto::SearchBasicThread, (void *)id);
+ return (HANDLE)1;
+}
+
+void CSkypeProto::SearchBasicThread(void* id)
+{
+ debugLogA("CSkypeProto::OnSearchBasicThread");
+ if (!IsOnline())
+ return;
+ ptrA token(getStringA("TokenSecret"));
+ //need to convert search string
+ char *string = mir_t2a((TCHAR*)id);
+ PushRequest(new GetSearchRequest(token, (char*)string), &CSkypeProto::OnSearch);
+}
+
+void CSkypeProto::OnSearch(const NETLIBHTTPREQUEST *response)
+{
+ if (response == NULL)
+ return;
+
+ JSONROOT root(response->pData);
+ if (root == NULL)
+ return;
+
+ /*PROTOSEARCHBYNAME *pParam = (PROTOSEARCHBYNAME *)pReq->pUserInfo;
+ debugLogA("CSkypeProto::OnSearch %d", reply->resultCode);
+ if (reply->resultCode != 200) {
+ if (pParam) {
+ mir_free(pParam->pszFirstName);
+ mir_free(pParam->pszLastName);
+ mir_free(pParam->pszNick);
+ delete pParam;
+ }
+ ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
+ return;
+ }
+
+ JSONROOT pRoot;
+ JSONNODE *pResponse = CheckJsonResponse(pReq, reply, pRoot);
+ if (pResponse == NULL) {
+ if (pParam) {
+ mir_free(pParam->pszFirstName);
+ mir_free(pParam->pszLastName);
+ mir_free(pParam->pszNick);
+ delete pParam;
+ }
+ ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
+ return;
+ }
+
+ int iCount = json_as_int(json_get(pResponse, "count"));
+ JSONNODE *pItems = json_get(pResponse, "items");
+ if (!pItems) {
+ pItems = pResponse;
+ iCount = 1;
+ }
+
+ for (int i = 0; i<iCount; i++) {
+ JSONNODE *pRecord = json_at(pItems, i);
+ if (pRecord == NULL)
+ break;
+
+ PROTOSEARCHRESULT psr = { sizeof(psr) };
+ psr.flags = PSR_TCHAR;
+
+ ptrT pId(json_as_string(json_get(pRecord, "id")));
+ ptrT pFirstName(json_as_string(json_get(pRecord, "first_name")));
+ ptrT pLastName(json_as_string(json_get(pRecord, "last_name")));
+ ptrT pNick(json_as_string(json_get(pRecord, "nickname")));
+ ptrT pDomain(json_as_string(json_get(pRecord, "domain")));
+
+ psr.id = mir_wstrdup(pId);
+ psr.firstName = mir_wstrdup(pFirstName);
+ psr.lastName = mir_wstrdup(pLastName);
+ psr.nick = mir_wstrdup(pNick);
+ if (!psr.nick || !psr.nick[0])
+ psr.nick = mir_wstrdup(pDomain);
+
+ bool filter = true;
+ if (pParam) {
+ if (psr.firstName&&pParam->pszFirstName)
+ filter = tlstrstr(psr.firstName, pParam->pszFirstName) && filter;
+ if (psr.lastName&&pParam->pszLastName)
+ filter = tlstrstr(psr.lastName, pParam->pszLastName) && filter;
+ if (psr.nick&&pParam->pszNick)
+ filter = tlstrstr(psr.nick, pParam->pszNick) && filter;
+ }
+
+ if (filter)
+ ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)1, (LPARAM)&psr);
+ }
+
+ ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
+ if (pParam) {
+ mir_free(pParam->pszFirstName);
+ mir_free(pParam->pszLastName);
+ mir_free(pParam->pszNick);
+ delete pParam;
+ }*/
+} \ No newline at end of file