From ea9403c8ff0b188f74f0fe2d101c4497485dbdaa Mon Sep 17 00:00:00 2001 From: MikalaiR Date: Thu, 30 Apr 2015 13:11:42 +0000 Subject: SkypeWeb: Notification on incoming call. git-svn-id: http://svn.miranda-ng.org/main/trunk@13289 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/SkypeWeb/SkypeWeb_10.vcxproj | 1 + protocols/SkypeWeb/SkypeWeb_10.vcxproj.filters | 3 +++ protocols/SkypeWeb/res/resource.rc | 1 + protocols/SkypeWeb/src/common.h | 4 ++-- protocols/SkypeWeb/src/resource.h | 3 ++- protocols/SkypeWeb/src/skype_icons.cpp | 3 ++- protocols/SkypeWeb/src/skype_messages.cpp | 11 +++++++++++ protocols/SkypeWeb/src/skype_proto.cpp | 9 +++++++++ protocols/SkypeWeb/src/skype_proto.h | 3 ++- protocols/SkypeWeb/src/skype_trouter.cpp | 18 +++++++++++------- 10 files changed, 44 insertions(+), 12 deletions(-) diff --git a/protocols/SkypeWeb/SkypeWeb_10.vcxproj b/protocols/SkypeWeb/SkypeWeb_10.vcxproj index 41f94cfeef..d387e70832 100644 --- a/protocols/SkypeWeb/SkypeWeb_10.vcxproj +++ b/protocols/SkypeWeb/SkypeWeb_10.vcxproj @@ -258,6 +258,7 @@ + diff --git a/protocols/SkypeWeb/SkypeWeb_10.vcxproj.filters b/protocols/SkypeWeb/SkypeWeb_10.vcxproj.filters index 8b8ed36817..3ff7ce69f7 100644 --- a/protocols/SkypeWeb/SkypeWeb_10.vcxproj.filters +++ b/protocols/SkypeWeb/SkypeWeb_10.vcxproj.filters @@ -179,6 +179,9 @@ Resource Files\Icons + + + Resource Files\Icons \ No newline at end of file diff --git a/protocols/SkypeWeb/res/resource.rc b/protocols/SkypeWeb/res/resource.rc index 822b053251..81199001e7 100644 --- a/protocols/SkypeWeb/res/resource.rc +++ b/protocols/SkypeWeb/res/resource.rc @@ -31,6 +31,7 @@ IDI_CONFERENCE ICON "Icons\\conference.ico" IDI_SYNCHISTORY ICON "Icons\\sync_history.ico" IDI_BLOCKUSER ICON "Icons\\user_block.ico" IDI_UNBLOCKUSER ICON "Icons\\user_unblock.ico" +IDI_CALL ICON "Icons\\call.ico" #endif // Нейтральный (по умолчанию) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/protocols/SkypeWeb/src/common.h b/protocols/SkypeWeb/src/common.h index 62b8891ada..d7d18ed018 100644 --- a/protocols/SkypeWeb/src/common.h +++ b/protocols/SkypeWeb/src/common.h @@ -103,6 +103,6 @@ enum SKYPE_LOGIN_ERROR #define POLLING_ERRORS_LIMIT 3 -#define SKYPE_DB_EVENT_TYPE_ACTION 10001 - +#define SKYPE_DB_EVENT_TYPE_ACTION 10001 +#define SKYPE_DB_EVENT_TYPE_INCOMING_CALL 10002 #endif //_COMMON_H_ \ No newline at end of file diff --git a/protocols/SkypeWeb/src/resource.h b/protocols/SkypeWeb/src/resource.h index cc6ecaf79b..58149ea76f 100644 --- a/protocols/SkypeWeb/src/resource.h +++ b/protocols/SkypeWeb/src/resource.h @@ -16,6 +16,7 @@ #define IDI_SYNCHISTORY 117 #define IDI_BLOCKUSER 118 #define IDI_UNBLOCKUSER 119 +#define IDI_CALL 120 #define IDC_AUTOSYNC 1028 #define IDC_LOCALTIME 1029 #define IDC_RADIO1 1030 @@ -32,7 +33,7 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 120 +#define _APS_NEXT_RESOURCE_VALUE 121 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1042 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/protocols/SkypeWeb/src/skype_icons.cpp b/protocols/SkypeWeb/src/skype_icons.cpp index a5e12cde4b..5ff4c0453f 100644 --- a/protocols/SkypeWeb/src/skype_icons.cpp +++ b/protocols/SkypeWeb/src/skype_icons.cpp @@ -23,7 +23,8 @@ IconInfo CSkypeProto::Icons[] = { LPGENT("Create new chat icon"), "conference", IDI_CONFERENCE }, { LPGENT("Sync history icon"), "synchistory", IDI_SYNCHISTORY}, { LPGENT("Block user icon"), "user_block", IDI_BLOCKUSER }, - { LPGENT("Unblock user icon"), "user_unblock", IDI_UNBLOCKUSER } + { LPGENT("Unblock user icon"), "user_unblock", IDI_UNBLOCKUSER }, + { LPGENT("Incoming call icon"), "inc_call", IDI_CALL } }; void CSkypeProto::InitIcons() { diff --git a/protocols/SkypeWeb/src/skype_messages.cpp b/protocols/SkypeWeb/src/skype_messages.cpp index b5cb528aa7..26ce4c644b 100644 --- a/protocols/SkypeWeb/src/skype_messages.cpp +++ b/protocols/SkypeWeb/src/skype_messages.cpp @@ -66,6 +66,17 @@ MEVENT CSkypeProto::AddMessageToDb(MCONTACT hContact, DWORD timestamp, DWORD fla return AddEventToDb(hContact, emoteOffset == 0 ? EVENTTYPE_MESSAGE : SKYPE_DB_EVENT_TYPE_ACTION, timestamp, flags, (DWORD)cbBlob, pBlob); } +MEVENT CSkypeProto::AddCallToDb(MCONTACT hContact, DWORD timestamp, DWORD flags) +{ + const char *message = Translate("Incoming call"); + size_t messageLength = mir_strlen(message); + size_t cbBlob = messageLength; + PBYTE pBlob = (PBYTE)mir_alloc(cbBlob); + memcpy(pBlob, message, messageLength); + + return AddEventToDb(hContact, SKYPE_DB_EVENT_TYPE_INCOMING_CALL, timestamp, flags, (DWORD)cbBlob, pBlob); +} + /* MESSAGE RECEIVING */ // incoming message flow diff --git a/protocols/SkypeWeb/src/skype_proto.cpp b/protocols/SkypeWeb/src/skype_proto.cpp index cc30702395..1e2bc97e4b 100644 --- a/protocols/SkypeWeb/src/skype_proto.cpp +++ b/protocols/SkypeWeb/src/skype_proto.cpp @@ -52,6 +52,11 @@ PROTO(protoName, userName), password(NULL) dbEventType.eventType = SKYPE_DB_EVENT_TYPE_ACTION; dbEventType.descr = Translate("Action"); CallService(MS_DB_EVENT_REGISTERTYPE, 0, (LPARAM)&dbEventType); + + dbEventType.eventType = SKYPE_DB_EVENT_TYPE_INCOMING_CALL; + dbEventType.descr = Translate("Incoming Call"); + dbEventType.eventIcon = GetIconHandle("inc_call"); + CallService(MS_DB_EVENT_REGISTERTYPE, 0, (LPARAM)&dbEventType); } CSkypeProto::~CSkypeProto() @@ -171,6 +176,8 @@ int CSkypeProto::SetStatus(int iNewStatus) isTerminated = true; if (m_pollingConnection) CallService(MS_NETLIB_SHUTDOWN, (WPARAM)m_pollingConnection, 0); + if (m_TrouterConnection) + CallService(MS_NETLIB_SHUTDOWN, (WPARAM)m_TrouterConnection, 0); if (m_iStatus > ID_STATUS_CONNECTING + 1) { @@ -246,6 +253,8 @@ int CSkypeProto::OnPreShutdown(WPARAM, LPARAM) isTerminated = true; if (m_pollingConnection) CallService(MS_NETLIB_SHUTDOWN, (WPARAM)m_pollingConnection, 0); + if (m_TrouterConnection) + CallService(MS_NETLIB_SHUTDOWN, (WPARAM)m_TrouterConnection, 0); return 0; } \ No newline at end of file diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h index 85c7cfcbd7..52d4477b47 100644 --- a/protocols/SkypeWeb/src/skype_proto.h +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -150,6 +150,7 @@ private: void OnTrouterPoliciesCreated(const NETLIBHTTPREQUEST *response); void OnGetTrouter(const NETLIBHTTPREQUEST *response); void OnHealth(const NETLIBHTTPREQUEST *response); + void OnTrouterEvent(JSONNODE *body, JSONNODE *headers); void __cdecl CSkypeProto::TRouterThread(void*); // profile @@ -206,7 +207,7 @@ private: MEVENT GetMessageFromDb(MCONTACT hContact, const char *messageId, LONGLONG timestamp = 0); MEVENT AddMessageToDb(MCONTACT hContact, DWORD timestamp, DWORD flags, const char *messageId, char *content, int emoteOffset = 0); - + MEVENT AddCallToDb(MCONTACT hContact, DWORD timestamp, DWORD flags); int OnReceiveMessage(const char *messageId, const char *url, time_t timestamp, char *content, int emoteOffset = 0, bool isRead = false); int SaveMessageToDb(MCONTACT hContact, PROTORECVEVENT *pre); diff --git a/protocols/SkypeWeb/src/skype_trouter.cpp b/protocols/SkypeWeb/src/skype_trouter.cpp index 2e0c24d996..06c09a72c8 100644 --- a/protocols/SkypeWeb/src/skype_trouter.cpp +++ b/protocols/SkypeWeb/src/skype_trouter.cpp @@ -89,6 +89,16 @@ void CSkypeProto::OnHealth(const NETLIBHTTPREQUEST *response) SendRequest(new GetTrouterRequest(socketIo, connId, st, se, sig, instance, ccid), &CSkypeProto::OnGetTrouter); } +void CSkypeProto::OnTrouterEvent(JSONNODE *body, JSONNODE *headers) +{ + ptrT displayname(json_as_string(json_get(body, "displayName"))); + ptrT uid(json_as_string(json_get(body, "conversationId"))); + + MCONTACT hContact = FindContact(_T2A(uid)); + if (hContact != NULL) + AddCallToDb(hContact, time(NULL), 0); +} + void CSkypeProto::TRouterThread(void*) { debugLogA(__FUNCTION__": entering"); @@ -133,14 +143,8 @@ void CSkypeProto::TRouterThread(void*) JSONROOT root(json); ptrA szBody(mir_t2a(ptrT(json_as_string(json_get(root, "body"))))); JSONNODE *headers = json_get(root, "headers"); - JSONROOT jsonBody(szBody); - - ptrT displayname(json_as_string(json_get(jsonBody, "displayName"))); - ptrT uid(json_as_string(json_get(jsonBody, "conversationId"))); - MCONTACT hContact = FindContact(_T2A(uid)); - if (uid != NULL) - ShowNotification(uid, TranslateT("Incoming call"), 0, hContact); + OnTrouterEvent(jsonBody, headers); } m_TrouterConnection = response->nlc; -- cgit v1.2.3