diff options
Diffstat (limited to 'main/src/windows/preferences_window/change_password_dialog.vala')
-rw-r--r-- | main/src/windows/preferences_window/change_password_dialog.vala | 66 |
1 files changed, 66 insertions, 0 deletions
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 |