From 1100cf0fc0aa447cb2390409c8dcea9deebe3d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Thu, 23 May 2013 15:35:31 +0000 Subject: Facebook: Load sent messages from browser into Miranda. git-svn-id: http://svn.miranda-ng.org/main/trunk@4811 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/FacebookRM/src/client.h | 6 +++-- protocols/FacebookRM/src/common.h | 1 + protocols/FacebookRM/src/communication.cpp | 6 ++++- protocols/FacebookRM/src/json.cpp | 35 ++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/protocols/FacebookRM/src/client.h b/protocols/FacebookRM/src/client.h index 9f51ebe2f6..ce49743ea8 100644 --- a/protocols/FacebookRM/src/client.h +++ b/protocols/FacebookRM/src/client.h @@ -90,7 +90,7 @@ public: HANDLE cookies_lock_; - std::map< std::string, std::string > cookies; + std::map cookies; std::string get_newsfeed_type(); std::string get_server_type(); @@ -137,7 +137,7 @@ public: // Updates handling - List::List< facebook_user > buddies; + List::List buddies; HANDLE buddies_lock_; HANDLE send_message_lock_; @@ -149,6 +149,8 @@ public: // Messages handling + std::set messages_sent; + bool channel(); bool send_message(std::string message_recipient, std::string message_text, std::string *error_text, int method); //////////////////////////////////////////////////////////// diff --git a/protocols/FacebookRM/src/common.h b/protocols/FacebookRM/src/common.h index 3f91242fa7..2abb3a3cc0 100644 --- a/protocols/FacebookRM/src/common.h +++ b/protocols/FacebookRM/src/common.h @@ -36,6 +36,7 @@ along with this program. If not, see . #include #include #include +#include #include #include diff --git a/protocols/FacebookRM/src/communication.cpp b/protocols/FacebookRM/src/communication.cpp index 5cfd9fab99..cb2e0a3f4a 100644 --- a/protocols/FacebookRM/src/communication.cpp +++ b/protocols/FacebookRM/src/communication.cpp @@ -1164,7 +1164,11 @@ bool facebook_client::send_message(std::string message_recipient, std::string me switch (resp.error_number) { case 0: // Everything is OK - break; + { + // Remember this message id + std::string mid = utils::text::source_get_value(&resp.data, 2, "\"message_id\":\"", "\""); + messages_sent.insert(mid); + } break; //case 1356002: // You are offline - wtf?? diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp index 8d705b4323..ee1a2ed62a 100644 --- a/protocols/FacebookRM/src/json.cpp +++ b/protocols/FacebookRM/src/json.cpp @@ -310,6 +310,41 @@ int facebook_json_parser::parse_messages(void* data, std::vector< facebook_messa const Number& time_sent = messageContent["time"]; // proto->Log("????? Checking time %15.2f > %15.2f", time_sent.Value(), proto->facy.last_message_time_); + + if (was_id == proto->facy.self_.user_id) { + // ignore messages sent from Miranda + std::set::iterator it = proto->facy.messages_sent.find(message_id.Value()); + if (it != proto->facy.messages_sent.end()) { + proto->facy.messages_sent.erase(it); + continue; + } + + std::string message_text = utils::text::special_expressions_decode(utils::text::slashu_to_utf8(text.Value())); + + const Number& to = objMember["to"]; + char to_id[32]; + lltoa(to.Value(), to_id, 10); + + HANDLE hContact = proto->ContactIDToHContact(to_id); + if (!hContact) + continue; + + DBEVENTINFO dbei = {0}; + dbei.cbSize = sizeof(dbei); + dbei.eventType = EVENTTYPE_MESSAGE; + dbei.flags = DBEF_SENT | DBEF_UTF; + dbei.szModule = proto->m_szModuleName; + + bool local_time = db_get_b(NULL, proto->m_szModuleName, FACEBOOK_KEY_LOCAL_TIMESTAMP, 0) != 0; + dbei.timestamp = local_time ? ::time(NULL) : utils::time::fix_timestamp(time_sent.Value()); + + dbei.cbBlob = (DWORD)message_text.length() + 1; + dbei.pBlob = (PBYTE)message_text.c_str(); + db_event_add(hContact, &dbei); + + continue; + } + if ((messageContent.Find("truncated") != messageContent.End()) && (((const Number &)messageContent["truncated"]).Value() == 1)) { // If we got truncated message, we can ignore it, because we should get it again as "messaging" type -- cgit v1.2.3