From b3e7101449926ca88ae21a5b435da7a2fd884320 Mon Sep 17 00:00:00 2001 From: MikalaiR Date: Wed, 15 Apr 2015 14:03:50 +0000 Subject: SkypeWeb: Edited messages support. git-svn-id: http://svn.miranda-ng.org/main/trunk@12838 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/SkypeWeb/src/skype_messages.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'protocols/SkypeWeb/src/skype_messages.cpp') diff --git a/protocols/SkypeWeb/src/skype_messages.cpp b/protocols/SkypeWeb/src/skype_messages.cpp index a826d38e52..c313dec4d5 100644 --- a/protocols/SkypeWeb/src/skype_messages.cpp +++ b/protocols/SkypeWeb/src/skype_messages.cpp @@ -19,6 +19,8 @@ along with this program. If not, see . MEVENT CSkypeProto::GetMessageFromDb(MCONTACT hContact, const char *messageId, LONGLONG timestamp) { + if(messageId == NULL) + return NULL; mir_cslock lock(messageSyncLock); size_t messageIdLength = mir_strlen(messageId); @@ -197,7 +199,9 @@ int CSkypeProto::OnPreCreateMessage(WPARAM, LPARAM lParam) void CSkypeProto::OnPrivateMessageEvent(JSONNODE *node) { ptrA clientMsgId(mir_t2a(ptrT(json_as_string(json_get(node, "clientmessageid"))))); - //ptrA skypeEditedId(mir_t2a(ptrT(json_as_string(json_get(node, "skypeeditedid"))))); + ptrA skypeEditedId(mir_t2a(ptrT(json_as_string(json_get(node, "skypeeditedid"))))); + + bool isEdited = (json_get(node, "skypeeditedid") != NULL); ptrT composeTime(json_as_string(json_get(node, "composetime"))); time_t timestamp = getByte("UseLocalTime", 0) ? time(NULL) : IsoToUnixTime(composeTime); @@ -214,7 +218,6 @@ void CSkypeProto::OnPrivateMessageEvent(JSONNODE *node) { ptrA conversationLink(mir_t2a(ptrT(json_as_string(json_get(node, "conversationLink"))))); ptrA cSkypename(ContactUrlToName(conversationLink)); - MCONTACT hContact = AddContact(cSkypename, true); int hMessage = atoi(clientMsgId); ProtoBroadcastAck(hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, (HANDLE)hMessage, 0); @@ -236,7 +239,20 @@ void CSkypeProto::OnPrivateMessageEvent(JSONNODE *node) else if (!mir_strcmpi(messageType, "Text") || !mir_strcmpi(messageType, "RichText")) { debugLogA(__FUNCTION__" timestamp = %d clientmsgid = %s", timestamp, clientMsgId); - OnReceiveMessage(clientMsgId, from, timestamp, message, emoteOffset); + MEVENT dbevent = GetMessageFromDb(hContact, skypeEditedId); + if (isEdited && dbevent != NULL) + { + DBEVENTINFO dbei = { sizeof(dbei) }; + db_event_get(dbevent, &dbei); + time_t dbEventTimestamp = dbei.timestamp; + if (!getByte("SaveEditedMessage", 0)) + { + db_event_delete(hContact, dbevent); + } + OnReceiveMessage(clientMsgId, from, dbEventTimestamp + 1, message, emoteOffset); + } + else + OnReceiveMessage(clientMsgId, from, timestamp, message, emoteOffset); } else if (!mir_strcmpi(messageType, "Event/SkypeVideoMessage")) return; //not supported -- cgit v1.2.3