mirror of
https://github.com/immich-app/immich
synced 2026-08-29 13:15:45 +00:00
make the repository an accessor
This commit is contained in:
parent
dd8fc833ba
commit
6bb68ab030
11 changed files with 26 additions and 35 deletions
|
|
@ -82,7 +82,7 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi {
|
|||
trashedLocalAssetRepository: db.trashedLocalAssetRepository,
|
||||
assetMediaRepository: ref.read(assetMediaRepositoryProvider),
|
||||
permissionRepository: ref.read(permissionRepositoryProvider),
|
||||
appMetadataRepository: ref.read(appMetadataRepositoryProvider),
|
||||
appMetadataRepository: db.appMetadataRepository,
|
||||
cancellation: _cancellationToken,
|
||||
);
|
||||
_remoteSyncService = SyncStreamService(
|
||||
|
|
@ -94,7 +94,7 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi {
|
|||
permissionRepository: ref.read(permissionRepositoryProvider),
|
||||
syncMigrationRepository: db.syncMigrationRepository,
|
||||
api: ref.read(apiServiceProvider),
|
||||
appMetadataRepository: ref.read(appMetadataRepositoryProvider),
|
||||
appMetadataRepository: db.appMetadataRepository,
|
||||
cancellation: _cancellationToken,
|
||||
);
|
||||
_hashService = HashService(
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
import 'package:drift/drift.dart';
|
||||
import 'package:immich_mobile/domain/models/app_metadata_key.dart';
|
||||
import 'package:immich_mobile/infrastructure/entities/app_metadata.entity.drift.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/app_metadata.repository.drift.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||
|
||||
class AppMetadataRepository {
|
||||
final Drift _db;
|
||||
@DriftAccessor()
|
||||
class AppMetadataRepository extends DatabaseAccessor<Drift> with $AppMetadataRepositoryMixin {
|
||||
AppMetadataRepository(super.attachedDatabase);
|
||||
|
||||
const AppMetadataRepository(this._db);
|
||||
Drift get _db => attachedDatabase;
|
||||
|
||||
Future<T> get<T>(AppMetadataKey<T> key) async {
|
||||
final row = await (_db.select(_db.appMetadataEntity)..where((row) => row.key.equals(key.name))).getSingleOrNull();
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import 'package:immich_mobile/infrastructure/entities/trashed_local_asset.entity
|
|||
import 'package:immich_mobile/infrastructure/entities/trashed_local_asset.entity.drift.dart';
|
||||
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/app_metadata.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/backup.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.drift.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.steps.dart';
|
||||
|
|
@ -93,6 +94,7 @@ import 'package:sqlite_async/sqlite_async.dart';
|
|||
],
|
||||
include: {'package:immich_mobile/infrastructure/entities/merged_asset.drift'},
|
||||
daos: [
|
||||
AppMetadataRepository,
|
||||
AuthUserRepository,
|
||||
BackupRepository,
|
||||
LocalAlbumRepository,
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
|||
import 'package:immich_mobile/extensions/platform_extensions.dart';
|
||||
import 'package:immich_mobile/generated/translations.g.dart';
|
||||
import 'package:immich_mobile/presentation/actions/action.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/app_metadata.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/toast.provider.dart';
|
||||
import 'package:immich_mobile/providers/server_info.provider.dart';
|
||||
import 'package:immich_mobile/providers/user.provider.dart';
|
||||
|
|
@ -218,7 +218,7 @@ Future<int> _cleanupLocalAssets(
|
|||
final requiresPrompt =
|
||||
requestCustomPrompt &&
|
||||
CurrentPlatform.isAndroid &&
|
||||
await ref.read(appMetadataRepositoryProvider).get(.manageLocalMediaAndroid);
|
||||
await ref.read(driftProvider).appMetadataRepository.get(.manageLocalMediaAndroid);
|
||||
|
||||
if (requiresPrompt && context.mounted) {
|
||||
final confirmed = await showDialog<bool>(
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/app_metadata.repository.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
|
||||
final appMetadataRepositoryProvider = Provider<AppMetadataRepository>(
|
||||
(ref) => AppMetadataRepository(ref.watch(driftProvider)),
|
||||
);
|
||||
|
|
@ -1,10 +1,5 @@
|
|||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/domain/services/asset.service.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/remote_asset.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/remote_exif.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/trashed_local_asset.repository.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/app_metadata.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/user.provider.dart';
|
||||
import 'package:immich_mobile/repositories/asset_api.repository.dart';
|
||||
|
|
@ -19,6 +14,7 @@ final assetServiceProvider = Provider((ref) {
|
|||
apiRepository: ref.watch(assetApiRepositoryProvider),
|
||||
mediaRepository: ref.watch(assetMediaRepositoryProvider),
|
||||
trashedLocalRepository: db.trashedLocalAssetRepository,
|
||||
appMetadataRepository: db.appMetadataRepository,
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@ import 'package:immich_mobile/domain/services/local_sync.service.dart';
|
|||
import 'package:immich_mobile/domain/services/sync_stream.service.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/sync_api.repository.dart';
|
||||
import 'package:immich_mobile/providers/api.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/app_metadata.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/cancel.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/platform.provider.dart';
|
||||
|
|
@ -24,7 +21,7 @@ final syncStreamServiceProvider = Provider((ref) {
|
|||
permissionRepository: ref.watch(permissionRepositoryProvider),
|
||||
syncMigrationRepository: db.syncMigrationRepository,
|
||||
api: ref.watch(apiServiceProvider),
|
||||
appMetadataRepository: ref.watch(appMetadataRepositoryProvider),
|
||||
appMetadataRepository: db.appMetadataRepository,
|
||||
cancellation: ref.watch(cancellationProvider),
|
||||
);
|
||||
});
|
||||
|
|
@ -40,7 +37,7 @@ final localSyncServiceProvider = Provider((ref) {
|
|||
assetMediaRepository: ref.watch(assetMediaRepositoryProvider),
|
||||
permissionRepository: ref.watch(permissionRepositoryProvider),
|
||||
nativeSyncApi: ref.watch(nativeSyncApiProvider),
|
||||
appMetadataRepository: ref.watch(appMetadataRepositoryProvider),
|
||||
appMetadataRepository: db.appMetadataRepository,
|
||||
cancellation: ref.watch(cancellationProvider),
|
||||
);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ Future<void> migrateDatabaseIfNeeded(Drift drift) async {
|
|||
.count(where: (row) => row.key.equals(AppMetadataKey.version.name))
|
||||
.map((count) => count == 0)
|
||||
.getSingle();
|
||||
final metadata = AppMetadataRepository(drift);
|
||||
final metadata = drift.appMetadataRepository;
|
||||
final version = await metadata.get(.version);
|
||||
|
||||
if (version < 25) {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import 'package:immich_mobile/domain/models/app_metadata_key.dart';
|
|||
import 'package:immich_mobile/domain/services/log.service.dart';
|
||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||
import 'package:immich_mobile/generated/translations.g.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/platform.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/readonly_mode.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/settings.provider.dart';
|
||||
|
|
@ -69,7 +70,8 @@ class AdvancedSettings extends HookConsumerWidget {
|
|||
|
||||
if (isManageMediaSupported.value) {
|
||||
manageLocalMediaAndroid.value = await ref
|
||||
.read(appMetadataRepositoryProvider)
|
||||
.read(driftProvider)
|
||||
.appMetadataRepository
|
||||
.get(AppMetadataKey.manageLocalMediaAndroid);
|
||||
if (!context.mounted) {
|
||||
return;
|
||||
|
|
@ -103,9 +105,9 @@ class AdvancedSettings extends HookConsumerWidget {
|
|||
if (!context.mounted) {
|
||||
return;
|
||||
}
|
||||
await ref.read(appMetadataRepositoryProvider).set(.manageLocalMediaAndroid, result);
|
||||
await ref.read(driftProvider).appMetadataRepository.set(.manageLocalMediaAndroid, result);
|
||||
} else {
|
||||
await ref.read(appMetadataRepositoryProvider).set(.manageLocalMediaAndroid, false);
|
||||
await ref.read(driftProvider).appMetadataRepository.set(.manageLocalMediaAndroid, false);
|
||||
}
|
||||
},
|
||||
),
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import 'dart:io';
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/domain/models/app_metadata_key.dart';
|
||||
import 'package:immich_mobile/domain/models/server_capability.model.dart';
|
||||
import 'package:immich_mobile/domain/services/local_album.service.dart';
|
||||
import 'package:immich_mobile/domain/services/memory.service.dart';
|
||||
|
|
@ -11,7 +12,6 @@ import 'package:immich_mobile/extensions/platform_extensions.dart';
|
|||
import 'package:immich_mobile/generated/translations.g.dart';
|
||||
import 'package:immich_mobile/providers/background_sync.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/app_metadata.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/storage.provider.dart';
|
||||
|
|
@ -223,7 +223,6 @@ class _SyncStatsCounts extends ConsumerWidget {
|
|||
final localAlbumService = LocalAlbumService(db.localAlbumRepository);
|
||||
final remoteAlbumService = ref.watch(remoteAlbumServiceProvider);
|
||||
final memoryService = DriftMemoryService(db.memoryRepository);
|
||||
final appSettingsService = ref.watch(appSettingsServiceProvider);
|
||||
|
||||
Future<List<dynamic>> loadCounts() async {
|
||||
final assetCounts = assetService.getAssetCounts();
|
||||
|
|
@ -231,7 +230,7 @@ class _SyncStatsCounts extends ConsumerWidget {
|
|||
final remoteAlbumCounts = remoteAlbumService.getCount();
|
||||
final memoryCount = memoryService.getCount();
|
||||
final getLocalHashedCount = assetService.getLocalHashedCount();
|
||||
final manageLocalMediaAndroid = appMetadataRepository.get(AppMetadataKey.manageLocalMediaAndroid);
|
||||
final manageLocalMediaAndroid = db.appMetadataRepository.get(AppMetadataKey.manageLocalMediaAndroid);
|
||||
|
||||
return await Future.wait([
|
||||
assetCounts,
|
||||
|
|
@ -343,8 +342,7 @@ class _SyncStatsCounts extends ConsumerWidget {
|
|||
),
|
||||
),
|
||||
// To be removed once the experimental feature is stable
|
||||
if (CurrentPlatform.isAndroid &&
|
||||
appSettingsService.getSetting<bool>(AppSettingsEnum.manageLocalMediaAndroid)) ...[
|
||||
if (CurrentPlatform.isAndroid && manageLocalMediaAndroid) ...[
|
||||
SettingGroupTitle(title: context.t.trash),
|
||||
Consumer(
|
||||
builder: (context, ref, _) {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/constants/locales.dart';
|
||||
import 'package:immich_mobile/domain/models/app_metadata_key.dart';
|
||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||
import 'package:immich_mobile/domain/models/user.model.dart';
|
||||
import 'package:immich_mobile/domain/services/store.service.dart';
|
||||
|
|
@ -16,7 +17,6 @@ import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'
|
|||
import 'package:immich_mobile/presentation/actions/action.dart';
|
||||
import 'package:immich_mobile/presentation/actions/action.widget.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/app_metadata.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/user.provider.dart';
|
||||
|
|
@ -64,12 +64,12 @@ class PresentationContext {
|
|||
serverInfoServiceProvider.overrideWithValue(service.serverInfo),
|
||||
inLockedViewProvider.overrideWithValue(false),
|
||||
assetMediaRepositoryProvider.overrideWithValue(repository.assetMedia.api),
|
||||
appMetadataRepositoryProvider.overrideWithValue(repository.metadata),
|
||||
];
|
||||
|
||||
Drift _mockDrift() {
|
||||
final drift = MockDrift();
|
||||
when(() => drift.remoteAssetRepository).thenReturn(repository.remoteAsset.repo);
|
||||
when(() => drift.appMetadataRepository).thenReturn(repository.metadata);
|
||||
return drift;
|
||||
}
|
||||
|
||||
|
|
@ -97,6 +97,7 @@ class PresentationContext {
|
|||
void setup() {
|
||||
when(service.user.tryGetMyUser).thenAnswer((_) async => currentUser);
|
||||
when(service.user.service.watchMyUser).thenAnswer((_) => Stream.value(currentUser));
|
||||
when(() => repository.metadata.get(AppMetadataKey.manageLocalMediaAndroid)).thenAnswer((_) async => false);
|
||||
}
|
||||
|
||||
Future<void> dispose() async {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue