[fractal/fix-account-settings] fractal-gtk: Add AppOp to AccountSettings



commit b60122beb53b4cdc270556ae10e19e225c0f08d9
Author: Daniel GarcĂ­a Moreno <dani danigm net>
Date:   Wed Jul 22 10:30:01 2020 +0200

    fractal-gtk: Add AppOp to AccountSettings
    
    During the App::connect_gtk the login_data is None, so the
    AccountSettings is not initialized correctly.
    
    We need to get the login_data when we are going to change the avatar,
    because that data can change during the app usage.
    
    This patch uses the AppOp shared reference to get the updated data just
    on click.
    
    Fix https://gitlab.gnome.org/GNOME/fractal/-/issues/652

 fractal-gtk/src/actions/account_settings.rs | 20 ++++++++------------
 fractal-gtk/src/app/connect/account.rs      |  8 +-------
 2 files changed, 9 insertions(+), 19 deletions(-)
---
diff --git a/fractal-gtk/src/actions/account_settings.rs b/fractal-gtk/src/actions/account_settings.rs
index 1831700b..597692b4 100644
--- a/fractal-gtk/src/actions/account_settings.rs
+++ b/fractal-gtk/src/actions/account_settings.rs
@@ -1,27 +1,21 @@
 use crate::backend::{user, HandleError};
 use crate::i18n::i18n;
-use fractal_api::identifiers::UserId;
-use fractal_api::r0::AccessToken;
-use fractal_api::url::Url;
 use gio::prelude::*;
 use gio::SimpleAction;
 use gio::SimpleActionGroup;
 use glib::clone;
+use std::sync::{Arc, Mutex};
 use std::thread;
 
 use crate::app::App;
+use crate::appop::AppOp;
 
 use crate::widgets::FileDialog::open;
 
 use crate::actions::ButtonState;
 
 // This creates all actions a user can perform in the account settings
-pub fn new(
-    window: &gtk::Window,
-    server_url: Url,
-    access_token: AccessToken,
-    uid: UserId,
-) -> gio::SimpleActionGroup {
+pub fn new(window: &gtk::Window, op: Arc<Mutex<AppOp>>) -> gio::SimpleActionGroup {
     let actions = SimpleActionGroup::new();
     // TODO create two stats loading interaction and connect it to the avatar box
     let change_avatar =
@@ -30,14 +24,16 @@ pub fn new(
     actions.add_action(&change_avatar);
 
     change_avatar.connect_activate(clone!(@weak window => move |a, _| {
+        let login_data = unwrap_or_unit_return!(op.lock().unwrap().login_data.clone());
+        let server_url = login_data.server_url;
+        let access_token = login_data.access_token;
+        let uid = login_data.uid;
+
         let filter = gtk::FileFilter::new();
         filter.add_mime_type("image/*");
         filter.set_name(Some(i18n("Images").as_str()));
         if let Some(path) = open(&window, i18n("Select a new avatar").as_str(), &[filter]) {
             a.change_state(&ButtonState::Insensitive.into());
-            let server_url = server_url.clone();
-            let access_token = access_token.clone();
-            let uid = uid.clone();
             thread::spawn(move || {
                 match user::set_user_avatar(server_url, access_token, uid, path) {
                     Ok(path) => {
diff --git a/fractal-gtk/src/app/connect/account.rs b/fractal-gtk/src/app/connect/account.rs
index d314f490..c3a7773e 100644
--- a/fractal-gtk/src/app/connect/account.rs
+++ b/fractal-gtk/src/app/connect/account.rs
@@ -9,7 +9,6 @@ use crate::actions::{AccountSettings, StateExt};
 impl App {
     pub fn connect_account_settings(&self) {
         let op = &self.op;
-        let login_data = unwrap_or_unit_return!(op.lock().unwrap().login_data.clone());
         let builder = &self.ui.builder;
         let cancel_password = self
             .ui
@@ -73,12 +72,7 @@ impl App {
             .expect("Can't find account_settings_delete_btn in ui file.");
 
         let window = self.main_window.upcast_ref::<gtk::Window>();
-        let actions = AccountSettings::new(
-            &window,
-            login_data.server_url,
-            login_data.access_token,
-            login_data.uid,
-        );
+        let actions = AccountSettings::new(&window, op.clone());
         let container = self
             .ui
             .builder


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]