aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/conversation_content_view/item_actions.vala
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/ui/conversation_content_view/item_actions.vala')
-rw-r--r--main/src/ui/conversation_content_view/item_actions.vala58
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;
}