Переглянути джерело

fix(mobile) - Allow sign out if server is down, or device is offline (#3275)

* WIP: Allow app sign out when server cannot be reached

* WIP: import logging lib

* WIP: move log out up
Dhrumil Shah 2 роки тому
батько
коміт
9012cf6946

+ 5 - 7
mobile/lib/modules/home/ui/profile_drawer/profile_drawer.dart

@@ -33,14 +33,12 @@ class ProfileDrawer extends HookConsumerWidget {
               ?.copyWith(fontWeight: FontWeight.bold),
         ).tr(),
         onTap: () async {
-          bool res = await ref.watch(authenticationProvider.notifier).logout();
+          await ref.watch(authenticationProvider.notifier).logout();
 
-          if (res) {
-            ref.watch(backupProvider.notifier).cancelBackup();
-            ref.watch(assetProvider.notifier).clearAllAsset();
-            ref.watch(websocketProvider.notifier).disconnect();
-            AutoRouter.of(context).replace(const LoginRoute());
-          }
+          ref.watch(backupProvider.notifier).cancelBackup();
+          ref.watch(assetProvider.notifier).clearAllAsset();
+          ref.watch(websocketProvider.notifier).disconnect();
+          AutoRouter.of(context).replace(const LoginRoute());
         },
       );
     }

+ 15 - 6
mobile/lib/modules/login/providers/authentication.provider.dart

@@ -14,6 +14,7 @@ import 'package:immich_mobile/shared/services/api.service.dart';
 import 'package:immich_mobile/utils/db.dart';
 import 'package:immich_mobile/utils/hash.dart';
 import 'package:isar/isar.dart';
+import 'package:logging/logging.dart';
 import 'package:openapi/api.dart';
 
 class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
@@ -92,21 +93,29 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
     }
   }
 
-  Future<bool> logout() async {
+  Future<void> logout() async {
+    var log = Logger('AuthenticationNotifier');
     try {
+
+      String? userEmail = Store.tryGet(StoreKey.currentUser)?.email;
+
+      _apiService.authenticationApi
+          .logout()
+          .then((_) => log.info("Logout was successfull for $userEmail"))
+          .onError(
+            (error, stackTrace) =>
+                log.severe("Error logging out $userEmail", error, stackTrace),
+          );
+
       await Future.wait([
-        _apiService.authenticationApi.logout(),
         clearAssetsAndAlbums(_db),
         Store.delete(StoreKey.currentUser),
         Store.delete(StoreKey.accessToken),
       ]);
 
       state = state.copyWith(isAuthenticated: false);
-
-      return true;
     } catch (e) {
-      debugPrint("Error logging out $e");
-      return false;
+      log.severe("Error logging out $e");
     }
   }
 

+ 5 - 8
mobile/lib/modules/login/ui/change_password_form.dart

@@ -75,18 +75,15 @@ class ChangePasswordForm extends HookConsumerWidget {
                               .changePassword(passwordController.value.text);
 
                           if (isSuccess) {
-                            bool res = await ref
+                            await ref
                                 .read(authenticationProvider.notifier)
                                 .logout();
 
-                            if (res) {
-                              ref.read(backupProvider.notifier).cancelBackup();
-                              ref.read(assetProvider.notifier).clearAllAsset();
-                              ref.read(websocketProvider.notifier).disconnect();
+                            ref.read(backupProvider.notifier).cancelBackup();
+                            ref.read(assetProvider.notifier).clearAllAsset();
+                            ref.read(websocketProvider.notifier).disconnect();
 
-                              AutoRouter.of(context)
-                                  .replace(const LoginRoute());
-                            }
+                            AutoRouter.of(context).replace(const LoginRoute());
                           }
                         }
                       },