diff --git a/mobile/lib/domain/services/background_worker.service.dart b/mobile/lib/domain/services/background_worker.service.dart index d4da3e31a4..a2e96f2313 100644 --- a/mobile/lib/domain/services/background_worker.service.dart +++ b/mobile/lib/domain/services/background_worker.service.dart @@ -176,15 +176,8 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi { final backgroundSyncManager = _ref?.read(backgroundSyncProvider); final nativeSyncApi = _ref?.read(nativeSyncApiProvider); - await _drift.close(); - await _driftLogger.close(); - - _ref?.dispose(); - _ref = null; - - _cancellationToken.complete(); _logger.info("Cleaning up background worker"); - + _cancellationToken.complete(); final cleanupFutures = [ nativeSyncApi?.cancelHashing(), workerManagerPatch.dispose().catchError((_) async { @@ -195,10 +188,15 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi { Store.dispose(), backgroundSyncManager?.cancel(), + _drift.optimize(allTables: true), ]; await Future.wait(cleanupFutures.nonNulls); - _logger.info("Background worker resources cleaned up"); + await _drift.close(); + await _driftLogger.close(); + + _ref?.dispose(); + _ref = null; } catch (error, stack) { dPrint(() => 'Failed to cleanup background worker: $error with stack: $stack'); } diff --git a/mobile/lib/infrastructure/repositories/db.repository.dart b/mobile/lib/infrastructure/repositories/db.repository.dart index 57d9e4f806..b291207e42 100644 --- a/mobile/lib/infrastructure/repositories/db.repository.dart +++ b/mobile/lib/infrastructure/repositories/db.repository.dart @@ -30,6 +30,7 @@ import 'package:immich_mobile/infrastructure/entities/user.entity.dart'; import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.drift.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.steps.dart'; +import 'package:logging/logging.dart'; @DriftDatabase( tables: [ @@ -85,6 +86,17 @@ class Drift extends $Drift { }); } + Future optimize({bool allTables = false}) async { + try { + if (allTables) { + await customStatement('PRAGMA optimize=0x10002'); + } + await customStatement('PRAGMA optimize'); + } catch (error) { + Logger('Drift').fine('Failed to optimize database', error); + } + } + @override int get schemaVersion => 25; @@ -265,6 +277,7 @@ class Drift extends $Drift { } await customStatement('PRAGMA foreign_keys = ON;'); + await optimize(); }, beforeOpen: (details) async { await customStatement('PRAGMA foreign_keys = ON');