diff options
-rw-r--r-- | protocols/FacebookRM/src/contacts.cpp | 6 | ||||
-rw-r--r-- | protocols/FacebookRM/src/entities.h | 2 | ||||
-rw-r--r-- | protocols/FacebookRM/src/json.cpp | 11 | ||||
-rw-r--r-- | protocols/FacebookRM/src/utils.cpp | 18 | ||||
-rw-r--r-- | protocols/FacebookRM/src/utils.h | 1 |
5 files changed, 28 insertions, 10 deletions
diff --git a/protocols/FacebookRM/src/contacts.cpp b/protocols/FacebookRM/src/contacts.cpp index 23a6768638..df86cac727 100644 --- a/protocols/FacebookRM/src/contacts.cpp +++ b/protocols/FacebookRM/src/contacts.cpp @@ -304,10 +304,8 @@ void FacebookProto::LoadChatInfo(facebook_chatroom *fbc) if (namesUsed > 0) fbc->chat_name += _T(", "); - std::string::size_type pos = participant.find(" "); - std::string name = (pos != std::string::npos ? participant.substr(0, pos) : participant); - - fbc->chat_name += _A2T(name.c_str(), CP_UTF8); + std::tstring tname = _A2T(participant.c_str(), CP_UTF8); + fbc->chat_name += utils::text::prepare_name(tname, true); if (++namesUsed >= FACEBOOK_CHATROOM_NAMES_COUNT) break; diff --git a/protocols/FacebookRM/src/entities.h b/protocols/FacebookRM/src/entities.h index 08f6c9bc79..68ece467e1 100644 --- a/protocols/FacebookRM/src/entities.h +++ b/protocols/FacebookRM/src/entities.h @@ -79,7 +79,7 @@ struct facebook_chatroom std::tstring chat_name; std::map<std::string, std::string> participants; - std::string message_readers; + std::tstring message_readers; time_t last_active; }; diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp index 2ab50f0590..7ef4b78518 100644 --- a/protocols/FacebookRM/src/json.cpp +++ b/protocols/FacebookRM/src/json.cpp @@ -462,16 +462,17 @@ int facebook_json_parser::parse_messages(std::string *data, std::vector< faceboo participant = participants.find(reader_id); if (participant != participants.end()) { + // TODO: remember just reader ids to avoid eventual duplication of names if (!chatroom->message_readers.empty()) - chatroom->message_readers += ", "; - chatroom->message_readers += participant->second; + chatroom->message_readers += _T(", "); + + std::tstring tname = _A2T(participant->second.c_str(), CP_UTF8); + chatroom->message_readers += utils::text::prepare_name(tname, true); MCONTACT hChatContact = proto->ChatIDToHContact(tid); if (!hChatContact) continue; - ptrT readers(mir_utf8decodeT(chatroom->message_readers.c_str())); - StatusTextData st = { 0 }; st.cbSize = sizeof(st); st.hIcon = Skin_GetIconByHandle(GetIconHandle("read")); @@ -479,7 +480,7 @@ int facebook_json_parser::parse_messages(std::string *data, std::vector< faceboo TCHAR ttime[64]; _tcsftime(ttime, SIZEOF(ttime), _T("%X"), localtime(×tamp)); - mir_sntprintf(st.tszText, SIZEOF(st.tszText), TranslateT("Message read: %s by %s"), ttime, readers); + mir_sntprintf(st.tszText, SIZEOF(st.tszText), TranslateT("Message read: %s by %s"), ttime, chatroom->message_readers.c_str()); CallService(MS_MSG_SETSTATUSTEXT, (WPARAM)hChatContact, (LPARAM)&st); } diff --git a/protocols/FacebookRM/src/utils.cpp b/protocols/FacebookRM/src/utils.cpp index f277103203..383aac5d4b 100644 --- a/protocols/FacebookRM/src/utils.cpp +++ b/protocols/FacebookRM/src/utils.cpp @@ -456,6 +456,24 @@ std::string utils::text::source_get_form_data(std::string* data) return values;
}
+std::tstring utils::text::prepare_name(const std::tstring &name, bool withSurnameLetter)
+{
+ std::tstring::size_type pos = name.find(_T(" "));
+ if (pos == std::tstring::npos)
+ return name;
+
+ std::tstring result = name.substr(0, pos);
+
+ if (withSurnameLetter) {
+ pos = name.rfind(_T(" ")) + 1; // we're sure there is some space in name so we can do +1 safely
+
+ if (pos < name.length())
+ result += _T(" ") + name.substr(pos, 1) + std::tstring(_T("."));
+ }
+
+ return result;
+}
+
std::string utils::text::rand_string(int len, const char *chars, unsigned int *number)
{
std::stringstream out;
diff --git a/protocols/FacebookRM/src/utils.h b/protocols/FacebookRM/src/utils.h index af9cf3ceed..b560b02912 100644 --- a/protocols/FacebookRM/src/utils.h +++ b/protocols/FacebookRM/src/utils.h @@ -67,6 +67,7 @@ namespace utils std::string rand_string(int len, const char *chars = "0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz", unsigned int *number = NULL);
void explode(std::string str, const std::string &separator, std::vector<std::string>* results);
void append_ordinal(unsigned long value, std::string* data);
+ std::tstring prepare_name(const std::tstring &name, bool withSurnameLetter);
};
namespace conversion
|