[geary/mjog/email-plugins: 10/13] Plugin.EmailStore: Add email-displayed signal
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/mjog/email-plugins: 10/13] Plugin.EmailStore: Add email-displayed signal
- Date: Sun, 22 Mar 2020 13:38:58 +0000 (UTC)
commit 4101fd2fd772e1f610b71f2a3f0b4ac1f2e3be46
Author: Michael Gratton <mike vee net>
Date: Mon Mar 23 00:00:58 2020 +1100
Plugin.EmailStore: Add email-displayed signal
Ensure the signal is emitted whenever an email in the conversation
viewer is displayed fully (i.e. expanded).
src/client/application/application-controller.vala | 15 ++++++++++++++-
src/client/application/application-email-context.vala | 11 ++++++++++-
src/client/application/application-main-window.vala | 9 +++++++++
.../application/application-notification-context.vala | 11 ++++++++++-
src/client/conversation-viewer/conversation-list-box.vala | 8 ++++++++
src/client/plugin/plugin-email-store.vala | 3 +++
6 files changed, 54 insertions(+), 3 deletions(-)
---
diff --git a/src/client/application/application-controller.vala
b/src/client/application/application-controller.vala
index ec892c5e..28d80331 100644
--- a/src/client/application/application-controller.vala
+++ b/src/client/application/application-controller.vala
@@ -1283,7 +1283,7 @@ internal class Application.Controller : Geary.BaseObject {
}
/** Clears new message counts in notification plugin contexts. */
- public void clear_new_messages(Geary.Folder source,
+ internal void clear_new_messages(Geary.Folder source,
Gee.Set<Geary.App.Conversation> visible) {
foreach (MainWindow window in this.application.get_main_windows()) {
window.folder_list.set_has_new(source, false);
@@ -1294,6 +1294,19 @@ internal class Application.Controller : Geary.BaseObject {
}
}
+ /** Notifies plugins of new email being displayed. */
+ internal void email_loaded(Geary.AccountInformation account,
+ Geary.Email loaded) {
+ foreach (NotificationContext plugin in
+ this.plugins.get_notification_contexts()) {
+ plugin.email_displayed(account, loaded);
+ }
+ foreach (EmailContext plugin in
+ this.plugins.get_email_contexts()) {
+ plugin.email_displayed(account, loaded);
+ }
+ }
+
/** Displays a composer on the last active main window. */
internal void show_composer(Composer.Widget composer,
Gee.Collection<Geary.EmailIdentifier>? refers_to,
diff --git a/src/client/application/application-email-context.vala
b/src/client/application/application-email-context.vala
index a79cd5bb..759ff815 100644
--- a/src/client/application/application-email-context.vala
+++ b/src/client/application/application-email-context.vala
@@ -66,9 +66,18 @@ internal class Application.EmailContext :
}
}
+ internal void email_displayed(Geary.AccountInformation account,
+ Geary.Email email) {
+ this.email.email_displayed(
+ this.email_factory.to_plugin_email(email, account)
+ );
+ }
+
internal void email_sent(Geary.AccountInformation account,
Geary.Email email) {
- this.email.email_sent(email_factory.to_plugin_email(email, account));
+ this.email.email_sent(
+ this.email_factory.to_plugin_email(email, account)
+ );
}
internal void destroy() {
diff --git a/src/client/application/application-main-window.vala
b/src/client/application/application-main-window.vala
index cafb5e24..d4189970 100644
--- a/src/client/application/application-main-window.vala
+++ b/src/client/application/application-main-window.vala
@@ -2062,6 +2062,7 @@ public class Application.MainWindow :
}
private void on_conversation_view_added(ConversationListBox list) {
+ list.email_loaded.connect(on_email_loaded);
list.mark_email.connect(on_email_mark);
list.reply_to_all_email.connect(on_email_reply_to_all);
list.reply_to_sender_email.connect(on_email_reply_to_sender);
@@ -2457,6 +2458,14 @@ public class Application.MainWindow :
// Individual conversation email view action callbacks
+ private void on_email_loaded(ConversationListBox view,
+ Geary.Email loaded) {
+ this.controller.email_loaded(
+ view.conversation.base_folder.account.information,
+ loaded
+ );
+ }
+
private void on_email_mark(ConversationListBox view,
Gee.Collection<Geary.EmailIdentifier> messages,
Geary.NamedFlag? to_add,
diff --git a/src/client/application/application-notification-context.vala
b/src/client/application/application-notification-context.vala
index c98bc752..1587b049 100644
--- a/src/client/application/application-notification-context.vala
+++ b/src/client/application/application-notification-context.vala
@@ -206,9 +206,18 @@ internal class Application.NotificationContext :
this.email_factory.destroy_email_store(this.email);
}
+ internal void email_displayed(Geary.AccountInformation account,
+ Geary.Email email) {
+ this.email.email_displayed(
+ this.email_factory.to_plugin_email(email, account)
+ );
+ }
+
internal void email_sent(Geary.AccountInformation account,
Geary.Email email) {
- this.email.email_sent(email_factory.to_plugin_email(email, account));
+ this.email.email_sent(
+ this.email_factory.to_plugin_email(email, account)
+ );
}
internal void clear_new_messages(Geary.Folder location,
diff --git a/src/client/conversation-viewer/conversation-list-box.vala
b/src/client/conversation-viewer/conversation-list-box.vala
index 8162efed..8915562a 100644
--- a/src/client/conversation-viewer/conversation-list-box.vala
+++ b/src/client/conversation-viewer/conversation-list-box.vala
@@ -296,6 +296,9 @@ public class ConversationListBox : Gtk.ListBox, Geary.BaseInterface {
// to appropriate times to try to do that scroll.
public signal void should_scroll();
+ // Emitted when an email is loaded for the first time
+ public signal void email_loaded(Geary.Email email);
+
protected ConversationRow(Geary.Email? email) {
base_ref();
@@ -379,6 +382,7 @@ public class ConversationListBox : Gtk.ListBox, Geary.BaseInterface {
update_row_expansion();
if (this.view.message_body_state == NOT_STARTED) {
yield this.view.load_body();
+ email_loaded(this.view.email);
}
}
@@ -579,6 +583,9 @@ public class ConversationListBox : Gtk.ListBox, Geary.BaseInterface {
this.mark_read_timer.start();
}
+ /** Fired when an email is fully loaded in the list box. */
+ public signal void email_loaded(Geary.Email email);
+
/** Fired when the user clicks "reply" in the message menu. */
public signal void reply_to_sender_email(Geary.Email email, string? quote);
@@ -1103,6 +1110,7 @@ public class ConversationListBox : Gtk.ListBox, Geary.BaseInterface {
});
EmailRow row = new EmailRow(view);
+ row.email_loaded.connect((e) => { email_loaded(e); });
this.email_rows.set(email.id, row);
if (append_row) {
diff --git a/src/client/plugin/plugin-email-store.vala b/src/client/plugin/plugin-email-store.vala
index b2638857..d36eada8 100644
--- a/src/client/plugin/plugin-email-store.vala
+++ b/src/client/plugin/plugin-email-store.vala
@@ -15,6 +15,9 @@
public interface Plugin.EmailStore : Geary.BaseObject {
+ /** Emitted when an email has been displayed in the UI. */
+ public signal void email_displayed(Email sent);
+
/** Emitted when an email has been sent. */
public signal void email_sent(Email sent);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]