From e159fd2492c28c1ef4ab64828ca0e8c2de877b41 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Fri, 3 Jul 2020 21:14:39 +0200 Subject: Only query entity caps when we need them --- .../conversation_selector_row.vala | 90 +++++++++++----------- main/src/ui/conversation_view_controller.vala | 47 ++++++----- 2 files changed, 74 insertions(+), 63 deletions(-) (limited to 'main/src') diff --git a/main/src/ui/conversation_selector/conversation_selector_row.vala b/main/src/ui/conversation_selector/conversation_selector_row.vala index 3e0c1349..07e3f831 100644 --- a/main/src/ui/conversation_selector/conversation_selector_row.vala +++ b/main/src/ui/conversation_selector/conversation_selector_row.vala @@ -271,50 +271,54 @@ public class ConversationSelectorRow : ListBoxRow { Jid full_jid = full_jids[i]; string? show = stream_interactor.get_module(PresenceManager.IDENTITY).get_last_show(full_jid, conversation.account); if (show == null) continue; - Xep.ServiceDiscovery.Identity? identity = stream_interactor.get_module(EntityInfo.IDENTITY).get_identity(conversation.account, full_jid); - Image image = new Image() { hexpand=false, valign=Align.CENTER, visible=true }; - if (identity != null && (identity.type_ == Xep.ServiceDiscovery.Identity.TYPE_PHONE || identity.type_ == Xep.ServiceDiscovery.Identity.TYPE_TABLET)) { - image.set_from_icon_name("dino-device-phone-symbolic", IconSize.SMALL_TOOLBAR); - } else { - image.set_from_icon_name("dino-device-desktop-symbolic", IconSize.SMALL_TOOLBAR); - } - - if (show == Presence.Stanza.SHOW_AWAY) { - Util.force_color(image, "#FF9800"); - } else if (show == Presence.Stanza.SHOW_XA || show == Presence.Stanza.SHOW_DND) { - Util.force_color(image, "#FF5722"); - } else { - Util.force_color(image, "#4CAF50"); - } - - string? status = null; - if (show == Presence.Stanza.SHOW_AWAY) { - status = "away"; - } else if (show == Presence.Stanza.SHOW_XA) { - status = "not available"; - } else if (show == Presence.Stanza.SHOW_DND) { - status = "do not disturb"; - } - - var sb = new StringBuilder(); - if (identity != null && identity.name != null) { - sb.append(identity.name); - } else if (full_jid.resourcepart != null && dino_resource_regex.match(full_jid.resourcepart)) { - sb.append("Dino"); - } else if (full_jid.resourcepart != null) { - sb.append(full_jid.resourcepart); - } else { - continue; - } - if (status != null) { - sb.append(" (").append(status).append(")"); - } - - Label resource = new Label(sb.str) { use_markup=true, hexpand=true, xalign=0, visible=true }; - - grid.attach(image, 0, i + 1, 1, 1); - grid.attach(resource, 1, i + 1, 1, 1); + int i_cache = i; + stream_interactor.get_module(EntityInfo.IDENTITY).get_identity.begin(conversation.account, full_jid, (_, res) => { + Xep.ServiceDiscovery.Identity? identity = stream_interactor.get_module(EntityInfo.IDENTITY).get_identity.end(res); + + Image image = new Image() { hexpand=false, valign=Align.CENTER, visible=true }; + if (identity != null && (identity.type_ == Xep.ServiceDiscovery.Identity.TYPE_PHONE || identity.type_ == Xep.ServiceDiscovery.Identity.TYPE_TABLET)) { + image.set_from_icon_name("dino-device-phone-symbolic", IconSize.SMALL_TOOLBAR); + } else { + image.set_from_icon_name("dino-device-desktop-symbolic", IconSize.SMALL_TOOLBAR); + } + + if (show == Presence.Stanza.SHOW_AWAY) { + Util.force_color(image, "#FF9800"); + } else if (show == Presence.Stanza.SHOW_XA || show == Presence.Stanza.SHOW_DND) { + Util.force_color(image, "#FF5722"); + } else { + Util.force_color(image, "#4CAF50"); + } + + string? status = null; + if (show == Presence.Stanza.SHOW_AWAY) { + status = "away"; + } else if (show == Presence.Stanza.SHOW_XA) { + status = "not available"; + } else if (show == Presence.Stanza.SHOW_DND) { + status = "do not disturb"; + } + + var sb = new StringBuilder(); + if (identity != null && identity.name != null) { + sb.append(identity.name); + } else if (full_jid.resourcepart != null && dino_resource_regex.match(full_jid.resourcepart)) { + sb.append("Dino"); + } else if (full_jid.resourcepart != null) { + sb.append(full_jid.resourcepart); + } else { + return; + } + if (status != null) { + sb.append(" (").append(status).append(")"); + } + + Label resource = new Label(sb.str) { use_markup=true, hexpand=true, xalign=0, visible=true }; + + grid.attach(image, 0, i_cache + 1, 1, 1); + grid.attach(resource, 1, i_cache + 1, 1, 1); + }); } return grid; } diff --git a/main/src/ui/conversation_view_controller.vala b/main/src/ui/conversation_view_controller.vala index 831aae73..b2be8ed8 100644 --- a/main/src/ui/conversation_view_controller.vala +++ b/main/src/ui/conversation_view_controller.vala @@ -93,9 +93,12 @@ public class ConversationViewController : Object { AccelGroup accel_group = new AccelGroup(); accel_group.connect(Gdk.Key.U, ModifierType.CONTROL_MASK, AccelFlags.VISIBLE, () => { - if (conversation != null && stream_interactor.get_module(FileManager.IDENTITY).is_upload_available(conversation)) { - open_file_picker(); - } + if (conversation == null) return false; + stream_interactor.get_module(FileManager.IDENTITY).is_upload_available.begin(conversation, (_, res) => { + if (stream_interactor.get_module(FileManager.IDENTITY).is_upload_available.end(res)) { + open_file_picker(); + } + }); return false; }); ((Gtk.Window)view.get_toplevel()).add_accel_group(accel_group); @@ -138,13 +141,15 @@ public class ConversationViewController : Object { } private void update_file_upload_status() { - bool upload_available = stream_interactor.get_module(FileManager.IDENTITY).is_upload_available(conversation); - chat_input_controller.set_file_upload_active(upload_available); - if (upload_available && overlay_dialog == null) { - Gtk.drag_dest_set(view, DestDefaults.ALL, target_list, Gdk.DragAction.COPY); - } else { - Gtk.drag_dest_unset(view); - } + stream_interactor.get_module(FileManager.IDENTITY).is_upload_available.begin(conversation, (_, res) => { + bool upload_available = stream_interactor.get_module(FileManager.IDENTITY).is_upload_available.end(res); + chat_input_controller.set_file_upload_active(upload_available); + if (upload_available && overlay_dialog == null) { + Gtk.drag_dest_set(view, DestDefaults.ALL, target_list, Gdk.DragAction.COPY); + } else { + Gtk.drag_dest_unset(view); + } + }); } private void update_conversation_display_name() { @@ -212,18 +217,20 @@ public class ConversationViewController : Object { FileSendOverlay overlay = new FileSendOverlay(file, file_info); overlay.send_file.connect(() => send_file(file)); - HashMap limits = stream_interactor.get_module(FileManager.IDENTITY).get_file_size_limits(conversation); - bool something_works = false; - foreach (var limit in limits.values) { - if (limit >= file_info.get_size()) { - something_works = true; + stream_interactor.get_module(FileManager.IDENTITY).get_file_size_limits.begin(conversation, (_, res) => { + HashMap limits = stream_interactor.get_module(FileManager.IDENTITY).get_file_size_limits.end(res); + bool something_works = false; + foreach (var limit in limits.values) { + if (limit >= file_info.get_size()) { + something_works = true; + } } - } - if (!something_works && limits.has_key(0)) { - if (!something_works && file_info.get_size() > limits[0]) { - overlay.set_file_too_large(); + if (!something_works && limits.has_key(0)) { + if (!something_works && file_info.get_size() > limits[0]) { + overlay.set_file_too_large(); + } } - } + }); overlay.close.connect(() => { // We don't want drag'n'drop to be active while the overlay is active -- cgit v1.2.3-54-g00ecf