diff options
Diffstat (limited to 'main/src/ui/conversation_content_view/item_actions.vala')
| -rw-r--r-- | main/src/ui/conversation_content_view/item_actions.vala | 58 |
1 files changed, 14 insertions, 44 deletions
diff --git a/main/src/ui/conversation_content_view/item_actions.vala b/main/src/ui/conversation_content_view/item_actions.vala index cafde24c..99705a92 100644 --- a/main/src/ui/conversation_content_view/item_actions.vala +++ b/main/src/ui/conversation_content_view/item_actions.vala @@ -9,6 +9,10 @@ namespace Dino.Ui { action.tooltip = _("Add reaction"); action.callback = (variant) => { + if (variant == null || !variant.is_of_type(VariantType.STRING)) { + critical("Invalid parameter variant for reaction action"); + return; + } string emoji = variant.get_string(); stream_interactor.get_module(Reactions.IDENTITY).add_reaction(conversation, content_item, emoji); }; @@ -60,52 +64,18 @@ namespace Dino.Ui { action.icon_name = "dino-user-trash-symbolic"; action.tooltip = _("Delete message"); action.shortcut_action = false; - action.callback = () => { - Adw.AlertDialog dialog = new Adw.AlertDialog(_("Delete message"), null) { content_width = 350, follows_content_size = false }; - if (can_delete_for_everyone) { - CheckButton check_button = new CheckButton() { label="Delete for everyone", active=true }; - - Box extra_child = new Box(Orientation.VERTICAL, 8); - extra_child.append(new Label("Would you like to remove this message for everyone or just for yourself?") { xalign=0, use_markup=true, wrap=true }); - extra_child.append(new Label("The message will only be deleted for others <b>if their app supports it</b>!") { xalign=0, use_markup=true, wrap=true }); - extra_child.append(check_button); - dialog.extra_child = extra_child; - - check_button.toggled.connect(() => { - dialog.remove_response("delete"); - dialog.remove_response("cancel"); - if (check_button.active) { - dialog.add_response("delete", "Delete for everyone"); - } else { - dialog.add_response("delete", "Only delete for yourself"); - } - dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE); - dialog.add_response("cancel", "Cancel"); - }); - dialog.response.connect((response) => { - if (response == "delete") { - if (check_button.active) { - stream_interactor.get_module(MessageDeletion.IDENTITY).delete_globally(conversation, content_item); - } else { - stream_interactor.get_module(MessageDeletion.IDENTITY).delete_locally(conversation, content_item, conversation.account.bare_jid); - } - } - }); - dialog.add_response("delete", "Delete for everyone"); - dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE); - dialog.add_response("cancel", "Cancel"); + action.extras = new Variant.boolean(can_delete_for_everyone); + action.callback = (variant) => { + if (variant == null || !variant.is_of_type(VariantType.BOOLEAN)) { + critical("Invalid parameter variant for delete action"); + return; + } + bool delete_for_everyone = variant.get_boolean(); + if (delete_for_everyone) { + stream_interactor.get_module(MessageDeletion.IDENTITY).delete_globally(conversation, content_item); } else { - dialog.extra_child = new Label("This message <b>can't be deleted</b> for everyone. Would you like to remove it only for yourself?") { use_markup=true, wrap=true }; - dialog.add_response("delete", "Only delete for myself"); - dialog.set_response_appearance("delete", Adw.ResponseAppearance.DESTRUCTIVE); - dialog.add_response("cancel", "Cancel"); - dialog.response.connect((response) => { - if (response == "delete") { - stream_interactor.get_module(MessageDeletion.IDENTITY).delete_locally(conversation, content_item, conversation.account.bare_jid); - } - }); + stream_interactor.get_module(MessageDeletion.IDENTITY).delete_locally(conversation, content_item, conversation.account.bare_jid); } - dialog.present(((Dino.Ui.Application)Dino.Application.get_default()).window); }; return action; } |
