From e8a9a2209d1b9ad0b99fb6ca1b5e9cd3d935f9fc Mon Sep 17 00:00:00 2001 From: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:57:16 +0530 Subject: [PATCH] conflict resolution --- .../services/background_worker.service.dart | 4 +- .../lib/pages/common/splash_screen.page.dart | 64 ++++++++++--------- .../advanced_info_action_button.widget.dart | 4 +- .../backup/manual_upload.provider.dart | 5 +- .../infrastructure/action.provider.dart | 6 +- mobile/lib/services/api.service.dart | 6 +- .../asset_viewer/detail_panel/exif_map.dart | 5 +- .../lib/widgets/forms/login/login_form.dart | 8 +-- .../settings/beta_timeline_list_tile.dart | 4 +- .../domain/services/store_service_test.dart | 2 +- 10 files changed, 60 insertions(+), 48 deletions(-) diff --git a/mobile/lib/domain/services/background_worker.service.dart b/mobile/lib/domain/services/background_worker.service.dart index 63c17399f6..6f18f55d2f 100644 --- a/mobile/lib/domain/services/background_worker.service.dart +++ b/mobile/lib/domain/services/background_worker.service.dart @@ -106,10 +106,10 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi { } // Notify the host that the background worker service has been initialized and is ready to use - _backgroundHostApi.onInitialized(); + unawaited(_backgroundHostApi.onInitialized()); } catch (error, stack) { _logger.severe("Failed to initialize background worker", error, stack); - await _backgroundHostApi.close(); + unawaited(_backgroundHostApi.close()); } } diff --git a/mobile/lib/pages/common/splash_screen.page.dart b/mobile/lib/pages/common/splash_screen.page.dart index f288464c42..da217b769b 100644 --- a/mobile/lib/pages/common/splash_screen.page.dart +++ b/mobile/lib/pages/common/splash_screen.page.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; @@ -53,39 +55,41 @@ class SplashScreenPageState extends ConsumerState { final backgroundManager = ref.read(backgroundSyncProvider); final backupProvider = ref.read(driftBackupProvider.notifier); - ref.read(authProvider.notifier).saveAuthInfo(accessToken: accessToken).then( - (_) async { - try { - wsProvider.connect(); - infoProvider.getServerInfo(); + unawaited( + ref.read(authProvider.notifier).saveAuthInfo(accessToken: accessToken).then( + (_) async { + try { + wsProvider.connect(); + unawaited(infoProvider.getServerInfo()); - if (Store.isBetaTimelineEnabled) { - await Future.wait([backgroundManager.syncLocal(), backgroundManager.syncRemote()]); - await Future.wait([ - backgroundManager.hashAssets().then((_) { - _resumeBackup(backupProvider); - }), - _resumeBackup(backupProvider), - ]); + if (Store.isBetaTimelineEnabled) { + await Future.wait([backgroundManager.syncLocal(), backgroundManager.syncRemote()]); + await Future.wait([ + backgroundManager.hashAssets().then((_) { + _resumeBackup(backupProvider); + }), + _resumeBackup(backupProvider), + ]); - if (Store.get(StoreKey.syncAlbums, false)) { - await backgroundManager.syncLinkedAlbum(); + if (Store.get(StoreKey.syncAlbums, false)) { + await backgroundManager.syncLinkedAlbum(); + } } + } catch (e) { + log.severe('Failed establishing connection to the server: $e'); } - } catch (e) { - log.severe('Failed establishing connection to the server: $e'); - } - }, - onError: (exception) => { - log.severe('Failed to update auth info with access token: $accessToken'), - ref.read(authProvider.notifier).logout(), - context.replaceRoute(const LoginRoute()), - }, + }, + onError: (exception) => { + log.severe('Failed to update auth info with access token: $accessToken'), + ref.read(authProvider.notifier).logout(), + context.replaceRoute(const LoginRoute()), + }, + ), ); } else { log.severe('Missing crucial offline login info - Logging out completely'); - ref.read(authProvider.notifier).logout(); - context.replaceRoute(const LoginRoute()); + unawaited(ref.read(authProvider.notifier).logout()); + unawaited(context.replaceRoute(const LoginRoute())); return; } @@ -95,11 +99,11 @@ class SplashScreenPageState extends ConsumerState { final needBetaMigration = Store.get(StoreKey.needBetaMigration, false); if (needBetaMigration) { await Store.put(StoreKey.needBetaMigration, false); - context.router.replaceAll([ChangeExperienceRoute(switchingToBeta: true)]); + unawaited(context.router.replaceAll([ChangeExperienceRoute(switchingToBeta: true)])); return; } - context.replaceRoute(Store.isBetaTimelineEnabled ? const TabShellRoute() : const TabControllerRoute()); + unawaited(context.replaceRoute(Store.isBetaTimelineEnabled ? const TabShellRoute() : const TabControllerRoute())); } if (Store.isBetaTimelineEnabled) { @@ -109,7 +113,7 @@ class SplashScreenPageState extends ConsumerState { final hasPermission = await ref.read(galleryPermissionNotifier.notifier).hasPermission; if (hasPermission) { // Resume backup (if enable) then navigate - ref.watch(backupProvider.notifier).resumeBackup(); + unawaited(ref.watch(backupProvider.notifier).resumeBackup()); } } @@ -119,7 +123,7 @@ class SplashScreenPageState extends ConsumerState { if (isEnableBackup) { final currentUser = Store.tryGet(StoreKey.currentUser); if (currentUser != null) { - notifier.handleBackupResume(currentUser.id); + unawaited(notifier.handleBackupResume(currentUser.id)); } } } diff --git a/mobile/lib/presentation/widgets/action_buttons/advanced_info_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/advanced_info_action_button.widget.dart index 170f827fdb..cb2581bc6d 100644 --- a/mobile/lib/presentation/widgets/action_buttons/advanced_info_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/advanced_info_action_button.widget.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/enums.dart'; @@ -15,7 +17,7 @@ class AdvancedInfoActionButton extends ConsumerWidget { return; } - ref.read(actionProvider.notifier).troubleshoot(source, context); + unawaited(ref.read(actionProvider.notifier).troubleshoot(source, context)); } @override diff --git a/mobile/lib/providers/backup/manual_upload.provider.dart b/mobile/lib/providers/backup/manual_upload.provider.dart index bfc079bfa3..6ad8730356 100644 --- a/mobile/lib/providers/backup/manual_upload.provider.dart +++ b/mobile/lib/providers/backup/manual_upload.provider.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:io'; import 'package:cancellation_token_http/http.dart'; @@ -26,11 +27,11 @@ import 'package:immich_mobile/services/backup.service.dart'; import 'package:immich_mobile/services/backup_album.service.dart'; import 'package:immich_mobile/services/local_notification.service.dart'; import 'package:immich_mobile/utils/backup_progress.dart'; +import 'package:immich_mobile/utils/debug_print.dart'; import 'package:immich_mobile/widgets/common/immich_toast.dart'; import 'package:logging/logging.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:photo_manager/photo_manager.dart' show PMProgressHandler; -import 'package:immich_mobile/utils/debug_print.dart'; final manualUploadProvider = StateNotifierProvider((ref) { return ManualUploadNotifier( @@ -294,7 +295,7 @@ class ManualUploadNotifier extends StateNotifier { ); } } else { - openAppSettings(); + unawaited(openAppSettings()); dPrint(() => "[_startUpload] Do not have permission to the gallery"); } } catch (e) { diff --git a/mobile/lib/providers/infrastructure/action.provider.dart b/mobile/lib/providers/infrastructure/action.provider.dart index 03e2dfc6d5..627b563805 100644 --- a/mobile/lib/providers/infrastructure/action.provider.dart +++ b/mobile/lib/providers/infrastructure/action.provider.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:auto_route/auto_route.dart'; import 'package:background_downloader/background_downloader.dart'; import 'package:flutter/material.dart'; @@ -64,7 +66,7 @@ class ActionNotifier extends Notifier { void _downloadLivePhotoCallback(TaskStatusUpdate update) async { if (update.status == TaskStatus.complete) { final livePhotosId = LivePhotosMetadata.fromJson(update.task.metaData).id; - _downloadService.saveLivePhotos(update.task, livePhotosId); + unawaited(_downloadService.saveLivePhotos(update.task, livePhotosId)); } } @@ -122,7 +124,7 @@ class ActionNotifier extends Notifier { if (assets.length > 1) { return ActionResult(count: assets.length, success: false, error: 'Cannot troubleshoot multiple assets'); } - context.pushRoute(AssetTroubleshootRoute(asset: assets.first)); + unawaited(context.pushRoute(AssetTroubleshootRoute(asset: assets.first))); return ActionResult(count: assets.length, success: true); } diff --git a/mobile/lib/services/api.service.dart b/mobile/lib/services/api.service.dart index 4033ffb184..3cc7fcbc6d 100644 --- a/mobile/lib/services/api.service.dart +++ b/mobile/lib/services/api.service.dart @@ -6,11 +6,11 @@ import 'package:device_info_plus/device_info_plus.dart'; import 'package:http/http.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/entities/store.entity.dart'; +import 'package:immich_mobile/utils/debug_print.dart'; import 'package:immich_mobile/utils/url_helper.dart'; +import 'package:immich_mobile/utils/user_agent.dart'; import 'package:logging/logging.dart'; import 'package:openapi/api.dart'; -import 'package:immich_mobile/utils/user_agent.dart'; -import 'package:immich_mobile/utils/debug_print.dart'; class ApiService implements Authentication { late ApiClient _apiClient; @@ -86,7 +86,7 @@ class ApiService implements Authentication { setEndpoint(endpoint); // Save in local database for next startup - Store.put(StoreKey.serverEndpoint, endpoint); + unawaited(Store.put(StoreKey.serverEndpoint, endpoint)); return endpoint; } diff --git a/mobile/lib/widgets/asset_viewer/detail_panel/exif_map.dart b/mobile/lib/widgets/asset_viewer/detail_panel/exif_map.dart index 0edafa88c5..893e534084 100644 --- a/mobile/lib/widgets/asset_viewer/detail_panel/exif_map.dart +++ b/mobile/lib/widgets/asset_viewer/detail_panel/exif_map.dart @@ -1,11 +1,12 @@ +import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:immich_mobile/domain/models/exif.model.dart'; +import 'package:immich_mobile/utils/debug_print.dart'; import 'package:immich_mobile/widgets/map/map_thumbnail.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:immich_mobile/utils/debug_print.dart'; class ExifMap extends StatelessWidget { final ExifInfo exifInfo; @@ -68,7 +69,7 @@ class ExifMap extends StatelessWidget { } dPrint(() => 'Opening Map Uri: $uri'); - launchUrl(uri); + unawaited(launchUrl(uri)); }, onCreated: onMapCreated, ); diff --git a/mobile/lib/widgets/forms/login/login_form.dart b/mobile/lib/widgets/forms/login/login_form.dart index e85112d8f8..7b7adcf99d 100644 --- a/mobile/lib/widgets/forms/login/login_form.dart +++ b/mobile/lib/widgets/forms/login/login_form.dart @@ -193,8 +193,8 @@ class LoginForm extends HookConsumerWidget { final isBeta = Store.isBetaTimelineEnabled; if (isBeta) { await ref.read(galleryPermissionNotifier.notifier).requestGalleryPermission(); - handleSyncFlow(); - context.replaceRoute(const TabShellRoute()); + unawaited(handleSyncFlow()); + unawaited(context.replaceRoute(const TabShellRoute())); return; } unawaited(context.replaceRoute(const TabControllerRoute())); @@ -291,8 +291,8 @@ class LoginForm extends HookConsumerWidget { } if (isBeta) { await ref.read(galleryPermissionNotifier.notifier).requestGalleryPermission(); - handleSyncFlow(); - context.replaceRoute(const TabShellRoute()); + unawaited(handleSyncFlow()); + unawaited(context.replaceRoute(const TabShellRoute())); return; } unawaited(context.replaceRoute(const TabControllerRoute())); diff --git a/mobile/lib/widgets/settings/beta_timeline_list_tile.dart b/mobile/lib/widgets/settings/beta_timeline_list_tile.dart index 326d6c49d1..4238089fad 100644 --- a/mobile/lib/widgets/settings/beta_timeline_list_tile.dart +++ b/mobile/lib/widgets/settings/beta_timeline_list_tile.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:auto_route/auto_route.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -45,7 +47,7 @@ class BetaTimelineListTile extends ConsumerWidget { ElevatedButton( onPressed: () async { Navigator.of(context).pop(); - context.router.replaceAll([ChangeExperienceRoute(switchingToBeta: value)]); + unawaited(context.router.replaceAll([ChangeExperienceRoute(switchingToBeta: value)])); }, child: Text("ok".t(context: context)), ), diff --git a/mobile/test/domain/services/store_service_test.dart b/mobile/test/domain/services/store_service_test.dart index cd79afba60..996170b518 100644 --- a/mobile/test/domain/services/store_service_test.dart +++ b/mobile/test/domain/services/store_service_test.dart @@ -53,7 +53,7 @@ void main() { }); tearDown(() async { - sut.dispose(); + unawaited(sut.dispose()); await controller.close(); });