diff --git a/libdino/src/service/message_storage.vala b/libdino/src/service/message_storage.vala index 4dbc05a7..7bf03b08 100644 --- a/libdino/src/service/message_storage.vala +++ b/libdino/src/service/message_storage.vala @@ -108,16 +108,6 @@ public class MessageStorage : StreamInteractionModule, Object { return null; } - public Conversation? get_conversation_for_stanza_id(Account account, string stanza_id) { - foreach (Conversation conversation in messages.keys) { - if (!conversation.account.equals(account)) continue; - foreach (Message message in messages[conversation]) { - if (message.stanza_id == stanza_id) return conversation; - } - } - return null; - } - private void init_conversation(Conversation conversation) { if (!messages.has_key(conversation)) { messages[conversation] = new Gee.TreeSet((a, b) => { diff --git a/main/src/ui/chat_input/occupants_tab_completer.vala b/main/src/ui/chat_input/occupants_tab_completer.vala index ab1b75e0..6d2a7434 100644 --- a/main/src/ui/chat_input/occupants_tab_completer.vala +++ b/main/src/ui/chat_input/occupants_tab_completer.vala @@ -86,13 +86,14 @@ public class OccupantsTabCompletor { } } - private Gee.List generate_completions_from_messages() { + private Gee.List generate_completions_from_messages(string? prefix = null) { Gee.List ret = new ArrayList(); - Gee.List messages = stream_interactor.get_module(MessageStorage.IDENTITY).get_messages(conversation, 10); - for (int i = messages.size - 1; i > 0; i--) { - string resourcepart = messages[i].from.resourcepart; + Gee.List content_items = stream_interactor.get_module(ContentItemStore.IDENTITY).get_n_latest(conversation, 10); + for (int i = content_items.size - 1; i > 0; i--) { + string resourcepart = content_items[i].jid.resourcepart; Jid? own_nick = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); if (resourcepart != null && resourcepart != "" && (own_nick == null || resourcepart != own_nick.resourcepart) && !ret.contains(resourcepart)) { + if (prefix != null && !resourcepart.to_string().down().has_prefix(prefix.down())) continue; ret.add(resourcepart); } } @@ -100,20 +101,8 @@ public class OccupantsTabCompletor { } private Gee.List generate_completions_from_occupants(string prefix) { - Gee.List ret = new ArrayList(); - // First suggest nicks that have recently writen something - Gee.List messages = stream_interactor.get_module(MessageStorage.IDENTITY).get_messages(conversation, 50); - for (int i = messages.size - 1; i > 0; i--) { - string resourcepart = messages[i].from.resourcepart; - Jid? own_nick = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); - if (resourcepart != null && resourcepart != "" && - resourcepart.to_string().down().has_prefix(prefix.down()) && - (own_nick == null || resourcepart != own_nick.resourcepart) && - !ret.contains(resourcepart)) { - ret.add(resourcepart.to_string()); - } - } + Gee.List ret = generate_completions_from_messages(prefix); // Then, suggest other nicks in alphabetical order Gee.List? occupants = stream_interactor.get_module(MucManager.IDENTITY).get_other_occupants(conversation.counterpart, conversation.account);