mirror of
https://github.com/immich-app/immich
synced 2026-08-15 13:03:57 +00:00
fix(mobile): migrate legacy manage-media flag through the boolean migration path
This commit is contained in:
parent
57ac0ec86d
commit
d3b04378cc
2 changed files with 37 additions and 13 deletions
|
|
@ -155,7 +155,7 @@ Future<void> _migrateTo26(Drift drift) async {
|
|||
|
||||
Future<void> _migrateTo27(Drift drift) async {
|
||||
final migrator = _StoreMigrator(drift);
|
||||
await migrator.migrateTrashSyncMode(.legacyManageLocalMediaAndroid);
|
||||
await migrator.migrateBool(.legacyManageLocalMediaAndroid, .trashSyncEnabled);
|
||||
await migrator.complete();
|
||||
}
|
||||
|
||||
|
|
@ -275,18 +275,6 @@ class _StoreMigrator {
|
|||
_migratedStoreIds.add(legacyKey.id);
|
||||
}
|
||||
|
||||
Future<void> migrateTrashSyncMode(StoreKey<bool> legacyKey) async {
|
||||
final intValue = await readLegacyStoreInt(legacyKey.id);
|
||||
if (intValue == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (intValue != 0) {
|
||||
_cache[SettingsKey.trashSyncMode] = TrashSyncMode.autoSync;
|
||||
}
|
||||
_migratedStoreIds.add(legacyKey.id);
|
||||
}
|
||||
|
||||
Future<void> migrateLegacyTrashSyncSetting() async {
|
||||
final row = await (_db.settingsEntity.select()..where((row) => row.key.equals(SettingsKey.trashSyncEnabled.name)))
|
||||
.getSingleOrNull();
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import 'package:immich_mobile/domain/models/store.model.dart';
|
|||
import 'package:immich_mobile/domain/services/store.service.dart';
|
||||
import 'package:immich_mobile/entities/store.entity.dart';
|
||||
import 'package:immich_mobile/infrastructure/entities/settings.entity.drift.dart';
|
||||
import 'package:immich_mobile/infrastructure/entities/store.entity.drift.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/store.repository.dart';
|
||||
import 'package:immich_mobile/utils/migration.dart';
|
||||
|
|
@ -54,6 +55,37 @@ void main() {
|
|||
expect(await _readSetting(db, SettingsKey.trashSyncMode), isNull);
|
||||
expect(await _readSetting(db, SettingsKey.trashSyncEnabled), isNull);
|
||||
});
|
||||
|
||||
group('fresh install migrating from before version 27', () {
|
||||
setUp(() => Store.put(StoreKey.version, 26));
|
||||
|
||||
test('carries an enabled legacy manage-media setting through steps 27 and 28 into a mode', () async {
|
||||
await Store.put(StoreKey.legacyManageLocalMediaAndroid, true);
|
||||
|
||||
await migrateDatabaseIfNeeded(db);
|
||||
|
||||
expect(await _readSetting(db, SettingsKey.trashSyncMode), TrashSyncMode.autoSync);
|
||||
expect(await _readSetting(db, SettingsKey.trashSyncEnabled), isNull);
|
||||
expect(await _readLegacyStoreRow(db, StoreKey.legacyManageLocalMediaAndroid), isNull);
|
||||
});
|
||||
|
||||
test('drops a disabled legacy manage-media setting without creating a mode', () async {
|
||||
await Store.put(StoreKey.legacyManageLocalMediaAndroid, false);
|
||||
|
||||
await migrateDatabaseIfNeeded(db);
|
||||
|
||||
expect(await _readSetting(db, SettingsKey.trashSyncMode), isNull);
|
||||
expect(await _readSetting(db, SettingsKey.trashSyncEnabled), isNull);
|
||||
expect(await _readLegacyStoreRow(db, StoreKey.legacyManageLocalMediaAndroid), isNull);
|
||||
});
|
||||
|
||||
test('leaves an absent legacy manage-media setting at the default mode', () async {
|
||||
await migrateDatabaseIfNeeded(db);
|
||||
|
||||
expect(await _readSetting(db, SettingsKey.trashSyncMode), isNull);
|
||||
expect(await _readSetting(db, SettingsKey.trashSyncEnabled), isNull);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _writeSetting<T>(Drift db, SettingsKey<T> key, T value) {
|
||||
|
|
@ -66,3 +98,7 @@ Future<T?> _readSetting<T>(Drift db, SettingsKey<T> key) async {
|
|||
final row = await (db.settingsEntity.select()..where((row) => row.key.equals(key.name))).getSingleOrNull();
|
||||
return row?.value == null ? null : key.decode(row!.value!);
|
||||
}
|
||||
|
||||
Future<StoreEntityData?> _readLegacyStoreRow(Drift db, StoreKey key) {
|
||||
return (db.storeEntity.select()..where((row) => row.id.equals(key.id))).getSingleOrNull();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue