From 5d32a0ec3d85295f2286fbbab650c852b13a437c Mon Sep 17 00:00:00 2001 From: Samuel Hand Date: Sat, 28 Jul 2018 19:03:52 +0100 Subject: [PATCH] Fix omemo not being available on first startup --- plugins/omemo/src/manager.vala | 11 ++++++++--- plugins/omemo/src/stream_module.vala | 4 ++-- plugins/omemo/src/trust_manager.vala | 5 +++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/plugins/omemo/src/manager.vala b/plugins/omemo/src/manager.vala index 5bd1e00e..8654a4f5 100644 --- a/plugins/omemo/src/manager.vala +++ b/plugins/omemo/src/manager.vala @@ -340,15 +340,20 @@ public class Manager : StreamInteractionModule, Object { if (flag == null) return false; if (flag.has_room_feature(conversation.counterpart, Xep.Muc.Feature.NON_ANONYMOUS) && flag.has_room_feature(conversation.counterpart, Xep.Muc.Feature.MEMBERS_ONLY)) { foreach(Jid jid in stream_interactor.get_module(MucManager.IDENTITY).get_offline_members(conversation.counterpart, conversation.account)) { - if (!trust_manager.is_known_address(conversation.account, jid.bare_jid)) return false; + if (!trust_manager.is_known_address(conversation.account, jid.bare_jid)) { + module.request_user_devicelist(stream, jid.bare_jid); + return false; + } } return true; } else { return false; } - } else { - return trust_manager.is_known_address(conversation.account, conversation.counterpart.bare_jid); + } else if (!trust_manager.is_known_address(conversation.account, conversation.counterpart.bare_jid)) { + module.request_user_devicelist(stream, conversation.counterpart.bare_jid); + return false; } + return true; } public static void start(StreamInteractor stream_interactor, Database db) { diff --git a/plugins/omemo/src/stream_module.vala b/plugins/omemo/src/stream_module.vala index d298db2b..25e3685f 100644 --- a/plugins/omemo/src/stream_module.vala +++ b/plugins/omemo/src/stream_module.vala @@ -33,6 +33,7 @@ public class StreamModule : XmppStreamModule { store_created(store); received_pipeline_listener = new ReceivedPipelineListener(store); stream.get_module(MessageModule.IDENTITY).received_pipeline.connect(received_pipeline_listener); + print("Adding filtered notification\n"); stream.get_module(Pubsub.Module.IDENTITY).add_filtered_notification(stream, NODE_DEVICELIST, (stream, jid, id, node) => on_devicelist(stream, jid, id, node)); } @@ -63,9 +64,8 @@ public class StreamModule : XmppStreamModule { if (Plugin.DEBUG) print(@"OMEMO: Not on device list, adding id\n"); node.put_node(new StanzaNode.build("device", NS_URI).put_attribute("id", store.local_registration_id.to_string())); stream.get_module(Pubsub.Module.IDENTITY).publish(stream, jid, NODE_DEVICELIST, NODE_DEVICELIST, id, node); - } else { - publish_bundles_if_needed(stream, jid); } + publish_bundles_if_needed(stream, jid); } ArrayList device_list = new ArrayList(); diff --git a/plugins/omemo/src/trust_manager.vala b/plugins/omemo/src/trust_manager.vala index 408faed8..7e17e5ea 100644 --- a/plugins/omemo/src/trust_manager.vala +++ b/plugins/omemo/src/trust_manager.vala @@ -118,8 +118,9 @@ public class TrustManager { public Gee.List get_trusted_devices(Account account, Jid jid) { Gee.List devices = new ArrayList(); - foreach (Row device in db.identity_meta.with_address(account.id, jid.to_string()).with(db.identity_meta.trust_level, "!=", Database.IdentityMetaTable.TrustLevel.UNKNOWN).with(db.identity_meta.trust_level, "!=", Database.IdentityMetaTable.TrustLevel.UNTRUSTED).without_null(db.identity_meta.identity_key_public_base64)) { - devices.add(device[db.identity_meta.device_id]); + foreach (Row device in db.identity_meta.with_address(account.id, jid.to_string()).with(db.identity_meta.trust_level, "!=", Database.IdentityMetaTable.TrustLevel.UNTRUSTED)) { + if(device[db.identity_meta.trust_level] != Database.IdentityMetaTable.TrustLevel.UNKNOWN || device[db.identity_meta.identity_key_public_base64] == null) + devices.add(device[db.identity_meta.device_id]); } return devices; }