[geary/wip/766133-gnotification: 3/13] Migrated from libnotify to GLib notifications. bug 766133
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/wip/766133-gnotification: 3/13] Migrated from libnotify to GLib notifications. bug 766133
- Date: Sun, 14 Apr 2019 12:03:44 +0000 (UTC)
commit 5cc36b371cff101f4157b716326256361547a114
Author: Niels De Graef <nielsdegraef gmail com>
Date: Tue May 24 00:20:12 2016 +0200
Migrated from libnotify to GLib notifications. bug 766133
Signed-off-by: Niels De Graef <nielsdegraef gmail com>
.gitlab-ci.yml | 9 +--
INSTALL | 9 +--
bindings/vapi/libnotify.vapi | 73 ------------------
meson.build | 1 -
po/POTFILES.in | 2 +-
src/client/application/geary-controller.vala | 33 ++++----
src/client/meson.build | 3 +-
.../{libnotify.vala => glib-notification.vala} | 89 ++++++----------------
src/client/notification/new-messages-monitor.vala | 2 +-
9 files changed, 48 insertions(+), 173 deletions(-)
---
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index be8902da..2309854d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -26,8 +26,8 @@ variables:
glib2-devel gmime-devel gnome-online-accounts-devel
gtk3-devel iso-codes-devel json-glib-devel itstool
libcanberra-devel libgee-devel libhandy-devel
- libnotify-devel libsecret-devel libunwind-devel
- libxml2-devel sqlite-devel webkitgtk4-devel
+ libsecret-devel libunwind-devel libxml2-devel
+ sqlite-devel webkitgtk4-devel
FEDORA_TEST_DEPS: Xvfb tar xz
# Ubuntu packages
@@ -37,9 +37,8 @@ variables:
libgcr-3-dev libgee-0.8-dev libglib2.0-dev
libgmime-2.6-dev libgoa-1.0-dev libgtk-3-dev
libhandy-0.0-dev libjson-glib-dev libmessaging-menu-dev
- libnotify-dev libsecret-1-dev libsqlite3-dev
- libunity-dev libunwind-dev libwebkit2gtk-4.0-dev
- libxml2-dev
+ libsecret-1-dev libsqlite3-dev libunity-dev
+ libunwind-dev libwebkit2gtk-4.0-dev libxml2-dev
UBUNTU_TEST_DEPS: xauth xvfb
fedora:
diff --git a/INSTALL b/INSTALL
index a9ee7066..7da612ca 100644
--- a/INSTALL
+++ b/INSTALL
@@ -44,8 +44,8 @@ Install them by running this command:
desktop-file-utils enchant2-devel folks-devel gcr-devel \
glib2-devel gmime-devel gnome-online-accounts-devel gtk3-devel \
iso-codes-devel json-glib-devel libcanberra-devel \
- libgee-devel libhandy-devel libnotify-devel libsecret-devel \
- libunwind-devel libxml2-devel sqlite-devel webkitgtk4-devel
+ libgee-devel libhandy-devel libsecret-devel \ libunwind-devel
+ libxml2-devel sqlite-devel webkitgtk4-devel
Installing dependencies on Ubuntu/Debian
----------------------------------------
@@ -56,9 +56,8 @@ Install them by running this command:
desktop-file-utils iso-codes gettext libcanberra-dev \
libenchant-dev libfolks-dev libgcr-3-dev libgee-0.8-dev \
libglib2.0-dev libgmime-2.6-dev libgoa-1.0-dev libgtk-3-dev \
- libjson-glib-dev libhandy-dev libnotify-dev libsecret-1-dev \
- libsqlite3-dev libunwind-dev libwebkit2gtk-4.0-dev \
- libxml2-dev
+ libjson-glib-dev libhandy-dev libsecret-1-dev \ libsqlite3-dev
+ libunwind-dev libwebkit2gtk-4.0-dev \ libxml2-dev
And for Ubuntu Unity integration:
diff --git a/meson.build b/meson.build
index 80c73f12..2cf47fc2 100644
--- a/meson.build
+++ b/meson.build
@@ -69,7 +69,6 @@ json_glib = dependency('json-glib-1.0', version: '>= 1.0')
libcanberra = dependency('libcanberra', version: '>= 0.28')
libhandy = dependency('libhandy-0.0', version: '>= 0.0.9')
libmath = cc.find_library('m')
-libnotify = dependency('libnotify', version: '>= 0.7.5')
libsecret = dependency('libsecret-1', version: '>= 0.11')
libsoup = dependency('libsoup-2.4', version: '>= 2.48')
libunwind_dep = dependency(
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 69c71b39..6025091a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -80,7 +80,7 @@ src/client/folder-list/folder-list-special-grouping.vala
src/client/folder-list/folder-list-tree.vala
src/client/notification/in-app-notification.vala
src/client/notification/libmessagingmenu.vala
-src/client/notification/libnotify.vala
+src/client/notification/glib-notification.vala
src/client/notification/new-messages-indicator.vala
src/client/notification/new-messages-monitor.vala
src/client/notification/null-indicator.vala
diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala
index e9104451..21c5fad7 100644
--- a/src/client/application/geary-controller.vala
+++ b/src/client/application/geary-controller.vala
@@ -157,7 +157,7 @@ public class GearyController : Geary.BaseObject {
private NewMessagesMonitor? new_messages_monitor = null;
private NewMessagesIndicator? new_messages_indicator = null;
private UnityLauncher? unity_launcher = null;
- private Libnotify? libnotify = null;
+ private GLibNotification? gLibNotification = null;
private uint select_folder_timeout_id = 0;
private int64 next_folder_select_allowed_usec = 0;
private Geary.Nonblocking.Mutex select_folder_mutex = new Geary.Nonblocking.Mutex();
@@ -328,8 +328,7 @@ public class GearyController : Geary.BaseObject {
unity_launcher = new UnityLauncher(new_messages_monitor);
- this.libnotify = new Libnotify(this.new_messages_monitor);
- this.libnotify.invoked.connect(on_libnotify_invoked);
+ gLibNotification = new GLibNotification(new_messages_monitor);
this.main_window.conversation_list_view.grab_focus();
@@ -443,7 +442,7 @@ public class GearyController : Geary.BaseObject {
}
// Release monitoring early so held resources can be freed up
- this.libnotify = null;
+ this.gLibNotification = null;
this.new_messages_indicator = null;
this.unity_launcher = null;
this.new_messages_monitor.clear_folders();
@@ -703,6 +702,15 @@ public class GearyController : Geary.BaseObject {
info_bar.retry.connect(on_retry_problem);
this.main_window.show_infobar(info_bar);
}
+
+ Geary.ServiceProblemReport? service_report =
+ report as Geary.ServiceProblemReport;
+ if (service_report != null && service_report.service.protocol == SMTP) {
+ gLibNotification.set_error_notification(
+ _("Error sending email"),
+ _("Geary encountered an error sending an email. If the problem persists, please manually
delete the email from your Outbox folder.")
+ );
+ }
}
private void update_account_status() {
@@ -897,7 +905,7 @@ public class GearyController : Geary.BaseObject {
if (folder.special_folder_type == Geary.SpecialFolderType.OUTBOX) {
main_window.status_bar.deactivate_message(StatusBar.Message.OUTBOX_SEND_FAILURE);
main_window.status_bar.deactivate_message(StatusBar.Message.OUTBOX_SAVE_SENT_MAIL_FAILED);
- libnotify.clear_error_notification();
+ gLibNotification.clear_error_notification();
}
}
@@ -1266,18 +1274,6 @@ public class GearyController : Geary.BaseObject {
}
}
- private void on_libnotify_invoked(Geary.Folder? folder, Geary.Email? email) {
- new_messages_monitor.clear_all_new_messages();
-
- if (folder == null || email == null || !can_switch_conversation_view())
- return;
-
- main_window.folder_list.select_folder(folder);
- Geary.App.Conversation? conversation = current_conversations.get_by_email_identifier(email.id);
- if (conversation != null)
- main_window.conversation_list_view.select_conversation(conversation);
- }
-
private void on_indicator_activated_application(uint32 timestamp) {
this.application.present();
}
@@ -2617,7 +2613,7 @@ public class GearyController : Geary.BaseObject {
).printf(Util.Email.to_short_recipient_display(rfc822.to));
InAppNotification notification = new InAppNotification(message);
this.main_window.add_notification(notification);
- Libnotify.play_sound("message-sent-email");
+ GLibNotification.play_sound("message-sent-email");
}
private void on_conversation_view_added(ConversationListBox list) {
@@ -2949,6 +2945,7 @@ public class GearyController : Geary.BaseObject {
case Geary.Protocol.SMTP:
context.account.outgoing.restart.begin(context.cancellable);
+ gLibNotification.clear_error_notification();
break;
}
}
diff --git a/src/client/meson.build b/src/client/meson.build
index 0770c20e..52740edb 100644
--- a/src/client/meson.build
+++ b/src/client/meson.build
@@ -81,9 +81,9 @@ geary_client_vala_sources = files(
'folder-list/folder-list-search-branch.vala',
'folder-list/folder-list-special-grouping.vala',
+ 'notification/glib-notification.vala',
'notification/in-app-notification.vala',
'notification/libmessagingmenu.vala',
- 'notification/libnotify.vala',
'notification/new-messages-indicator.vala',
'notification/new-messages-monitor.vala',
'notification/null-indicator.vala',
@@ -125,7 +125,6 @@ geary_client_dependencies = [
json_glib,
libcanberra,
libhandy,
- libnotify,
libsecret,
libsoup,
gmime,
diff --git a/src/client/notification/libnotify.vala b/src/client/notification/glib-notification.vala
similarity index 64%
rename from src/client/notification/libnotify.vala
rename to src/client/notification/glib-notification.vala
index 93a2ad99..ca1d8b32 100644
--- a/src/client/notification/libnotify.vala
+++ b/src/client/notification/glib-notification.vala
@@ -4,38 +4,30 @@
* (version 2.1 or later). See the COPYING file in this distribution.
*/
-// Displays a notification via libnotify
-public class Libnotify : Geary.BaseObject {
+// Displays a notification via GLibNotification
+public class GLibNotification : Geary.BaseObject {
public const Geary.Email.Field REQUIRED_FIELDS =
Geary.Email.Field.ORIGINATORS | Geary.Email.Field.SUBJECT;
private static Canberra.Context? sound_context = null;
private weak NewMessagesMonitor monitor;
- private Notify.Notification? current_notification = null;
- private Notify.Notification? error_notification = null;
+ private GLib.Notification? current_notification = null;
+ private GLib.Notification? error_notification = null;
private Geary.Folder? folder = null;
private Geary.Email? email = null;
- private List<string>? caps = null;
- public signal void invoked(Geary.Folder? folder, Geary.Email? email);
- public Libnotify(NewMessagesMonitor monitor) {
+ public GLibNotification(NewMessagesMonitor monitor) {
this.monitor = monitor;
-
- monitor.add_required_fields(REQUIRED_FIELDS);
-
- if (!Notify.is_initted()) {
- if (!Notify.init(Environment.get_prgname()))
- message("Failed to initialize libnotify.");
- }
-
init_sound();
- // This will return null if no notification server is present
- this.caps = Notify.get_server_caps();
+ this.monitor.add_required_fields(REQUIRED_FIELDS);
+ this.monitor.new_messages_arrived.connect(on_new_messages_arrived);
+ }
- monitor.new_messages_arrived.connect(on_new_messages_arrived);
+ ~GLibNotification() {
+ this.monitor.new_messages_arrived.disconnect(on_new_messages_arrived);
}
private static void init_sound() {
@@ -56,11 +48,6 @@ public class Libnotify : Geary.BaseObject {
}
}
- private void on_default_action(Notify.Notification notification, string action) {
- invoked(folder, email);
- GearyApplication.instance.activate();
- }
-
private void notify_new_mail(Geary.Folder folder, int added) {
// don't pass email if invoked
this.folder = null;
@@ -135,12 +122,7 @@ public class Libnotify : Geary.BaseObject {
private void issue_current_notification(string summary, string body, Gdk.Pixbuf? icon) {
// only one outstanding notification at a time
if (current_notification != null) {
- try {
- current_notification.close();
- } catch (Error err) {
- debug("Unable to close current libnotify notification: %s", err.message);
- }
-
+ GearyApplication.instance.withdraw_notification("email.arrived");
current_notification = null;
}
@@ -148,39 +130,20 @@ public class Libnotify : Geary.BaseObject {
}
- private Notify.Notification? issue_notification(string category, string summary,
- string body, Gdk.Pixbuf? icon, string? sound) {
- if (this.caps == null)
- return null;
-
- // Avoid constructor due to ABI change
- Notify.Notification notification = (Notify.Notification) GLib.Object.new(
- typeof (Notify.Notification),
- "icon-name", "org.gnome.Geary",
- "summary", GLib.Environment.get_application_name());
- notification.set_hint_string("desktop-entry", "org.gnome.Geary");
- if (caps.find_custom("actions", GLib.strcmp) != null)
- notification.add_action("default", _("Open"), on_default_action);
-
- notification.set_category(category);
- notification.set("summary", summary);
- notification.set("body", body);
+ private GLib.Notification issue_notification(string id, string summary, string body,
+ Gdk.Pixbuf? icon, string? sound) {
+ GLib.Notification notification = new GLib.Notification(summary);
+ notification.set_body(body);
+ //notification.set_default_action("app.activate");
if (icon != null)
- notification.set_image_from_pixbuf(icon);
+ notification.set_icon(icon);
if (sound != null) {
- if (caps.find("sound") != null)
- notification.set_hint_string("sound-name", sound);
- else
- play_sound(sound);
+ play_sound(sound);
}
- try {
- notification.show();
- } catch (Error err) {
- message("Unable to show notification: %s", err.message);
- }
+ GearyApplication.instance.send_notification(id, notification);
return notification;
}
@@ -200,19 +163,11 @@ public class Libnotify : Geary.BaseObject {
if (error_notification != null)
return;
- error_notification = issue_notification("email", summary, body, null, null);
+ error_notification = issue_notification("error", summary, body, null, null);
}
public void clear_error_notification() {
- if (error_notification != null) {
- try {
- error_notification.close();
- } catch (Error err) {
- debug("Unable to close libnotify error notification: %s", err.message);
- }
-
- error_notification = null;
- }
+ GearyApplication.instance.withdraw_notification("error");
+ error_notification = null;
}
}
-
diff --git a/src/client/notification/new-messages-monitor.vala
b/src/client/notification/new-messages-monitor.vala
index 71c2e807..85ea6c6d 100644
--- a/src/client/notification/new-messages-monitor.vala
+++ b/src/client/notification/new-messages-monitor.vala
@@ -5,7 +5,7 @@
*/
// NewMessagesMonitor is a central data store for new message information that the various
-// notification methods (libnotify, libunity, etc.) can monitor to do their thing.
+// notification methods (GLibNotification, libunity, etc.) can monitor to do their thing.
// Subclasses should trap the "notify::count" signal and use that to perform whatever magic
// they need for their implementation, or trap "new-messages" to receive notifications of the emails
// themselves as they're added. In the latter case, subscribers should add required Email.Field
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]