mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
move album config
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
|
||||||
|
|
||||||
|
class AlbumConfig {
|
||||||
|
final AlbumSortMode sortMode;
|
||||||
|
final bool isReverse;
|
||||||
|
final bool isGrid;
|
||||||
|
|
||||||
|
const AlbumConfig({this.sortMode = AlbumSortMode.mostRecent, this.isReverse = true, this.isGrid = false});
|
||||||
|
|
||||||
|
AlbumConfig copyWith({AlbumSortMode? sortMode, bool? isReverse, bool? isGrid}) =>
|
||||||
|
AlbumConfig(sortMode: sortMode ?? this.sortMode, isReverse: isReverse ?? this.isReverse, isGrid: isGrid ?? this.isGrid);
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) =>
|
||||||
|
identical(this, other) ||
|
||||||
|
(other is AlbumConfig && other.sortMode == sortMode && other.isReverse == isReverse && other.isGrid == isGrid);
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(sortMode, isReverse, isGrid);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() => 'AlbumConfig(sortMode: $sortMode, isReverse: $isReverse, isGrid: $isGrid)';
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:immich_mobile/domain/models/config/album_config.dart';
|
||||||
import 'package:immich_mobile/domain/models/config/cleanup_config.dart';
|
import 'package:immich_mobile/domain/models/config/cleanup_config.dart';
|
||||||
import 'package:immich_mobile/domain/models/config/image_config.dart';
|
import 'package:immich_mobile/domain/models/config/image_config.dart';
|
||||||
import 'package:immich_mobile/domain/models/config/map_config.dart';
|
import 'package:immich_mobile/domain/models/config/map_config.dart';
|
||||||
@@ -12,6 +13,7 @@ class AppConfig {
|
|||||||
final TimelineConfig timeline;
|
final TimelineConfig timeline;
|
||||||
final ImageConfig image;
|
final ImageConfig image;
|
||||||
final ViewerConfig viewer;
|
final ViewerConfig viewer;
|
||||||
|
final AlbumConfig album;
|
||||||
|
|
||||||
const AppConfig({
|
const AppConfig({
|
||||||
this.theme = const .new(),
|
this.theme = const .new(),
|
||||||
@@ -20,6 +22,7 @@ class AppConfig {
|
|||||||
this.timeline = const .new(),
|
this.timeline = const .new(),
|
||||||
this.image = const .new(),
|
this.image = const .new(),
|
||||||
this.viewer = const .new(),
|
this.viewer = const .new(),
|
||||||
|
this.album = const .new(),
|
||||||
});
|
});
|
||||||
|
|
||||||
AppConfig copyWith({
|
AppConfig copyWith({
|
||||||
@@ -29,6 +32,7 @@ class AppConfig {
|
|||||||
TimelineConfig? timeline,
|
TimelineConfig? timeline,
|
||||||
ImageConfig? image,
|
ImageConfig? image,
|
||||||
ViewerConfig? viewer,
|
ViewerConfig? viewer,
|
||||||
|
AlbumConfig? album,
|
||||||
}) => .new(
|
}) => .new(
|
||||||
theme: theme ?? this.theme,
|
theme: theme ?? this.theme,
|
||||||
cleanup: cleanup ?? this.cleanup,
|
cleanup: cleanup ?? this.cleanup,
|
||||||
@@ -36,6 +40,7 @@ class AppConfig {
|
|||||||
timeline: timeline ?? this.timeline,
|
timeline: timeline ?? this.timeline,
|
||||||
image: image ?? this.image,
|
image: image ?? this.image,
|
||||||
viewer: viewer ?? this.viewer,
|
viewer: viewer ?? this.viewer,
|
||||||
|
album: album ?? this.album,
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -47,12 +52,13 @@ class AppConfig {
|
|||||||
other.map == map &&
|
other.map == map &&
|
||||||
other.timeline == timeline &&
|
other.timeline == timeline &&
|
||||||
other.image == image &&
|
other.image == image &&
|
||||||
other.viewer == viewer);
|
other.viewer == viewer &&
|
||||||
|
other.album == album);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(theme, cleanup, map, timeline, image, viewer);
|
int get hashCode => Object.hash(theme, cleanup, map, timeline, image, viewer, album);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() =>
|
String toString() =>
|
||||||
'AppConfig(theme: $theme, cleanup: $cleanup, map: $map, timeline: $timeline, image: $image, viewer: $viewer)';
|
'AppConfig(theme: $theme, cleanup: $cleanup, map: $map, timeline: $timeline, image: $image, viewer: $viewer, album: $album)';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:immich_mobile/domain/models/config/app_config.dart';
|
|||||||
import 'package:immich_mobile/domain/models/config/system_config.dart';
|
import 'package:immich_mobile/domain/models/config/system_config.dart';
|
||||||
import 'package:immich_mobile/domain/models/log.model.dart';
|
import 'package:immich_mobile/domain/models/log.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/timeline.model.dart';
|
import 'package:immich_mobile/domain/models/timeline.model.dart';
|
||||||
|
import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
|
||||||
|
|
||||||
enum MetadataDomain<T extends Object> {
|
enum MetadataDomain<T extends Object> {
|
||||||
appConfig<AppConfig>('config.app'),
|
appConfig<AppConfig>('config.app'),
|
||||||
@@ -51,6 +52,16 @@ enum MetadataKey<T extends Object> {
|
|||||||
_MapCodec(_PrimitiveCodec.string, _PrimitiveCodec.string),
|
_MapCodec(_PrimitiveCodec.string, _PrimitiveCodec.string),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// Album
|
||||||
|
albumSortMode<AlbumSortMode>(
|
||||||
|
.appConfig,
|
||||||
|
'album.sortMode',
|
||||||
|
AlbumSortMode.mostRecent,
|
||||||
|
_EnumCodec(AlbumSortMode.values),
|
||||||
|
),
|
||||||
|
albumIsReverse<bool>(.appConfig, 'album.isReverse', true),
|
||||||
|
albumIsGrid<bool>(.appConfig, 'album.isGrid', false),
|
||||||
|
|
||||||
// Timeline
|
// Timeline
|
||||||
timelineTilesPerRow<int>(.appConfig, 'timeline.tilesPerRow', 4),
|
timelineTilesPerRow<int>(.appConfig, 'timeline.tilesPerRow', 4),
|
||||||
timelineGroupAssetsBy<GroupAssetsBy>(
|
timelineGroupAssetsBy<GroupAssetsBy>(
|
||||||
|
|||||||
@@ -11,16 +11,13 @@ enum StoreKey<T> {
|
|||||||
serverUrl<String>._(10),
|
serverUrl<String>._(10),
|
||||||
accessToken<String>._(11),
|
accessToken<String>._(11),
|
||||||
serverEndpoint<String>._(12),
|
serverEndpoint<String>._(12),
|
||||||
selectedAlbumSortOrder<int>._(113),
|
|
||||||
advancedTroubleshooting<bool>._(114),
|
advancedTroubleshooting<bool>._(114),
|
||||||
selectedAlbumSortReverse<bool>._(123),
|
|
||||||
enableHapticFeedback<bool>._(126),
|
enableHapticFeedback<bool>._(126),
|
||||||
syncAlbums<bool>._(131),
|
syncAlbums<bool>._(131),
|
||||||
|
|
||||||
manageLocalMediaAndroid<bool>._(137),
|
manageLocalMediaAndroid<bool>._(137),
|
||||||
// Read-only Mode settings
|
// Read-only Mode settings
|
||||||
readonlyModeEnabled<bool>._(138),
|
readonlyModeEnabled<bool>._(138),
|
||||||
albumGridView<bool>._(140),
|
|
||||||
|
|
||||||
// Experimental stuff
|
// Experimental stuff
|
||||||
enableBackup<bool>._(1003),
|
enableBackup<bool>._(1003),
|
||||||
@@ -29,6 +26,9 @@ enum StoreKey<T> {
|
|||||||
syncMigrationStatus<String>._(1013),
|
syncMigrationStatus<String>._(1013),
|
||||||
|
|
||||||
// Legacy keys that have been migrated to the new metadata store
|
// Legacy keys that have been migrated to the new metadata store
|
||||||
|
legacySelectedAlbumSortOrder<int>._(113),
|
||||||
|
legacySelectedAlbumSortReverse<bool>._(123),
|
||||||
|
legacyAlbumGridView<bool>._(140),
|
||||||
legacyAutoEndpointSwitching<bool>._(132),
|
legacyAutoEndpointSwitching<bool>._(132),
|
||||||
legacyPreferredWifiName<String>._(133),
|
legacyPreferredWifiName<String>._(133),
|
||||||
legacyLocalEndpoint<String>._(134),
|
legacyLocalEndpoint<String>._(134),
|
||||||
|
|||||||
@@ -134,6 +134,11 @@ extension<T extends Object> on MetadataDomain<T> {
|
|||||||
autoPlayVideo: repo._read(.viewerAutoPlayVideo),
|
autoPlayVideo: repo._read(.viewerAutoPlayVideo),
|
||||||
tapToNavigate: repo._read(.viewerTapToNavigate),
|
tapToNavigate: repo._read(.viewerTapToNavigate),
|
||||||
),
|
),
|
||||||
|
album: .new(
|
||||||
|
sortMode: repo._read(.albumSortMode),
|
||||||
|
isReverse: repo._read(.albumIsReverse),
|
||||||
|
isGrid: repo._read(.albumIsGrid),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
case .systemConfig:
|
case .systemConfig:
|
||||||
repo._systemConfig = .new(
|
repo._systemConfig = .new(
|
||||||
|
|||||||
@@ -15,15 +15,15 @@ import 'package:immich_mobile/models/albums/album_search.model.dart';
|
|||||||
import 'package:immich_mobile/presentation/widgets/album/album_tile.dart';
|
import 'package:immich_mobile/presentation/widgets/album/album_tile.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/album/new_album_name_modal.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/album/new_album_name_modal.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart';
|
||||||
|
import 'package:immich_mobile/domain/models/metadata_key.dart';
|
||||||
import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
|
import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
|
||||||
import 'package:immich_mobile/providers/app_settings.provider.dart';
|
|
||||||
import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart';
|
import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/album.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/infrastructure/metadata.provider.dart';
|
||||||
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
|
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
|
||||||
import 'package:immich_mobile/providers/user.provider.dart';
|
import 'package:immich_mobile/providers/user.provider.dart';
|
||||||
import 'package:immich_mobile/routing/router.dart';
|
import 'package:immich_mobile/routing/router.dart';
|
||||||
import 'package:immich_mobile/services/app_settings.service.dart';
|
|
||||||
import 'package:immich_mobile/utils/album_filter.utils.dart';
|
import 'package:immich_mobile/utils/album_filter.utils.dart';
|
||||||
import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
|
import 'package:immich_mobile/widgets/common/confirm_dialog.dart';
|
||||||
import 'package:immich_mobile/widgets/common/immich_toast.dart';
|
import 'package:immich_mobile/widgets/common/immich_toast.dart';
|
||||||
@@ -58,19 +58,11 @@ class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
final appSettings = ref.read(appSettingsServiceProvider);
|
final albumConfig = ref.read(metadataProvider).appConfig.album;
|
||||||
final savedSortMode = appSettings.getSetting(AppSettingsEnum.selectedAlbumSortOrder);
|
|
||||||
final savedIsReverse = appSettings.getSetting(AppSettingsEnum.selectedAlbumSortReverse);
|
|
||||||
final savedIsGrid = appSettings.getSetting(AppSettingsEnum.albumGridView);
|
|
||||||
|
|
||||||
final albumSortMode = AlbumSortMode.values.firstWhere(
|
|
||||||
(e) => e.storeIndex == savedSortMode,
|
|
||||||
orElse: () => AlbumSortMode.lastModified,
|
|
||||||
);
|
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
sort = AlbumSort(mode: albumSortMode, isReverse: savedIsReverse);
|
sort = AlbumSort(mode: albumConfig.sortMode, isReverse: albumConfig.isReverse);
|
||||||
isGrid = savedIsGrid;
|
isGrid = albumConfig.isGrid;
|
||||||
});
|
});
|
||||||
|
|
||||||
ref.read(remoteAlbumProvider.notifier).refresh();
|
ref.read(remoteAlbumProvider.notifier).refresh();
|
||||||
@@ -102,7 +94,7 @@ class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
isGrid = !isGrid;
|
isGrid = !isGrid;
|
||||||
});
|
});
|
||||||
ref.read(appSettingsServiceProvider).setSetting(AppSettingsEnum.albumGridView, isGrid);
|
ref.read(metadataProvider).write(MetadataKey.albumIsGrid, isGrid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void changeFilter(QuickFilterMode mode) {
|
void changeFilter(QuickFilterMode mode) {
|
||||||
@@ -118,9 +110,9 @@ class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
|||||||
this.sort = sort;
|
this.sort = sort;
|
||||||
});
|
});
|
||||||
|
|
||||||
final appSettings = ref.read(appSettingsServiceProvider);
|
final metadata = ref.read(metadataProvider);
|
||||||
await appSettings.setSetting(AppSettingsEnum.selectedAlbumSortOrder, sort.mode.storeIndex);
|
await metadata.write(MetadataKey.albumSortMode, sort.mode);
|
||||||
await appSettings.setSetting(AppSettingsEnum.selectedAlbumSortReverse, sort.isReverse);
|
await metadata.write(MetadataKey.albumIsReverse, sort.isReverse);
|
||||||
|
|
||||||
await sortAlbums();
|
await sortAlbums();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,14 @@ import 'package:immich_mobile/domain/models/store.model.dart';
|
|||||||
import 'package:immich_mobile/entities/store.entity.dart';
|
import 'package:immich_mobile/entities/store.entity.dart';
|
||||||
|
|
||||||
enum AppSettingsEnum<T> {
|
enum AppSettingsEnum<T> {
|
||||||
selectedAlbumSortOrder<int>(StoreKey.selectedAlbumSortOrder, "selectedAlbumSortOrder", 2),
|
|
||||||
advancedTroubleshooting<bool>(StoreKey.advancedTroubleshooting, null, false),
|
advancedTroubleshooting<bool>(StoreKey.advancedTroubleshooting, null, false),
|
||||||
manageLocalMediaAndroid<bool>(StoreKey.manageLocalMediaAndroid, null, false),
|
manageLocalMediaAndroid<bool>(StoreKey.manageLocalMediaAndroid, null, false),
|
||||||
selectedAlbumSortReverse<bool>(StoreKey.selectedAlbumSortReverse, null, true),
|
|
||||||
enableHapticFeedback<bool>(StoreKey.enableHapticFeedback, null, true),
|
enableHapticFeedback<bool>(StoreKey.enableHapticFeedback, null, true),
|
||||||
syncAlbums<bool>(StoreKey.syncAlbums, null, false),
|
syncAlbums<bool>(StoreKey.syncAlbums, null, false),
|
||||||
enableBackup<bool>(StoreKey.enableBackup, null, false),
|
enableBackup<bool>(StoreKey.enableBackup, null, false),
|
||||||
useCellularForUploadVideos<bool>(StoreKey.useWifiForUploadVideos, null, false),
|
useCellularForUploadVideos<bool>(StoreKey.useWifiForUploadVideos, null, false),
|
||||||
useCellularForUploadPhotos<bool>(StoreKey.useWifiForUploadPhotos, null, false),
|
useCellularForUploadPhotos<bool>(StoreKey.useWifiForUploadPhotos, null, false),
|
||||||
readonlyModeEnabled<bool>(StoreKey.readonlyModeEnabled, "readonlyModeEnabled", false),
|
readonlyModeEnabled<bool>(StoreKey.readonlyModeEnabled, "readonlyModeEnabled", false),
|
||||||
albumGridView<bool>(StoreKey.albumGridView, "albumGridView", false),
|
|
||||||
backupRequireCharging<bool>(StoreKey.backupRequireCharging, null, false),
|
backupRequireCharging<bool>(StoreKey.backupRequireCharging, null, false),
|
||||||
backupTriggerDelay<int>(StoreKey.backupTriggerDelay, null, 30);
|
backupTriggerDelay<int>(StoreKey.backupTriggerDelay, null, 30);
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import 'package:immich_mobile/infrastructure/entities/metadata.entity.drift.dart
|
|||||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/network.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/network.repository.dart';
|
||||||
import 'package:immich_mobile/models/auth/auxilary_endpoint.model.dart';
|
import 'package:immich_mobile/models/auth/auxilary_endpoint.model.dart';
|
||||||
|
import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart';
|
||||||
|
|
||||||
const int targetVersion = 26;
|
const int targetVersion = 26;
|
||||||
|
|
||||||
@@ -75,14 +76,7 @@ Future<void> _migrateTo26(Drift drift) async {
|
|||||||
final cleanupKeepAlbumIds = await migrator.readLegacyStoreString(StoreKey.legacyCleanupKeepAlbumIds.id);
|
final cleanupKeepAlbumIds = await migrator.readLegacyStoreString(StoreKey.legacyCleanupKeepAlbumIds.id);
|
||||||
if (cleanupKeepAlbumIds != null) {
|
if (cleanupKeepAlbumIds != null) {
|
||||||
final ids = cleanupKeepAlbumIds.split(',').where((id) => id.isNotEmpty).toList();
|
final ids = cleanupKeepAlbumIds.split(',').where((id) => id.isNotEmpty).toList();
|
||||||
await drift.metadataEntity.insertOnConflictUpdate(
|
migrator.stage(StoreKey.legacyCleanupKeepAlbumIds, MetadataKey.cleanupKeepAlbumIds, ids);
|
||||||
MetadataEntityCompanion.insert(
|
|
||||||
key: MetadataKey.cleanupKeepAlbumIds.key,
|
|
||||||
value: MetadataKey.cleanupKeepAlbumIds.encode(ids),
|
|
||||||
updatedAt: Value(DateTime.now()),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
await migrator.deleteLegacyStoreRows([StoreKey.legacyCleanupKeepAlbumIds.id]);
|
|
||||||
}
|
}
|
||||||
await migrator.migrateBool(StoreKey.legacyCleanupKeepFavorites, MetadataKey.cleanupKeepFavorites);
|
await migrator.migrateBool(StoreKey.legacyCleanupKeepFavorites, MetadataKey.cleanupKeepFavorites);
|
||||||
await migrator.migrateEnumIndex(
|
await migrator.migrateEnumIndex(
|
||||||
@@ -118,12 +112,28 @@ Future<void> _migrateTo26(Drift drift) async {
|
|||||||
await migrator.migrateBool(StoreKey.legacyAutoEndpointSwitching, MetadataKey.networkAutoEndpointSwitching);
|
await migrator.migrateBool(StoreKey.legacyAutoEndpointSwitching, MetadataKey.networkAutoEndpointSwitching);
|
||||||
await migrator.migrateString(StoreKey.legacyPreferredWifiName, MetadataKey.networkPreferredWifiName);
|
await migrator.migrateString(StoreKey.legacyPreferredWifiName, MetadataKey.networkPreferredWifiName);
|
||||||
await migrator.migrateString(StoreKey.legacyLocalEndpoint, MetadataKey.networkLocalEndpoint);
|
await migrator.migrateString(StoreKey.legacyLocalEndpoint, MetadataKey.networkLocalEndpoint);
|
||||||
await _migrateExternalEndpointList(drift, migrator);
|
await _migrateExternalEndpointList(migrator);
|
||||||
await _migrateCustomHeaders(drift, migrator);
|
await _migrateCustomHeaders(migrator);
|
||||||
|
// Album
|
||||||
|
await _migrateAlbumSortMode(migrator);
|
||||||
|
await migrator.migrateBool(StoreKey.legacySelectedAlbumSortReverse, MetadataKey.albumIsReverse);
|
||||||
|
await migrator.migrateBool(StoreKey.legacyAlbumGridView, MetadataKey.albumIsGrid);
|
||||||
await migrator.complete();
|
await migrator.complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _migrateExternalEndpointList(Drift drift, _StoreMigrator migrator) async {
|
Future<void> _migrateAlbumSortMode(_StoreMigrator migrator) async {
|
||||||
|
final raw = await migrator.readLegacyStoreInt(StoreKey.legacySelectedAlbumSortOrder.id);
|
||||||
|
if (raw == null) return;
|
||||||
|
|
||||||
|
final mode = AlbumSortMode.values.firstWhere(
|
||||||
|
(e) => e.storeIndex == raw,
|
||||||
|
orElse: () => MetadataKey.albumSortMode.defaultValue,
|
||||||
|
);
|
||||||
|
|
||||||
|
migrator.stage(StoreKey.legacySelectedAlbumSortOrder, MetadataKey.albumSortMode, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _migrateExternalEndpointList(_StoreMigrator migrator) async {
|
||||||
final raw = await migrator.readLegacyStoreString(StoreKey.legacyExternalEndpointList.id);
|
final raw = await migrator.readLegacyStoreString(StoreKey.legacyExternalEndpointList.id);
|
||||||
if (raw == null) return;
|
if (raw == null) return;
|
||||||
|
|
||||||
@@ -140,17 +150,10 @@ Future<void> _migrateExternalEndpointList(Drift drift, _StoreMigrator migrator)
|
|||||||
// ignore invalid entries
|
// ignore invalid entries
|
||||||
}
|
}
|
||||||
|
|
||||||
await drift.metadataEntity.insertOnConflictUpdate(
|
migrator.stage(StoreKey.legacyExternalEndpointList, MetadataKey.networkExternalEndpointList, urls);
|
||||||
MetadataEntityCompanion.insert(
|
|
||||||
key: MetadataKey.networkExternalEndpointList.key,
|
|
||||||
value: MetadataKey.networkExternalEndpointList.encode(urls),
|
|
||||||
updatedAt: Value(DateTime.now()),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
await migrator.deleteLegacyStoreRows([StoreKey.legacyExternalEndpointList.id]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _migrateCustomHeaders(Drift drift, _StoreMigrator migrator) async {
|
Future<void> _migrateCustomHeaders(_StoreMigrator migrator) async {
|
||||||
final raw = await migrator.readLegacyStoreString(StoreKey.legacyCustomHeaders.id);
|
final raw = await migrator.readLegacyStoreString(StoreKey.legacyCustomHeaders.id);
|
||||||
if (raw == null) return;
|
if (raw == null) return;
|
||||||
|
|
||||||
@@ -166,14 +169,7 @@ Future<void> _migrateCustomHeaders(Drift drift, _StoreMigrator migrator) async {
|
|||||||
// ignore invalid entries
|
// ignore invalid entries
|
||||||
}
|
}
|
||||||
|
|
||||||
await drift.metadataEntity.insertOnConflictUpdate(
|
migrator.stage(StoreKey.legacyCustomHeaders, MetadataKey.networkCustomHeaders, headers);
|
||||||
MetadataEntityCompanion.insert(
|
|
||||||
key: MetadataKey.networkCustomHeaders.key,
|
|
||||||
value: MetadataKey.networkCustomHeaders.encode(headers),
|
|
||||||
updatedAt: Value(DateTime.now()),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
await migrator.deleteLegacyStoreRows([StoreKey.legacyCustomHeaders.id]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class _StoreMigrator {
|
class _StoreMigrator {
|
||||||
@@ -230,6 +226,11 @@ class _StoreMigrator {
|
|||||||
_migratedStoreIds.add(legacyKey.id);
|
_migratedStoreIds.add(legacyKey.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void stage<T extends Object>(StoreKey legacyKey, MetadataKey<T> newKey, T value) {
|
||||||
|
_cache[newKey] = value;
|
||||||
|
_migratedStoreIds.add(legacyKey.id);
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> complete() async {
|
Future<void> complete() async {
|
||||||
await _db.batch((batch) {
|
await _db.batch((batch) {
|
||||||
for (final entry in _cache.entries) {
|
for (final entry in _cache.entries) {
|
||||||
|
|||||||
Reference in New Issue
Block a user