From 62ad56af216410d51ebfd6fa542e936703465549 Mon Sep 17 00:00:00 2001 From: Samuel Hand Date: Wed, 11 Jul 2018 13:20:02 +0100 Subject: Notify on a new own device --- plugins/omemo/CMakeLists.txt | 1 + plugins/omemo/src/own_notifications.vala | 38 ++++++++++++++++++++++++++++++++ plugins/omemo/src/plugin.vala | 1 + 3 files changed, 40 insertions(+) create mode 100644 plugins/omemo/src/own_notifications.vala (limited to 'plugins') diff --git a/plugins/omemo/CMakeLists.txt b/plugins/omemo/CMakeLists.txt index 1c049588..dda85f15 100644 --- a/plugins/omemo/CMakeLists.txt +++ b/plugins/omemo/CMakeLists.txt @@ -34,6 +34,7 @@ SOURCES src/contact_details_dialog.vala src/database.vala src/device_notification_populator.vala + src/own_notifications.vala src/encrypt_state.vala src/encryption_list_entry.vala src/manager.vala diff --git a/plugins/omemo/src/own_notifications.vala b/plugins/omemo/src/own_notifications.vala new file mode 100644 index 00000000..df0c4740 --- /dev/null +++ b/plugins/omemo/src/own_notifications.vala @@ -0,0 +1,38 @@ +using Dino.Entities; +using Xmpp; +using Gtk; + +namespace Dino.Plugins.Omemo { + +public class OwnNotifications { + + private StreamInteractor stream_interactor; + private Plugin plugin; + private Account account; + + public OwnNotifications (Plugin plugin, StreamInteractor stream_interactor, Account account) { + this.stream_interactor = (!)stream_interactor; + this.plugin = plugin; + this.account = account; + stream_interactor.module_manager.get_module(account, StreamModule.IDENTITY).bundle_fetched.connect_after((jid, device_id, bundle) => { + if (jid.equals(account.bare_jid) && has_new_devices(account.bare_jid)) { + display_notification(); + } + }); + if (has_new_devices(account.bare_jid)) { + display_notification(); + } + + } + + public bool has_new_devices(Jid jid) { + return plugin.db.identity_meta.with_address(account.id, jid.bare_jid.to_string()).with(plugin.db.identity_meta.trust_level, "=", Database.IdentityMetaTable.TrustLevel.UNKNOWN).without_null(plugin.db.identity_meta.identity_key_public_base64).count() > 0; + } + + private void display_notification() { + Notification notification = new Notification("Trust decision required"); + notification.set_body(@"A new OMEMO device has been added for the account $(account.bare_jid)"); + plugin.app.send_notification(account.id.to_string()+"-new-device", notification); + } +} +} diff --git a/plugins/omemo/src/plugin.vala b/plugins/omemo/src/plugin.vala index 79e6a5eb..b63ed3f2 100644 --- a/plugins/omemo/src/plugin.vala +++ b/plugins/omemo/src/plugin.vala @@ -44,6 +44,7 @@ public class Plugin : RootInterface, Object { this.app.plugin_registry.register_notification_populator(device_notification_populator); this.app.stream_interactor.module_manager.initialize_account_modules.connect((account, list) => { list.add(new StreamModule()); + new OwnNotifications(this, this.app.stream_interactor, account); }); Manager.start(this.app.stream_interactor, db); -- cgit v1.2.3-54-g00ecf