diff options
Diffstat (limited to 'main/src/ui/notifications.vala')
-rw-r--r-- | main/src/ui/notifications.vala | 63 |
1 files changed, 19 insertions, 44 deletions
diff --git a/main/src/ui/notifications.vala b/main/src/ui/notifications.vala index 2eb144e4..f7540a4d 100644 --- a/main/src/ui/notifications.vala +++ b/main/src/ui/notifications.vala @@ -14,14 +14,11 @@ public class Notifications : Object { private HashMap<Conversation, Notification> notifications = new HashMap<Conversation, Notification>(Conversation.hash_func, Conversation.equals_func); private Set<string>? active_conversation_ids = null; private Set<string>? active_ids = new HashSet<string>(); - private Canberra.Context sound_context; public Notifications(StreamInteractor stream_interactor, Gtk.Window window) { this.stream_interactor = stream_interactor; this.window = window; - Canberra.Context.create(out sound_context); - stream_interactor.get_module(ChatInteraction.IDENTITY).focused_in.connect((focused_conversation) => { if (active_conversation_ids == null) { Gee.List<Conversation> conversations = stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations(); @@ -44,48 +41,36 @@ public class Notifications : Object { } public void start() { - stream_interactor.get_module(MessageProcessor.IDENTITY).message_received.connect(on_message_received); - stream_interactor.get_module(PresenceManager.IDENTITY).received_subscription_request.connect(on_received_subscription_request); + stream_interactor.get_module(NotificationEvents.IDENTITY).notify_message.connect(notify_message); + stream_interactor.get_module(NotificationEvents.IDENTITY).notify_subscription_request.connect(notify_subscription_request); } - private void on_message_received(Entities.Message message, Conversation conversation) { - if (!should_notify_message(message, conversation)) return; - + private void notify_message(Entities.Message message, Conversation conversation) { if (!notifications.has_key(conversation)) { notifications[conversation] = new Notification(""); notifications[conversation].set_default_action_and_target_value("app.open-conversation", new Variant.int32(conversation.id)); } - if (!stream_interactor.get_module(ChatInteraction.IDENTITY).is_active_focus()) { - string display_name = Util.get_conversation_display_name(stream_interactor, conversation); - string text = message.body; - if (stream_interactor.get_module(MucManager.IDENTITY).is_groupchat(conversation.counterpart, conversation.account)) { - string muc_occupant = Util.get_display_name(stream_interactor, message.from, conversation.account); - text = @"$muc_occupant: $text"; - } - notifications[conversation].set_title(display_name); - notifications[conversation].set_body(text); - try { - notifications[conversation].set_icon(get_pixbuf_icon((new AvatarGenerator(40, 40)).draw_conversation(stream_interactor, conversation))); - } catch (Error e) { } - window.get_application().send_notification(conversation.id.to_string(), notifications[conversation]); - active_conversation_ids.add(conversation.id.to_string()); - window.urgency_hint = true; - } - if (conversation.get_sound_setting(stream_interactor)) { - sound_context.play (0, - Canberra.PROP_EVENT_ID, "message-new-instant", - Canberra.PROP_EVENT_DESCRIPTION, "New Dino message"); + string display_name = Util.get_conversation_display_name(stream_interactor, conversation); + string text = message.body; + if (stream_interactor.get_module(MucManager.IDENTITY).is_groupchat(conversation.counterpart, conversation.account)) { + string muc_occupant = Util.get_display_name(stream_interactor, message.from, conversation.account); + text = @"$muc_occupant: $text"; } + notifications[conversation].set_title(display_name); + notifications[conversation].set_body(text); + try { + notifications[conversation].set_icon(get_pixbuf_icon((new AvatarGenerator(40, 40)).draw_conversation(stream_interactor, conversation))); + } catch (Error e) { } + window.get_application().send_notification(conversation.id.to_string(), notifications[conversation]); + active_conversation_ids.add(conversation.id.to_string()); + window.urgency_hint = true; } - private void on_received_subscription_request(Jid jid, Account account) { - Conversation conversation = stream_interactor.get_module(ConversationManager.IDENTITY).create_conversation(jid, account, Conversation.Type.CHAT); - if (stream_interactor.get_module(ChatInteraction.IDENTITY).is_active_focus(conversation)) return; - + private void notify_subscription_request(Conversation conversation) { Notification notification = new Notification(_("Subscription request")); - notification.set_body(jid.bare_jid.to_string()); + notification.set_body(conversation.counterpart.to_string()); try { - notification.set_icon(get_pixbuf_icon((new AvatarGenerator(40, 40)).draw_jid(stream_interactor, jid, account))); + notification.set_icon(get_pixbuf_icon((new AvatarGenerator(40, 40)).draw_jid(stream_interactor, conversation.counterpart, conversation.account))); } catch (Error e) { } notification.set_default_action_and_target_value("app.open-conversation", new Variant.int32(conversation.id)); notification.add_button_with_target_value(_("Accept"), "app.accept-subscription", conversation.id); @@ -94,16 +79,6 @@ public class Notifications : Object { active_ids.add(conversation.id.to_string() + "-subscription"); } - private bool should_notify_message(Entities.Message message, Conversation conversation) { - Conversation.NotifySetting notify = conversation.get_notification_setting(stream_interactor); - if (notify == Conversation.NotifySetting.OFF) return false; - Jid? nick = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); - if (notify == Conversation.NotifySetting.HIGHLIGHT && nick != null) { - return Regex.match_simple("""\b""" + Regex.escape_string(nick.resourcepart) + """\b""", message.body, RegexCompileFlags.CASELESS); - } - return true; - } - private Icon get_pixbuf_icon(Cairo.ImageSurface surface) throws Error { Gdk.Pixbuf avatar = Gdk.pixbuf_get_from_surface(surface, 0, 0, surface.get_width(), surface.get_height()); uint8[] buffer; |