From a24c54b1c68eac0bc187a60192b6691912b34472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Wed, 15 May 2013 15:54:01 +0000 Subject: Facebook: Show info in statusbar when user read your message. git-svn-id: http://svn.miranda-ng.org/main/trunk@4662 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/FacebookRM/src/json.cpp | 23 +++++++++++++++++++++-- protocols/FacebookRM/src/utils.cpp | 5 +++++ protocols/FacebookRM/src/utils.h | 5 +++-- 3 files changed, 29 insertions(+), 4 deletions(-) (limited to 'protocols') diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp index 1c67e55dcd..4da26c5d93 100644 --- a/protocols/FacebookRM/src/json.cpp +++ b/protocols/FacebookRM/src/json.cpp @@ -329,11 +329,30 @@ int facebook_json_parser::parse_messages(void* data, std::vector< facebook_messa proto->Log(msg.c_str()); } } - else if (type.Value() == "messaging") // inbox message (multiuser or direct) + else if (type.Value() == "messaging") { const String& type = objMember["event"]; - if (type.Value() == "deliver") { + if (type.Value() == "read_receipt") { + // user read message + const Number& reader = objMember["reader"]; + const Number& time = objMember["time"]; + + char user_id[32]; + lltoa(reader.Value(), user_id, 10); + + // TODO: add check for chat contacts + HANDLE hContact = proto->ContactIDToHContact(user_id); + if (hContact) { + TCHAR ttime[100], tstr[200]; + _tcsftime(ttime, SIZEOF(ttime), _T("%X"), utils::conversion::fbtime_to_timeinfo(time.Value())); + mir_sntprintf(tstr, SIZEOF(tstr), TranslateT("Message read at %s"), ttime); + + CallService(MS_MSG_SETSTATUSTEXT, (WPARAM)hContact, (LPARAM)tstr); + } + + } else if (type.Value() == "deliver") { + // inbox message (multiuser or direct) const Object& messageContent = objMember["message"]; const Number& sender_fbid = messageContent["sender_fbid"]; diff --git a/protocols/FacebookRM/src/utils.cpp b/protocols/FacebookRM/src/utils.cpp index a7d22d441d..46c56cafd1 100644 --- a/protocols/FacebookRM/src/utils.cpp +++ b/protocols/FacebookRM/src/utils.cpp @@ -71,6 +71,11 @@ DWORD utils::conversion::to_timestamp(std::string data) return timestamp; } +struct tm *utils::conversion::fbtime_to_timeinfo(double timestamp) { + time_t time = utils::time::fix_timestamp(timestamp); + return localtime(&time); +} + std::string utils::conversion::to_string(void* data, WORD type) { std::stringstream out; diff --git a/protocols/FacebookRM/src/utils.h b/protocols/FacebookRM/src/utils.h index 9918eb917f..f0b3b68d96 100644 --- a/protocols/FacebookRM/src/utils.h +++ b/protocols/FacebookRM/src/utils.h @@ -99,8 +99,9 @@ namespace utils namespace conversion { DWORD to_timestamp(std::string data); - std::string to_string(void*, WORD type); - + struct tm *fbtime_to_timeinfo(double timestamp); + std::string to_string(void*, WORD type); + template bool from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)) { std::istringstream iss(s); -- cgit v1.2.3