diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala index 17abddbc..008b15c7 100644 --- a/main/src/ui/application.vala +++ b/main/src/ui/application.vala @@ -29,7 +29,7 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application { startup.connect(() => { stream_interactor.get_module(NotificationEvents.IDENTITY).register_notification_provider(new GNotificationsNotifier(stream_interactor)); - FreeDesktopNotifier free_desktop_notifier = FreeDesktopNotifier.try_create(stream_interactor); + FreeDesktopNotifier? free_desktop_notifier = FreeDesktopNotifier.try_create(stream_interactor); if (free_desktop_notifier != null) { stream_interactor.get_module(NotificationEvents.IDENTITY).register_notification_provider(free_desktop_notifier); } diff --git a/main/src/ui/notifier_freedesktop.vala b/main/src/ui/notifier_freedesktop.vala index 373b5239..22b104bc 100644 --- a/main/src/ui/notifier_freedesktop.vala +++ b/main/src/ui/notifier_freedesktop.vala @@ -15,43 +15,48 @@ public class Dino.Ui.FreeDesktopNotifier : NotificationProvider, Object { private HashMap> conversation_notifications = new HashMap>(Conversation.hash_func, Conversation.equals_func); private HashMap> action_listeners = new HashMap>(); - private FreeDesktopNotifier(StreamInteractor stream_interactor, DBusNotifications dbus_notifications) { + private FreeDesktopNotifier(StreamInteractor stream_interactor) { this.stream_interactor = stream_interactor; + + } + + private void set_dbus_notifications(DBusNotifications dbus_notifications) throws Error { this.dbus_notifications = dbus_notifications; - try { - string[] caps; - dbus_notifications.get_capabilities(out caps); - foreach (string cap in caps) { - switch (cap) { - case "body-markup": - supports_body_markup = true; - break; - } + string[] caps; + dbus_notifications.get_capabilities(out caps); + foreach (string cap in caps) { + switch (cap) { + case "body-markup": + supports_body_markup = true; + break; } - - dbus_notifications.action_invoked.connect((id, action) => { - if (action_listeners.has_key(id) && action_listeners[id].has_key(action)) { - action_listeners[id][action].func(); - } - }); - - dbus_notifications.notification_closed.connect((id) => { - action_listeners.unset(id); - }); - } catch (Error e) { - warning("Failed accessing fdo notification server: %s", e.message); } + + dbus_notifications.action_invoked.connect((id, action) => { + if (action_listeners.has_key(id) && action_listeners[id].has_key(action)) { + action_listeners[id][action].func(); + } + }); + + dbus_notifications.notification_closed.connect((id) => { + action_listeners.unset(id); + }); } public static FreeDesktopNotifier? try_create(StreamInteractor stream_interactor) { DBusNotifications? dbus_notifications = get_notifications_dbus(); if (dbus_notifications == null) return null; - FreeDesktopNotifier notifier = new FreeDesktopNotifier(stream_interactor, dbus_notifications); - notifier.dbus_notifications = dbus_notifications; + try { + FreeDesktopNotifier notifier = new FreeDesktopNotifier(stream_interactor); + notifier.set_dbus_notifications(dbus_notifications); + return notifier; + } catch (Error e) { + debug("Failed accessing fdo notification server: %s", e.message); + } - return notifier; + return null; } public double get_priority() { @@ -59,7 +64,8 @@ public class Dino.Ui.FreeDesktopNotifier : NotificationProvider, Object { } public async void notify_message(Message message, Conversation conversation, string conversation_display_name, string? participant_display_name) { - yield notify_content_item(conversation, conversation_display_name, participant_display_name, message.body); + string body = supports_body_markup ? Markup.escape_text(message.body) : message.body; + yield notify_content_item(conversation, conversation_display_name, participant_display_name, body); } public async void notify_file(FileTransfer file_transfer, Conversation conversation, bool is_image, string conversation_display_name, string? participant_display_name) { @@ -81,7 +87,7 @@ public class Dino.Ui.FreeDesktopNotifier : NotificationProvider, Object { string body = body_; if (participant_display_name != null) { if (supports_body_markup) { - body = @"$(Markup.escape_text(participant_display_name)): $(Markup.escape_text(body))"; + body = @"$(Markup.escape_text(participant_display_name)): $body"; } else { body = @"$participant_display_name: $body"; }