From 302e770a98c8fc024bf3dae4266dc034a8e14d09 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Sun, 15 May 2022 15:29:15 +0200 Subject: Show modal dialog to select default encryption if unknown --- main/src/ui/conversation_view_controller.vala | 63 +++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'main/src/ui') diff --git a/main/src/ui/conversation_view_controller.vala b/main/src/ui/conversation_view_controller.vala index bd52c50c..7cea3212 100644 --- a/main/src/ui/conversation_view_controller.vala +++ b/main/src/ui/conversation_view_controller.vala @@ -110,6 +110,67 @@ public class ConversationViewController : Object { ((Gtk.Window)view.get_toplevel()).add_accel_group(accel_group); } + private void update_conversation_encryption(Conversation? conversation) { + if (conversation == null) { + return; + } + + bool visible = false; + + // FIXME duplicate logic from encryption_button.vala + switch (conversation.type_) { + case Conversation.Type.CHAT: + visible = true; + break; + case Conversation.Type.GROUPCHAT_PM: + visible = false; + break; + case Conversation.Type.GROUPCHAT: + visible = stream_interactor.get_module(MucManager.IDENTITY).is_private_room(conversation.account, conversation.counterpart); + break; + } + + if (visible && conversation.encryption == UNKNOWN) { + Dino.Entities.Settings settings = Dino.Application.get_default().settings; + + if (settings.default_encryption == UNKNOWN) { + var selection_dialog_builder = new Builder.from_resource("/im/dino/Dino/default_encryption_dialog.ui"); + var selection_dialog = selection_dialog_builder.get_object("dialog") as Dialog; + var omemo_radio = selection_dialog_builder.get_object("omemo") as RadioButton; + var openpgp_radio = selection_dialog_builder.get_object("openpgp") as RadioButton; + var none_radio = selection_dialog_builder.get_object("none") as RadioButton; + var accept_button = selection_dialog_builder.get_object("accept_button") as Button; + Encryption selected_default = UNKNOWN; + + accept_button.clicked.connect(() => { + if (omemo_radio.active) {selected_default = OMEMO;} + else if (openpgp_radio.active) {selected_default = PGP;} + else if (none_radio.active) {selected_default = NONE;} + + selection_dialog.response(selected_default); + selection_dialog.close(); + }); + + selection_dialog.run(); + conversation.encryption = selected_default; + + if (selected_default != NONE) { + settings.default_encryption = selected_default; + } + else { + // Set conversation as unencrypted, but keep + // default encryption setting as undecided. + } + } + else { + conversation.encryption = settings.default_encryption; + } + } + else if (!visible) { + conversation.encryption = Encryption.NONE; + } + } + public void select_conversation(Conversation? conversation, bool default_initialize_conversation) { if (this.conversation != null) { conversation.notify["encryption"].disconnect(update_file_upload_status); @@ -120,6 +181,8 @@ public class ConversationViewController : Object { this.conversation = conversation; + update_conversation_encryption(conversation); + conversation.notify["encryption"].connect(update_file_upload_status); chat_input_controller.set_conversation(conversation); -- cgit v1.2.3