summaryrefslogtreecommitdiff
path: root/protocols/FacebookRM/src/process.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/FacebookRM/src/process.cpp')
-rw-r--r--protocols/FacebookRM/src/process.cpp54
1 files changed, 27 insertions, 27 deletions
diff --git a/protocols/FacebookRM/src/process.cpp b/protocols/FacebookRM/src/process.cpp
index 6508f12fcd..4685d3cdcd 100644
--- a/protocols/FacebookRM/src/process.cpp
+++ b/protocols/FacebookRM/src/process.cpp
@@ -409,7 +409,10 @@ void FacebookProto::LoadHistory(void *pParam)
MCONTACT hContact = *(MCONTACT*)pParam;
delete (MCONTACT*)pParam;
- if (!isOnline())
+ ScopedLock s(facy.loading_history_lock_);
+
+ // Allow loading history only from one contact at a time
+ if (!isOnline() || facy.loading_history)
return;
facy.handle_entry("LoadHistory");
@@ -447,6 +450,8 @@ void FacebookProto::LoadHistory(void *pParam)
// Temporarily disable marking messages as read for this contact
facy.ignore_read.insert(hContact);
+ // Mark we're loading history, so we can behave differently (e.g., stickers won't be refreshed as it slows the whole process down drastically)
+ facy.loading_history = true;
POPUPDATAW pd = { sizeof(pd) };
pd.iSeconds = 5;
@@ -499,37 +504,30 @@ void FacebookProto::LoadHistory(void *pParam)
}
lastMessageId = msg.message_id;
- if (msg.isIncoming && msg.isUnread && msg.type == MESSAGE) {
- PROTORECVEVENT recv = { 0 };
- recv.szMessage = const_cast<char*>(msg.message_text.c_str());
- recv.timestamp = msg.time;
- ProtoChainRecvMsg(hContact, &recv);
- }
- else {
- DBEVENTINFO dbei = { 0 };
- dbei.cbSize = sizeof(dbei);
+ // We don't use ProtoChainRecvMsg here as this is just loading of old messages, which we just add to log
+ DBEVENTINFO dbei = { 0 };
+ dbei.cbSize = sizeof(dbei);
- if (msg.type == MESSAGE)
- dbei.eventType = EVENTTYPE_MESSAGE;
- else if (msg.type == VIDEO_CALL || msg.type == PHONE_CALL)
- dbei.eventType = FACEBOOK_EVENTTYPE_CALL;
- else
- dbei.eventType = EVENTTYPE_URL; // FIXME: Use better and specific type for our other event types.
+ if (msg.type == MESSAGE)
+ dbei.eventType = EVENTTYPE_MESSAGE;
+ else if (msg.type == VIDEO_CALL || msg.type == PHONE_CALL)
+ dbei.eventType = FACEBOOK_EVENTTYPE_CALL;
+ else
+ dbei.eventType = EVENTTYPE_URL; // FIXME: Use better and specific type for our other event types.
- dbei.flags = DBEF_UTF;
+ dbei.flags = DBEF_UTF;
- if (!msg.isIncoming)
- dbei.flags |= DBEF_SENT;
+ if (!msg.isIncoming)
+ dbei.flags |= DBEF_SENT;
- if (!msg.isUnread)
- dbei.flags |= DBEF_READ;
+ if (!msg.isUnread)
+ dbei.flags |= DBEF_READ;
- dbei.szModule = m_szModuleName;
- dbei.timestamp = msg.time;
- dbei.cbBlob = (DWORD)msg.message_text.length() + 1;
- dbei.pBlob = (PBYTE)msg.message_text.c_str();
- db_event_add(hContact, &dbei);
- }
+ dbei.szModule = m_szModuleName;
+ dbei.timestamp = msg.time;
+ dbei.cbBlob = (DWORD)msg.message_text.length() + 1;
+ dbei.pBlob = (PBYTE)msg.message_text.c_str();
+ db_event_add(hContact, &dbei);
loadedMessages++;
}
@@ -571,6 +569,8 @@ void FacebookProto::LoadHistory(void *pParam)
// Enable marking messages as read for this contact
facy.ignore_read.erase(hContact);
+ // Reset loading history flag
+ facy.loading_history = false;
if (ServiceExists(MS_POPUP_CHANGETEXTW) && popupHwnd) {
PUChangeTextW(popupHwnd, TranslateT("Loading history completed."));