aboutsummaryrefslogtreecommitdiff
path: root/plugins/openpgp/src/encryption_list_entry.vala
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/openpgp/src/encryption_list_entry.vala')
-rw-r--r--plugins/openpgp/src/encryption_list_entry.vala21
1 files changed, 19 insertions, 2 deletions
diff --git a/plugins/openpgp/src/encryption_list_entry.vala b/plugins/openpgp/src/encryption_list_entry.vala
index 584e065b..e0a11865 100644
--- a/plugins/openpgp/src/encryption_list_entry.vala
+++ b/plugins/openpgp/src/encryption_list_entry.vala
@@ -1,3 +1,5 @@
+using Gee;
+
using Dino.Entities;
namespace Dino.Plugins.OpenPgp {
@@ -19,8 +21,23 @@ private class EncryptionListEntry : Plugins.EncryptionListEntry, Object {
}}
public bool can_encrypt(Entities.Conversation conversation) {
- string? key_id = stream_interactor.get_module(Manager.IDENTITY).get_key_id(conversation.account, conversation.counterpart);
- return key_id != null && GPGHelper.get_keylist(key_id).size > 0;
+ if (conversation.type_ == Conversation.Type.CHAT) {
+ string? key_id = stream_interactor.get_module(Manager.IDENTITY).get_key_id(conversation.account, conversation.counterpart);
+ return key_id != null && GPGHelper.get_keylist(key_id).size > 0;
+ } else if (conversation.type_ == Conversation.Type.GROUPCHAT) {
+ Gee.List<Jid> muc_jids = new Gee.ArrayList<Jid>();
+ Gee.List<Jid>? occupants = stream_interactor.get_module(MucManager.IDENTITY).get_occupants(conversation.counterpart, conversation.account);
+ if (occupants != null) muc_jids.add_all(occupants);
+ Gee.List<Jid>? offline_members = stream_interactor.get_module(MucManager.IDENTITY).get_offline_members(conversation.counterpart, conversation.account);
+ if (occupants != null) muc_jids.add_all(offline_members);
+
+ foreach (Jid jid in muc_jids) {
+ string? key_id = stream_interactor.get_module(Manager.IDENTITY).get_key_id(conversation.account, jid);
+ if (key_id == null) return false;
+ }
+ return true;
+ }
+ return false;
}
}