From 220a737d71fa88f3acc19bdd9da6fff828aa0fdb Mon Sep 17 00:00:00 2001 From: MikalaiR Date: Thu, 23 Jul 2015 18:56:46 +0000 Subject: SkypeWeb: Receiving edited messages refactoring git-svn-id: http://svn.miranda-ng.org/main/trunk@14657 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/SkypeWeb/src/skype_db.cpp | 47 ++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) (limited to 'protocols/SkypeWeb/src/skype_db.cpp') diff --git a/protocols/SkypeWeb/src/skype_db.cpp b/protocols/SkypeWeb/src/skype_db.cpp index 394f0f552e..b987cb9343 100644 --- a/protocols/SkypeWeb/src/skype_db.cpp +++ b/protocols/SkypeWeb/src/skype_db.cpp @@ -38,9 +38,6 @@ MEVENT CSkypeProto::GetMessageFromDb(MCONTACT hContact, const char *messageId, L dbei.pBlob = blob; db_event_get(hDbEvent, &dbei); - if (dbei.eventType != EVENTTYPE_MESSAGE && dbei.eventType != SKYPE_DB_EVENT_TYPE_ACTION && dbei.eventType != SKYPE_DB_EVENT_TYPE_CALL_INFO && dbei.eventType != SKYPE_DB_EVENT_TYPE_FILETRANSFER_INFO && dbei.eventType != SKYPE_DB_EVENT_TYPE_URIOBJ) - continue; - size_t cbLen = mir_strlen((char*)dbei.pBlob); if (memcmp(&dbei.pBlob[cbLen + 1], messageId, messageIdLength) == 0) return hDbEvent; @@ -66,6 +63,50 @@ MEVENT CSkypeProto::AddDbEvent(WORD type, MCONTACT hContact, DWORD timestamp, DW return AddEventToDb(hContact, type, timestamp, flags, (DWORD)cbBlob, pBlob); } +MEVENT CSkypeProto::AppendDBEvent(MCONTACT hContact, MEVENT hEvent, const char *szContent, const char *szUid, time_t edit_time) +{ + DBEVENTINFO dbei = { sizeof(dbei) }; + dbei.cbBlob = db_event_getBlobSize(hEvent); + dbei.pBlob = mir_ptr((PBYTE)mir_alloc(dbei.cbBlob)); + db_event_get(hEvent, &dbei); + + JSONNode jMsg = JSONNode::parse((char*)dbei.pBlob); + if (jMsg) + { + if (jMsg["edits"]) + { + JSONNode jEdit; + jEdit.push_back(JSONNode("time", (long)edit_time)); + jEdit.push_back(JSONNode("text", szContent)); + + jMsg["edits"].push_back(jEdit); + } + } + else + { + jMsg = JSONNode(); + JSONNode jOriginalMsg; + JSONNode jEdits(JSON_ARRAY); + JSONNode jEdit; + + jOriginalMsg.set_name("original_message"); + jOriginalMsg.push_back(JSONNode("time", (long)dbei.timestamp)); + jOriginalMsg.push_back(JSONNode("text", (char*)dbei.pBlob)); + jMsg.push_back(jOriginalMsg); + + jEdit.push_back(JSONNode("time", (long)edit_time)); + jEdit.push_back(JSONNode("text", szContent)); + + jEdits.push_back(jEdit); + jEdits.set_name("edits"); + jMsg.push_back(jEdits); + + + } + int r = db_event_delete(hContact, hEvent); + return AddDbEvent(SKYPE_DB_EVENT_TYPE_EDITED_MESSAGE, hContact, dbei.timestamp, DBEF_UTF, jMsg.write().c_str(), szUid); +} + MEVENT CSkypeProto::AddEventToDb(MCONTACT hContact, WORD type, DWORD timestamp, DWORD flags, DWORD cbBlob, PBYTE pBlob) { DBEVENTINFO dbei = { sizeof(dbei) }; -- cgit v1.2.3