From 669c32164d32129e6226f9f586f9ebfebd6fa9c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Thu, 1 Sep 2016 01:09:56 +0000 Subject: Facebook: Add support for forgotten PHONE_CALL and cleanup code git-svn-id: http://svn.miranda-ng.org/main/trunk@17233 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/FacebookRM/src/constants.h | 15 ++-- protocols/FacebookRM/src/json.cpp | 142 +++++++++++------------------------ protocols/FacebookRM/src/process.cpp | 8 +- 3 files changed, 58 insertions(+), 107 deletions(-) (limited to 'protocols') diff --git a/protocols/FacebookRM/src/constants.h b/protocols/FacebookRM/src/constants.h index 7d07a010d6..dd389df257 100644 --- a/protocols/FacebookRM/src/constants.h +++ b/protocols/FacebookRM/src/constants.h @@ -187,13 +187,14 @@ enum ClientType { // Each type then could have also separate class representing it. And when giving it in some list, make it map of arrays with key=thread_id to group it by contact/chat, to have it more effective // Use also for Poke and such events... enum MessageType { - MESSAGE = 1, // Classic message - CALL = 2, // Video call - ADMIN_TEXT = 3, - SUBSCRIBE = 4, - UNSUBSCRIBE = 5, - THREAD_NAME = 6, - THREAD_IMAGE = 7, + MESSAGE = 1, + PHONE_CALL = 2, + VIDEO_CALL = 3, + ADMIN_TEXT = 4, + SUBSCRIBE = 5, + UNSUBSCRIBE = 6, + THREAD_NAME = 7, + THREAD_IMAGE = 8, }; enum ParticipantRole { diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp index a46fd08fb2..c79ad14716 100644 --- a/protocols/FacebookRM/src/json.cpp +++ b/protocols/FacebookRM/src/json.cpp @@ -72,6 +72,47 @@ void parseUser(const JSONNode &it, facebook_user *fbu) } } +void parseMessageType(FacebookProto *proto, facebook_message &message, const JSONNode &log_type_, const JSONNode &log_body_, const JSONNode &log_data_) { + if (!log_type_ || !log_body_ || !log_data_) + return; + + std::string logType = log_type_.as_string(); + + if (logType == "log:phone-call") { + message.type = PHONE_CALL; + } + else if (logType == "log:video-call") { + message.type = VIDEO_CALL; + } + else if (logType == "log:generic-admin-text") { + message.type = ADMIN_TEXT; + } + else if (logType == "log:subscribe") { + message.type = SUBSCRIBE; + + const JSONNode &fbids_ = log_data_["added_participants"]; + for (auto it2 = fbids_.begin(); it2 != fbids_.end(); ++it2) { + std::string id = (*it2).as_string().substr(5); // strip "fbid:" prefix + if (!message.data.empty()) + message.data += ";"; + message.data += id; + } + } + else if (logType == "log:unsubscribe") { + message.type = UNSUBSCRIBE; + } + else if (logType == "log:thread-name") { + message.type = THREAD_NAME; + message.data = log_data_["name"].as_string(); + } + else if (logType == "log:thread-image") { + message.type = THREAD_IMAGE; + } + else { + proto->debugLogA("!!! Unknown log type - %s", logType.c_str()); + } +} + int facebook_json_parser::parse_chat_participant_names(std::string *data, std::map* participants) { std::string jsonData = data->substr(9); @@ -964,36 +1005,7 @@ int facebook_json_parser::parse_messages(std::string *pData, std::vectordebugLogA("!!! Unknown log type - %s", logType.c_str()); - } + parseMessageType(proto, message, log_type_, log_body_, log_data_); messages->push_back(message); } @@ -1191,40 +1203,8 @@ int facebook_json_parser::parse_thread_messages(std::string *data, std::vector< else continue; } - - if (log_type_) { - std::string log_type = log_type_.as_string(); - if (log_type == "log:video-call") { - message.type = CALL; - } - else if (log_type == "log:generic-admin-text") { - message.type = ADMIN_TEXT; - } - else if (log_type == "log:subscribe") { - message.type = SUBSCRIBE; - - const JSONNode &fbids_ = log_data_["added_participants"]; - for (auto it2 = fbids_.begin(); it2 != fbids_.end(); ++it2) { - std::string id = (*it2).as_string().substr(5); // strip "fbid:" prefix - if (!message.data.empty()) - message.data += ";"; - message.data += id; - } - } - else if (log_type == "log:unsubscribe") { - message.type = UNSUBSCRIBE; - } - else if (log_type == "log:thread-name") { - message.type = THREAD_NAME; - message.data = log_data_["name"].as_string(); - } - else if (log_type == "log:thread-image") { - message.type = THREAD_IMAGE; - } - else { - proto->debugLogA("parse_thread_messages: unknown message log type (%s) - %s", mid.as_string().c_str(), log_type.c_str()); - } - } + + parseMessageType(proto, message, log_type_, log_body_, log_data_); messages->push_back(message); } @@ -1306,39 +1286,7 @@ int facebook_json_parser::parse_history(std::string *data, std::vector< facebook message.isChat = false; message.user_id = other_user_id; - if (log_type_) { - std::string log_type = log_type_.as_string(); - if (log_type == "log:video-call") { - message.type = CALL; - } - else if (log_type == "log:generic-admin-text") { - message.type = ADMIN_TEXT; - } - else if (log_type == "log:subscribe") { - message.type = SUBSCRIBE; - - const JSONNode &fbids_ = log_data_["added_participants"]; - for (auto it2 = fbids_.begin(); it2 != fbids_.end(); ++it2) { - std::string id = (*it2).as_string().substr(5); // strip "fbid:" prefix - if (!message.data.empty()) - message.data += ";"; - message.data += id; - } - } - else if (log_type == "log:unsubscribe") { - message.type = UNSUBSCRIBE; - } - else if (log_type == "log:thread-name") { - message.type = THREAD_NAME; - message.data = log_data_["name"].as_string(); - } - else if (log_type == "log:thread-image") { - message.type = THREAD_IMAGE; - } - else { - proto->debugLogA("parse_history: unknown message log type (%s) - %s", mid.as_string().c_str(), log_type.c_str()); - } - } + parseMessageType(proto, message, log_type_, log_body_, log_data_); messages->push_back(message); } diff --git a/protocols/FacebookRM/src/process.cpp b/protocols/FacebookRM/src/process.cpp index 9e47f091ee..4a64b638db 100644 --- a/protocols/FacebookRM/src/process.cpp +++ b/protocols/FacebookRM/src/process.cpp @@ -595,10 +595,12 @@ void FacebookProto::LoadHistory(void *pParam) DBEVENTINFO dbei = { 0 }; dbei.cbSize = sizeof(dbei); - if (msg.type == CALL) + 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_MESSAGE; + dbei.eventType = EVENTTYPE_URL; // FIXME: Use better and specific type for our other event types. dbei.flags = DBEF_UTF; @@ -1074,7 +1076,7 @@ void FacebookProto::ReceiveMessages(std::vector &messages, boo if (msg.type == MESSAGE) dbei.eventType = EVENTTYPE_MESSAGE; - else if (msg.type == CALL) + 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. -- cgit v1.2.3