[geary/wip/135-contact-popovers: 23/26] Start loading remote images if pref enabled via sender's contact popover
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/wip/135-contact-popovers: 23/26] Start loading remote images if pref enabled via sender's contact popover
- Date: Mon, 8 Apr 2019 00:28:54 +0000 (UTC)
commit 53f0686cef3f11f9372acce72fd65a015bf9f5a9
Author: Michael Gratton <mike vee net>
Date: Tue Mar 26 22:45:33 2019 +1100
Start loading remote images if pref enabled via sender's contact popover
src/client/application/application-contact.vala | 30 ++++++++++++++++++++++
.../conversation-contact-popover.vala | 5 ++++
.../conversation-viewer/conversation-message.vala | 11 +++++---
3 files changed, 43 insertions(+), 3 deletions(-)
---
diff --git a/src/client/application/application-contact.vala b/src/client/application/application-contact.vala
index a0595db9..40249834 100644
--- a/src/client/application/application-contact.vala
+++ b/src/client/application/application-contact.vala
@@ -95,6 +95,36 @@ public class Application.Contact : Geary.BaseObject {
update_individual(null);
}
+ /**
+ * Determines if this contact is equal to another.
+ *
+ * Returns true if the other contact has the same Folks
+ * individual, engine contact, or if none of the above display
+ * name.
+ */
+ public bool equal_to(Contact? other) {
+ if (other == null) {
+ return false;
+ }
+ if (this == other) {
+ return true;
+ }
+
+ if (this.individual != null) {
+ return (
+ other.individual != null &&
+ this.individual.id == other.individual.id
+ );
+ } else if (this.contact != null) {
+ return (
+ other.contact != null &&
+ this.contact.email == other.contact.email
+ );
+ }
+
+ return (this.display_name == other.display_name);
+ }
+
/** Invokes the desktop contacts application to save this contact. */
public async void save_to_desktop(GLib.Cancellable? cancellable)
throws GLib.Error {
diff --git a/src/client/conversation-viewer/conversation-contact-popover.vala
b/src/client/conversation-viewer/conversation-contact-popover.vala
index b22dc697..f7a95523 100644
--- a/src/client/conversation-viewer/conversation-contact-popover.vala
+++ b/src/client/conversation-viewer/conversation-contact-popover.vala
@@ -68,6 +68,10 @@ public class Conversation.ContactPopover : Gtk.Popover {
private GLib.SimpleActionGroup actions = new GLib.SimpleActionGroup();
+ /** Fired when the remote resources load pref changes */
+ public signal void load_remote_resources_changed(bool enabled);
+
+
public ContactPopover(Gtk.Widget relative_to,
Application.Contact contact,
Geary.RFC822.MailboxAddress mailbox) {
@@ -178,6 +182,7 @@ public class Conversation.ContactPopover : Gtk.Popover {
private async void set_load_remote_resources(bool enabled) {
try {
yield this.contact.set_remote_resource_loading(enabled, null);
+ load_remote_resources_changed(enabled);
} catch (GLib.Error err) {
debug("Failed to set load remote resources for contact %s:, %s",
this.contact.to_string(), err.message);
diff --git a/src/client/conversation-viewer/conversation-message.vala
b/src/client/conversation-viewer/conversation-message.vala
index a61db46d..ce8588d0 100644
--- a/src/client/conversation-viewer/conversation-message.vala
+++ b/src/client/conversation-viewer/conversation-message.vala
@@ -964,6 +964,7 @@ public class ConversationMessage : Gtk.Grid, Geary.BaseInterface {
private void show_images(bool remember) {
start_progress_loading();
+ this.remote_images_infobar.hide();
this.load_remote_resources = true;
this.remote_resources_requested = 0;
this.remote_resources_loaded = 0;
@@ -1065,6 +1066,12 @@ public class ConversationMessage : Gtk.Grid, Geary.BaseInterface {
);
popover.load_avatar.begin();
popover.set_position(Gtk.PositionType.BOTTOM);
+ popover.load_remote_resources_changed.connect((enabled) => {
+ if (this.primary_contact.equal_to(address_child.contact) &&
+ enabled) {
+ show_images(false);
+ }
+ });
popover.closed.connect(() => {
address_child.unset_state_flags(Gtk.StateFlags.ACTIVE);
});
@@ -1196,11 +1203,9 @@ public class ConversationMessage : Gtk.Grid, Geary.BaseInterface {
}
break;
default:
- // Pass
+ this.remote_images_infobar.hide();
break;
}
-
- remote_images_infobar.hide();
}
private void on_copy_link(Variant? param) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]