summaryrefslogtreecommitdiff
path: root/protocols/SkypeWeb/src/skype_history_sync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/SkypeWeb/src/skype_history_sync.cpp')
-rw-r--r--protocols/SkypeWeb/src/skype_history_sync.cpp100
1 files changed, 50 insertions, 50 deletions
diff --git a/protocols/SkypeWeb/src/skype_history_sync.cpp b/protocols/SkypeWeb/src/skype_history_sync.cpp
index 7c5092c0b3..3984845d7c 100644
--- a/protocols/SkypeWeb/src/skype_history_sync.cpp
+++ b/protocols/SkypeWeb/src/skype_history_sync.cpp
@@ -27,7 +27,6 @@ void CSkypeProto::OnGetServerHistory(MHttpResponse *response, AsyncHttpRequest *
auto &root = reply.data();
const JSONNode &metadata = root["_metadata"];
- const JSONNode &conversations = root["messages"].as_array();
int totalCount = metadata["totalCount"].as_int();
std::string syncState = metadata["syncState"].as_string();
@@ -37,17 +36,16 @@ void CSkypeProto::OnGetServerHistory(MHttpResponse *response, AsyncHttpRequest *
uint32_t lastMsgTime = 0;
time_t iLocalTime = time(0);
- for (int i = (int)conversations.size(); i >= 0; i--) {
- const JSONNode &message = conversations.at(i);
-
+ auto &conv = root["messages"];
+ for (auto it = conv.rbegin(); it != conv.rend(); ++it) {
+ auto &message = *it;
CMStringA szMessageId = message["clientmessageid"] ? message["clientmessageid"].as_string().c_str() : message["skypeeditedid"].as_string().c_str();
- int userType;
- CMStringW wszChatId = UrlToSkypeId(message["conversationLink"].as_mstring(), &userType);
- CMStringW wszContent = message["content"].as_mstring();
- CMStringW wszFrom = UrlToSkypeId(message["from"].as_mstring());
+ int iUserType;
+ CMStringA szChatId = UrlToSkypeId(message["conversationLink"].as_mstring(), &iUserType);
+ CMStringA szFrom = UrlToSkypeId(message["from"].as_mstring());
- MCONTACT hContact = FindContact(wszChatId);
+ MCONTACT hContact = FindContact(szChatId);
std::string messageType = message["messagetype"].as_string();
int emoteOffset = message["skypeemoteoffset"].as_int();
@@ -55,7 +53,12 @@ void CSkypeProto::OnGetServerHistory(MHttpResponse *response, AsyncHttpRequest *
if (timestamp > getDword(hContact, "LastMsgTime", 0))
setDword(hContact, "LastMsgTime", timestamp);
- bool isEdited = message["skypeeditedid"];
+ CMStringW wszContent = message["content"].as_mstring();
+ T2Utf szMsg(wszContent);
+ if (messageType == "RichText/Contacts") {
+ ProcessContactRecv(hContact, timestamp, szMsg, szMessageId);
+ return;
+ }
uint32_t id = message["id"].as_int();
if (id > lastMsgTime)
@@ -64,53 +67,50 @@ void CSkypeProto::OnGetServerHistory(MHttpResponse *response, AsyncHttpRequest *
if (bUseLocalTime)
timestamp = iLocalTime;
- if (userType == 8 || userType == 2) {
- uint32_t iFlags = DBEF_UTF;
+ DB::EventInfo dbei(db_event_getById(m_szModuleName, szMessageId));
- if (!markAllAsUnread)
- iFlags |= DBEF_READ;
+ dbei.flags = DBEF_UTF;
+ if (!markAllAsUnread)
+ dbei.flags |= DBEF_READ;
+ if (IsMe(szFrom))
+ dbei.flags |= DBEF_SENT;
- if (IsMe(wszFrom))
- iFlags |= DBEF_SENT;
-
- if (messageType == "Text" || messageType == "RichText") {
- CMStringW szMessage(messageType == "RichText" ? RemoveHtml(wszContent) : wszContent);
- MEVENT dbevent = GetMessageFromDb(szMessageId);
- if (isEdited && dbevent != NULL)
- EditEvent(dbevent, szMessage, timestamp);
- else
- AddDbEvent(emoteOffset == 0 ? EVENTTYPE_MESSAGE : SKYPE_DB_EVENT_TYPE_ACTION, hContact, timestamp, iFlags, szMessage.c_str()+emoteOffset, szMessageId);
- }
- else if (messageType == "Event/Call") {
- AddDbEvent(SKYPE_DB_EVENT_TYPE_CALL_INFO, hContact, timestamp, iFlags, wszContent, szMessageId);
- }
- else if (messageType == "RichText/Files") {
- AddDbEvent(SKYPE_DB_EVENT_TYPE_FILETRANSFER_INFO, hContact, timestamp, iFlags, wszContent, szMessageId);
- }
- else if (messageType == "RichText/UriObject") {
- AddDbEvent(SKYPE_DB_EVENT_TYPE_URIOBJ, hContact, timestamp, iFlags, wszContent, szMessageId);
- }
- else if (messageType == "RichText/Contacts") {
- ProcessContactRecv(hContact, timestamp, T2Utf(wszContent), szMessageId);
- }
- else if (messageType == "RichText/Media_Album") {
- // do nothing
- }
- else {
- AddDbEvent(SKYPE_DB_EVENT_TYPE_UNKNOWN, hContact, timestamp, iFlags, wszContent, szMessageId);
- }
+ if (messageType == "Text" || messageType == "RichText") {
+ CMStringW szMessage(messageType == "RichText" ? RemoveHtml(wszContent) : wszContent);
+ dbei.eventType = (emoteOffset == 0) ? EVENTTYPE_MESSAGE : SKYPE_DB_EVENT_TYPE_ACTION;
+ }
+ else if (messageType == "Event/Call") {
+ dbei.eventType = SKYPE_DB_EVENT_TYPE_CALL_INFO;
+ }
+ else if (messageType == "RichText/Files") {
+ dbei.eventType = SKYPE_DB_EVENT_TYPE_FILETRANSFER_INFO;
+ }
+ else if (messageType == "RichText/UriObject") {
+ dbei.eventType = SKYPE_DB_EVENT_TYPE_URIOBJ;
+ }
+ else if (messageType == "RichText/Media_Album") {
+ // do nothing
+ }
+ else {
+ dbei.eventType = SKYPE_DB_EVENT_TYPE_UNKNOWN;
}
- else if (userType == 19) {
- auto *si = Chat_Find(wszChatId, m_szModuleName);
- if (si == nullptr)
- return;
- if (messageType == "Text" || messageType == "RichText")
- AddMessageToChat(si, wszFrom, messageType == "RichText" ? RemoveHtml(wszContent) : wszContent, emoteOffset != NULL, emoteOffset, timestamp, true);
+ dbei.szModule = m_szModuleName;
+ dbei.timestamp = timestamp;
+ dbei.cbBlob = (uint32_t)mir_strlen(szMsg);
+ dbei.pBlob = szMsg;
+ dbei.szId = szMessageId;
+ if (iUserType == 19)
+ dbei.szUserId = szFrom;
+
+ if (dbei) {
+ db_event_edit(dbei.getEvent(), &dbei, true);
+ dbei.pBlob = nullptr;
}
+ else db_event_add(hContact, &dbei);
}
- if (totalCount >= 99 || conversations.size() >= 99) {
+ if (totalCount >= 99 || conv.size() >= 99) {
CMStringA szUrl(pRequest->m_szUrl);
int i1 = szUrl.Find("startTime=");
int i2 = szUrl.Find("&", i1);