From f8c004630f56914438fa1b114530f639748e41c1 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Mon, 16 Sep 2024 22:47:49 +0200 Subject: Add change password functionality Co-authored-by: Stanislav Malishevskiy --- .../preferences_window/change_password_dialog.vala | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 main/src/windows/preferences_window/change_password_dialog.vala (limited to 'main/src/windows/preferences_window/change_password_dialog.vala') diff --git a/main/src/windows/preferences_window/change_password_dialog.vala b/main/src/windows/preferences_window/change_password_dialog.vala new file mode 100644 index 00000000..f0c7dcf9 --- /dev/null +++ b/main/src/windows/preferences_window/change_password_dialog.vala @@ -0,0 +1,66 @@ +using Gee; +using Gtk; + +using Dino.Entities; +using Xmpp; + +namespace Dino.Ui{ + + [GtkTemplate (ui = "/im/dino/Dino/preferences_window/change_password_dialog.ui")] + public class ChangePasswordDialog : Gtk.Dialog { + + [GtkChild] private unowned Button change_password_button; + [GtkChild] private unowned Stack change_password_stack; + [GtkChild] private unowned Button cancel_button; + [GtkChild] private unowned Adw.PasswordEntryRow current_password_entry; + [GtkChild] private unowned Adw.PasswordEntryRow new_password_entry; + [GtkChild] private unowned Adw.PasswordEntryRow confirm_new_password_entry; + [GtkChild] private unowned Label change_password_error_label; + + private ViewModel.ChangePasswordDialog model; + + public ChangePasswordDialog(ViewModel.ChangePasswordDialog model) { + Object(use_header_bar : 1); + this.model = model; + + Util.force_error_color(change_password_error_label); + cancel_button.clicked.connect(() => { close(); }); + current_password_entry.changed.connect(is_form_filled); + new_password_entry.changed.connect(is_form_filled); + confirm_new_password_entry.changed.connect(is_form_filled); + change_password_button.clicked.connect(on_change_password_button_clicked); + } + + private void is_form_filled(){ + if (current_password_entry.get_text().length > 0 + && new_password_entry.get_text().length > 0 + && confirm_new_password_entry.get_text().length > 0 + && new_password_entry.get_text() == confirm_new_password_entry.get_text()){ + change_password_button.sensitive = true; + } else { + change_password_button.sensitive = false; + } + } + + private async void on_change_password_button_clicked(){ + string? pw_input = current_password_entry.get_text(); + string? new_pw_input = new_password_entry.get_text(); + + if (pw_input != null && model.account.password == pw_input){ + change_password_button.sensitive = false; + change_password_stack.visible_child_name = "spinner"; + string? ret = yield model.change_password(new_pw_input); + change_password_button.sensitive = true; + change_password_stack.visible_child_name = "label"; + if (ret == null) { + close(); + } + + change_password_error_label.label = "Error: %s".printf(ret); + + } else { + change_password_error_label.label = "Wrong current password"; + } + } + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2