From d8e0ab406cdad73edf79123e84d0013b96a3963a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 4 Dec 2018 10:21:24 +0100 Subject: display groups w/o name by list of members For members-only, non-anonymous groups that do not have a name set we now show an automatically generated name that is generated from the list of members (offline, and online). Only the first name (before the first space) is used to keep the generated name short. The term *private room* is coined as a short hand for members only&non-anon group chats. This commit also uses the offline members list instead of the online member list to generate avatar tiles (also only in members-only, non-anon groups.) --- main/src/ui/avatar_image.vala | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'main/src/ui/avatar_image.vala') diff --git a/main/src/ui/avatar_image.vala b/main/src/ui/avatar_image.vala index bf6cb9f4..f6140c26 100644 --- a/main/src/ui/avatar_image.vala +++ b/main/src/ui/avatar_image.vala @@ -194,6 +194,7 @@ public class AvatarImage : Misc { stream_interactor.get_module(AvatarManager.IDENTITY).received_avatar.disconnect(on_received_avatar); stream_interactor.connection_manager.connection_state_changed.disconnect(on_connection_changed); stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.disconnect(on_roster_updated); + stream_interactor.get_module(MucManager.IDENTITY).private_room_occupant_updated.disconnect(on_occupant_updated); } } @@ -205,10 +206,16 @@ public class AvatarImage : Misc { stream_interactor.get_module(AvatarManager.IDENTITY).received_avatar.connect(on_received_avatar); stream_interactor.connection_manager.connection_state_changed.connect(on_connection_changed); stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect(on_roster_updated); + stream_interactor.get_module(MucManager.IDENTITY).private_room_occupant_updated.connect(on_occupant_updated); } if (muc_manager.is_groupchat(jid_, account) && avatar_manager.get_avatar(account, jid_) == null) { // Groupchat without avatar - Gee.List? occupants = muc_manager.get_other_occupants(jid_, account); + Gee.List? occupants; + if (muc_manager.is_private_room(account, jid_)) { + occupants = muc_manager.get_other_offline_members(jid_, account); + } else { + occupants = muc_manager.get_other_occupants(jid_, account); + } jid = jid_; if (occupants == null || occupants.size == 0) { if (force_update || current_jids.length != 1 || !current_jids[0].equals(jid_) || gray != (allow_gray && (occupants == null || !is_self_online()))) { @@ -292,6 +299,12 @@ public class AvatarImage : Misc { set_jid(stream_interactor, this.jid, account, true); } + private void on_occupant_updated(Account account, Jid room, Jid occupant) { + if (!account.equals(this.account)) return; + if (!room.equals_bare(this.jid)) return; + set_jid(stream_interactor, this.jid, account, true); + } + private bool is_self_online() { return stream_interactor.connection_manager.get_state(account) == ConnectionManager.ConnectionState.CONNECTED; } -- cgit v1.2.3-54-g00ecf