Fix notification fallback, fix fdo markup escaping
This commit is contained in:
parent
552591640f
commit
cd7c4c8221
|
@ -29,7 +29,7 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application {
|
||||||
|
|
||||||
startup.connect(() => {
|
startup.connect(() => {
|
||||||
stream_interactor.get_module(NotificationEvents.IDENTITY).register_notification_provider(new GNotificationsNotifier(stream_interactor));
|
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) {
|
if (free_desktop_notifier != null) {
|
||||||
stream_interactor.get_module(NotificationEvents.IDENTITY).register_notification_provider(free_desktop_notifier);
|
stream_interactor.get_module(NotificationEvents.IDENTITY).register_notification_provider(free_desktop_notifier);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,43 +15,48 @@ public class Dino.Ui.FreeDesktopNotifier : NotificationProvider, Object {
|
||||||
private HashMap<Conversation, Gee.List<uint32>> conversation_notifications = new HashMap<Conversation, Gee.List<uint32>>(Conversation.hash_func, Conversation.equals_func);
|
private HashMap<Conversation, Gee.List<uint32>> conversation_notifications = new HashMap<Conversation, Gee.List<uint32>>(Conversation.hash_func, Conversation.equals_func);
|
||||||
private HashMap<uint32, HashMap<string, ListenerFuncWrapper>> action_listeners = new HashMap<uint32, HashMap<string, ListenerFuncWrapper>>();
|
private HashMap<uint32, HashMap<string, ListenerFuncWrapper>> action_listeners = new HashMap<uint32, HashMap<string, ListenerFuncWrapper>>();
|
||||||
|
|
||||||
private FreeDesktopNotifier(StreamInteractor stream_interactor, DBusNotifications dbus_notifications) {
|
private FreeDesktopNotifier(StreamInteractor stream_interactor) {
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void set_dbus_notifications(DBusNotifications dbus_notifications) throws Error {
|
||||||
this.dbus_notifications = dbus_notifications;
|
this.dbus_notifications = dbus_notifications;
|
||||||
|
|
||||||
try {
|
string[] caps;
|
||||||
string[] caps;
|
dbus_notifications.get_capabilities(out caps);
|
||||||
dbus_notifications.get_capabilities(out caps);
|
foreach (string cap in caps) {
|
||||||
foreach (string cap in caps) {
|
switch (cap) {
|
||||||
switch (cap) {
|
case "body-markup":
|
||||||
case "body-markup":
|
supports_body_markup = true;
|
||||||
supports_body_markup = true;
|
break;
|
||||||
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) {
|
public static FreeDesktopNotifier? try_create(StreamInteractor stream_interactor) {
|
||||||
DBusNotifications? dbus_notifications = get_notifications_dbus();
|
DBusNotifications? dbus_notifications = get_notifications_dbus();
|
||||||
if (dbus_notifications == null) return null;
|
if (dbus_notifications == null) return null;
|
||||||
|
|
||||||
FreeDesktopNotifier notifier = new FreeDesktopNotifier(stream_interactor, dbus_notifications);
|
try {
|
||||||
notifier.dbus_notifications = dbus_notifications;
|
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() {
|
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) {
|
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) {
|
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_;
|
string body = body_;
|
||||||
if (participant_display_name != null) {
|
if (participant_display_name != null) {
|
||||||
if (supports_body_markup) {
|
if (supports_body_markup) {
|
||||||
body = @"<b>$(Markup.escape_text(participant_display_name)):</b> $(Markup.escape_text(body))";
|
body = @"<b>$(Markup.escape_text(participant_display_name)):</b> $body";
|
||||||
} else {
|
} else {
|
||||||
body = @"$participant_display_name: $body";
|
body = @"$participant_display_name: $body";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue