summaryrefslogtreecommitdiff
path: root/protocols/FacebookRM/src/process.cpp
diff options
context:
space:
mode:
authorRobert Pösel <robyer@seznam.cz>2016-08-31 10:11:32 +0000
committerRobert Pösel <robyer@seznam.cz>2016-08-31 10:11:32 +0000
commit8a904bdef0e8237dee49c1b704d4ebbc2b28a958 (patch)
treec07494e752a8a00c237afdbcc25162391d66957c /protocols/FacebookRM/src/process.cpp
parentfc8bb06ec24197d50e695e5de657e7904d6ce597 (diff)
Facebook: Basic support for handling more chat events; version bump
Events like user join/leave, change emoji, etc. are now printed, but that's all. Still missing specific behavior for them, but that require more changes in events parsing and on other places. git-svn-id: http://svn.miranda-ng.org/main/trunk@17222 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/FacebookRM/src/process.cpp')
-rw-r--r--protocols/FacebookRM/src/process.cpp47
1 files changed, 41 insertions, 6 deletions
diff --git a/protocols/FacebookRM/src/process.cpp b/protocols/FacebookRM/src/process.cpp
index a3db0d8812..bc90683341 100644
--- a/protocols/FacebookRM/src/process.cpp
+++ b/protocols/FacebookRM/src/process.cpp
@@ -950,7 +950,7 @@ void FacebookProto::ReceiveMessages(std::vector<facebook_message> &messages, boo
setString(hChatContact, FACEBOOK_KEY_TID, fbc->thread_id.c_str());
for (auto jt = fbc->participants.begin(); jt != fbc->participants.end(); ++jt) {
- AddChatContact(fbc->thread_id.c_str(), jt->second);
+ AddChatContact(fbc->thread_id.c_str(), jt->second, false);
}
}
@@ -979,10 +979,43 @@ void FacebookProto::ReceiveMessages(std::vector<facebook_message> &messages, boo
if (jt != fbc->participants.end()) {
name = jt->second.nick;
}
+ else {
+ // TODO: Load info about this participant from server, and add it manually to participants list (maybe only if this is SUBSCRIBE type)
+ }
- // TODO: support also system messages (rename chat, user quit, etc.)! (here? or it is somewhere else?
- // ... we must add some new "type" field into facebook_message structure and use it also for Pokes and similar)
- UpdateChat(fbc->thread_id.c_str(), msg.user_id.c_str(), name.c_str(), msg.message_text.c_str(), msg.time);
+ switch (msg.type) {
+ default:
+ case MESSAGE:
+ UpdateChat(fbc->thread_id.c_str(), msg.user_id.c_str(), name.c_str(), msg.message_text.c_str(), msg.time);
+ break;
+ case ADMIN_TEXT:
+ UpdateChat(thread_id.c_str(), NULL, NULL, msg.message_text.c_str());
+ break;
+ case SUBSCRIBE:
+ // TODO: We must get data with list of added users (their ids) from json to work properly, so for now we just print it as admin message
+ UpdateChat(thread_id.c_str(), NULL, NULL, msg.message_text.c_str());
+ /*if (jt == fbc->participants.end()) {
+ // We don't have this user there yet, so load info about him and then add him
+ chatroom_participant participant;
+ participant.is_former = false;
+ participant.loaded = false;
+ participant.nick = msg.data;
+ participant.user_id = msg.data;
+ AddChatContact(thread_id.c_str(), participant, msg.isUnread);
+ }*/
+ break;
+ case UNSUBSCRIBE:
+ RemoveChatContact(thread_id.c_str(), msg.user_id.c_str(), name.c_str());
+ break;
+ case THREAD_NAME:
+ // proto->RenameChat(thread_id.c_str(), msg.data.c_str()); // this don't work, why?
+ setStringUtf(hChatContact, FACEBOOK_KEY_NICK, msg.data.c_str());
+ UpdateChat(thread_id.c_str(), NULL, NULL, msg.message_text.c_str());
+ break;
+ case THREAD_IMAGE:
+ UpdateChat(thread_id.c_str(), NULL, NULL, msg.message_text.c_str());
+ break;
+ }
// Automatically mark message as read because chatroom doesn't support onRead event (yet)
hChatContacts->insert(hChatContact); // std::set checks duplicates at insert automatically
@@ -1030,10 +1063,12 @@ void FacebookProto::ReceiveMessages(std::vector<facebook_message> &messages, boo
DBEVENTINFO dbei = { 0 };
dbei.cbSize = sizeof(dbei);
- if (msg.type == CALL)
+ if (msg.type == MESSAGE)
+ dbei.eventType = EVENTTYPE_MESSAGE;
+ else if (msg.type == CALL)
dbei.eventType = FACEBOOK_EVENTTYPE_CALL;
else
- dbei.eventType = EVENTTYPE_MESSAGE;
+ dbei.eventType = EVENTTYPE_URL; // FIXME: Use better and specific type for our other event types.
dbei.flags = DBEF_UTF;