diff --git a/libdino/src/entity/conversation.vala b/libdino/src/entity/conversation.vala index d0ba4920..47ebd5d8 100644 --- a/libdino/src/entity/conversation.vala +++ b/libdino/src/entity/conversation.vala @@ -9,7 +9,11 @@ public class Conversation : Object { public enum Type { CHAT, GROUPCHAT, - GROUPCHAT_PM + GROUPCHAT_PM; + + public bool is_muc_semantic() { + return this == GROUPCHAT || this == GROUPCHAT_PM; + } } public int id { get; set; } diff --git a/libdino/src/entity/message.vala b/libdino/src/entity/message.vala index d5697c72..e87d0e3a 100644 --- a/libdino/src/entity/message.vala +++ b/libdino/src/entity/message.vala @@ -22,7 +22,11 @@ public class Message : Object { CHAT, GROUPCHAT, GROUPCHAT_PM, - UNKNOWN + UNKNOWN; + + public bool is_muc_semantic() { + return this == GROUPCHAT || this == GROUPCHAT_PM; + } } public int id { get; set; default = -1; } @@ -74,7 +78,7 @@ public class Message : Object { if (counterpart_resource != null) counterpart = counterpart.with_resource(counterpart_resource); string our_resource = row[db.message.our_resource]; - if (type_ == Type.GROUPCHAT && our_resource != null) { + if (type_.is_muc_semantic() && our_resource != null) { ourpart = counterpart.with_resource(our_resource); } else if (our_resource != null) { ourpart = account.bare_jid.with_resource(our_resource); diff --git a/libdino/src/service/content_item_store.vala b/libdino/src/service/content_item_store.vala index 673053c5..8be4d85f 100644 --- a/libdino/src/service/content_item_store.vala +++ b/libdino/src/service/content_item_store.vala @@ -68,7 +68,7 @@ public class ContentItemStore : StreamInteractionModule, Object { try { string storage_dir = FileManager.get_storage_dir(); FileTransfer file_transfer = new FileTransfer.from_row(db, row_option.inner, storage_dir); - if (conversation.type_ in new Conversation.Type[]{Conversation.Type.GROUPCHAT, Conversation.Type.GROUPCHAT_PM}) { + if (conversation.type_.is_muc_semantic()) { try { // resourcepart wasn't set before, so we pick nickname instead (which isn't accurate if nickname is changed) file_transfer.ourpart = conversation.counterpart.with_resource(file_transfer.ourpart.resourcepart ?? conversation.nickname); diff --git a/libdino/src/service/file_manager.vala b/libdino/src/service/file_manager.vala index 7cd9aeaf..d0cabea7 100644 --- a/libdino/src/service/file_manager.vala +++ b/libdino/src/service/file_manager.vala @@ -42,7 +42,7 @@ public class FileManager : StreamInteractionModule, Object { FileTransfer file_transfer = new FileTransfer(); file_transfer.account = conversation.account; file_transfer.counterpart = conversation.counterpart; - if (conversation.type_ in new Conversation.Type[]{Conversation.Type.GROUPCHAT, Conversation.Type.GROUPCHAT_PM}) { + if (conversation.type_.is_muc_semantic()) { file_transfer.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid; } else { file_transfer.ourpart = conversation.account.full_jid; @@ -292,7 +292,7 @@ public class FileManager : StreamInteractionModule, Object { file_transfer.account = conversation.account; file_transfer.direction = from.bare_jid.equals(conversation.account.bare_jid) ? FileTransfer.DIRECTION_SENT : FileTransfer.DIRECTION_RECEIVED; file_transfer.counterpart = file_transfer.direction == FileTransfer.DIRECTION_RECEIVED ? from : conversation.counterpart; - if (conversation.type_ in new Conversation.Type[]{Conversation.Type.GROUPCHAT, Conversation.Type.GROUPCHAT_PM}) { + if (conversation.type_.is_muc_semantic()) { file_transfer.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid; } else { file_transfer.ourpart = conversation.account.full_jid; diff --git a/libdino/src/service/message_processor.vala b/libdino/src/service/message_processor.vala index a0000936..3959715d 100644 --- a/libdino/src/service/message_processor.vala +++ b/libdino/src/service/message_processor.vala @@ -530,7 +530,7 @@ public class MessageProcessor : StreamInteractionModule, Object { message.local_time = now; message.direction = Entities.Message.DIRECTION_SENT; message.counterpart = conversation.counterpart; - if (conversation.type_ in new Conversation.Type[]{Conversation.Type.GROUPCHAT, Conversation.Type.GROUPCHAT_PM}) { + if (conversation.type_.is_muc_semantic()) { message.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid; message.real_jid = conversation.account.bare_jid; } else { diff --git a/main/src/ui/util/helper.vala b/main/src/ui/util/helper.vala index 83f6b3dc..c332dcfb 100644 --- a/main/src/ui/util/helper.vala +++ b/main/src/ui/util/helper.vala @@ -146,10 +146,10 @@ public static string get_participant_display_name(StreamInteractor stream_intera } private static string? get_real_display_name(StreamInteractor stream_interactor, Account account, Jid jid, bool me_is_me = false) { - if (me_is_me && jid.equals_bare(account.bare_jid)) { - return _("Me"); - } - if (jid.equals_bare(account.bare_jid) && account.alias != null && account.alias.length != 0) { + if (jid.equals_bare(account.bare_jid)) { + if (me_is_me || account.alias == null || account.alias.length == 0) { + return _("Me"); + } return account.alias; } Roster.Item roster_item = stream_interactor.get_module(RosterManager.IDENTITY).get_roster_item(account, jid); @@ -181,16 +181,17 @@ private static string get_groupchat_display_name(StreamInteractor stream_interac return jid.to_string(); } -private static string get_occupant_display_name(StreamInteractor stream_interactor, Account account, Jid jid, bool me_is_me = false) { - /* TODO: MUC Real JID - MucManager muc_manager = stream_interactor.get_module(MucManager.IDENTITY); - if (muc_manager.is_private_room(account, jid.bare_jid)) { - Jid? real_jid = muc_manager.get_real_jid(jid, account); - if (real_jid != null) { - string? display_name = get_real_display_name(stream_interactor, account, real_jid, me_is_me); - if (display_name != null) return display_name; +private static string get_occupant_display_name(StreamInteractor stream_interactor, Account account, Jid jid, bool me_is_me = false, bool muc_real_name = false) { + if (muc_real_name) { + MucManager muc_manager = stream_interactor.get_module(MucManager.IDENTITY); + if (muc_manager.is_private_room(account, jid.bare_jid)) { + Jid? real_jid = muc_manager.get_real_jid(jid, account); + if (real_jid != null) { + string? display_name = get_real_display_name(stream_interactor, account, real_jid, me_is_me); + if (display_name != null) return display_name; + } } - }*/ + } return jid.resourcepart ?? jid.to_string(); }