From 769000b8f979fd2c4d7cd87fb83cf08912eb90dc Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 3 Oct 2020 11:07:11 +0200 Subject: Matrix: use correct name for private chat rooms, move 4chan comment input to the top --- src/plugins/Matrix.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/plugins/Matrix.cpp') diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp index 48d29eb..8796729 100644 --- a/src/plugins/Matrix.cpp +++ b/src/plugins/Matrix.cpp @@ -573,6 +573,26 @@ namespace QuickMedia { return user_id.substr(1, index - 1); } + static std::string combine_user_display_names_for_room_name(const std::string &my_user_id, const std::vector &user_info, const std::string &fallback_user_id) { + std::vector users_excluding_me; + for(const UserInfo &user : user_info) { + if(user.user_id != my_user_id) { + users_excluding_me.push_back(&user); + } + } + + std::string result; + if(users_excluding_me.size() == 0) + result = extract_user_name_from_user_id(fallback_user_id); + else if(users_excluding_me.size() == 1) + result = users_excluding_me[0]->display_name; + else if(users_excluding_me.size() == 2) + result = users_excluding_me[0]->display_name + " and " + users_excluding_me[1]->display_name; + else if(users_excluding_me.size() > 2) + result = users_excluding_me[0]->display_name + ", " + users_excluding_me[1]->display_name + " and " + std::to_string(users_excluding_me.size() - 2) + " other(s)"; + return result; + } + void Matrix::events_set_room_name(const Json::Value &events_json, RoomData *room_data) { if(!events_json.isArray()) return; @@ -613,7 +633,7 @@ namespace QuickMedia { continue; if(room_data->name.empty()) - room_data->name = extract_user_name_from_user_id(creator_json.asString()); + room_data->name = combine_user_display_names_for_room_name(user_id, room_data->user_info, creator_json.asString()); if(room_data->avatar_url.empty()) { auto user_it = room_data->user_info_by_user_id.find(creator_json.asString()); -- cgit v1.2.3