mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
remove name from key
This commit is contained in:
@@ -20,94 +20,72 @@ enum MetadataDomain<T extends Object> {
|
|||||||
|
|
||||||
enum MetadataKey<T extends Object> {
|
enum MetadataKey<T extends Object> {
|
||||||
// Theme
|
// Theme
|
||||||
themePrimaryColor<ImmichColorPreset>(.appConfig, 'theme.primaryColor', .indigo, _EnumCodec(ImmichColorPreset.values)),
|
themePrimaryColor<ImmichColorPreset>(.appConfig, .indigo, _EnumCodec(ImmichColorPreset.values)),
|
||||||
themeMode<ThemeMode>(.appConfig, 'theme.mode', .system, _EnumCodec(ThemeMode.values)),
|
themeMode<ThemeMode>(.appConfig, .system, _EnumCodec(ThemeMode.values)),
|
||||||
themeDynamic<bool>(.appConfig, 'theme.dynamic', false),
|
themeDynamic<bool>(.appConfig, false),
|
||||||
themeColorfulInterface<bool>(.appConfig, 'theme.colorfulInterface', true),
|
themeColorfulInterface<bool>(.appConfig, true),
|
||||||
|
|
||||||
// Image
|
// Image
|
||||||
imagePreferRemote<bool>(.appConfig, 'image.preferRemote', false),
|
imagePreferRemote<bool>(.appConfig, false),
|
||||||
imageLoadOriginal<bool>(.appConfig, 'image.loadOriginal', false),
|
imageLoadOriginal<bool>(.appConfig, false),
|
||||||
|
|
||||||
// Viewer
|
// Viewer
|
||||||
viewerLoopVideo<bool>(.appConfig, 'viewer.loopVideo', true),
|
viewerLoopVideo<bool>(.appConfig, true),
|
||||||
viewerLoadOriginalVideo<bool>(.appConfig, 'viewer.loadOriginalVideo', false),
|
viewerLoadOriginalVideo<bool>(.appConfig, false),
|
||||||
viewerAutoPlayVideo<bool>(.appConfig, 'viewer.autoPlayVideo', true),
|
viewerAutoPlayVideo<bool>(.appConfig, true),
|
||||||
viewerTapToNavigate<bool>(.appConfig, 'viewer.tapToNavigate', false),
|
viewerTapToNavigate<bool>(.appConfig, false),
|
||||||
|
|
||||||
// Network
|
// Network
|
||||||
networkAutoEndpointSwitching<bool>(.systemConfig, 'network.autoEndpointSwitching', false),
|
networkAutoEndpointSwitching<bool>(.systemConfig, false),
|
||||||
networkPreferredWifiName<String>(.systemConfig, 'network.preferredWifiName', ''),
|
networkPreferredWifiName<String>(.systemConfig, ''),
|
||||||
networkLocalEndpoint<String>(.systemConfig, 'network.localEndpoint', ''),
|
networkLocalEndpoint<String>(.systemConfig, ''),
|
||||||
networkExternalEndpointList<List<String>>(
|
networkExternalEndpointList<List<String>>(.systemConfig, [], _ListCodec(_PrimitiveCodec.string)),
|
||||||
.systemConfig,
|
|
||||||
'network.externalEndpointList',
|
|
||||||
[],
|
|
||||||
_ListCodec(_PrimitiveCodec.string),
|
|
||||||
),
|
|
||||||
networkCustomHeaders<Map<String, String>>(
|
networkCustomHeaders<Map<String, String>>(
|
||||||
.systemConfig,
|
.systemConfig,
|
||||||
'network.customHeaders',
|
|
||||||
{},
|
{},
|
||||||
_MapCodec(_PrimitiveCodec.string, _PrimitiveCodec.string),
|
_MapCodec(_PrimitiveCodec.string, _PrimitiveCodec.string),
|
||||||
),
|
),
|
||||||
|
|
||||||
// Album
|
// Album
|
||||||
albumSortMode<AlbumSortMode>(
|
albumSortMode<AlbumSortMode>(.appConfig, AlbumSortMode.mostRecent, _EnumCodec(AlbumSortMode.values)),
|
||||||
.appConfig,
|
albumIsReverse<bool>(.appConfig, true),
|
||||||
'album.sortMode',
|
albumIsGrid<bool>(.appConfig, false),
|
||||||
AlbumSortMode.mostRecent,
|
|
||||||
_EnumCodec(AlbumSortMode.values),
|
|
||||||
),
|
|
||||||
albumIsReverse<bool>(.appConfig, 'album.isReverse', true),
|
|
||||||
albumIsGrid<bool>(.appConfig, 'album.isGrid', false),
|
|
||||||
|
|
||||||
// Backup
|
// Backup
|
||||||
backupEnabled<bool>(.appConfig, 'backup.enabled', false),
|
backupEnabled<bool>(.appConfig, false),
|
||||||
backupUseCellularForVideos<bool>(.appConfig, 'backup.useCellularForVideos', false),
|
backupUseCellularForVideos<bool>(.appConfig, false),
|
||||||
backupUseCellularForPhotos<bool>(.appConfig, 'backup.useCellularForPhotos', false),
|
backupUseCellularForPhotos<bool>(.appConfig, false),
|
||||||
backupRequireCharging<bool>(.appConfig, 'backup.requireCharging', false),
|
backupRequireCharging<bool>(.appConfig, false),
|
||||||
backupTriggerDelay<int>(.appConfig, 'backup.triggerDelay', 30),
|
backupTriggerDelay<int>(.appConfig, 30),
|
||||||
backupSyncAlbums<bool>(.appConfig, 'backup.syncAlbums', false),
|
backupSyncAlbums<bool>(.appConfig, false),
|
||||||
|
|
||||||
// Timeline
|
// Timeline
|
||||||
timelineTilesPerRow<int>(.appConfig, 'timeline.tilesPerRow', 4),
|
timelineTilesPerRow<int>(.appConfig, 4),
|
||||||
timelineGroupAssetsBy<GroupAssetsBy>(
|
timelineGroupAssetsBy<GroupAssetsBy>(.appConfig, GroupAssetsBy.day, _EnumCodec(GroupAssetsBy.values)),
|
||||||
.appConfig,
|
timelineStorageIndicator<bool>(.appConfig, true),
|
||||||
'timeline.groupAssetsBy',
|
|
||||||
GroupAssetsBy.day,
|
|
||||||
_EnumCodec(GroupAssetsBy.values),
|
|
||||||
),
|
|
||||||
timelineStorageIndicator<bool>(.appConfig, 'timeline.storageIndicator', true),
|
|
||||||
|
|
||||||
// Log
|
// Log
|
||||||
logLevel<LogLevel>(.systemConfig, 'log.level', .info, _EnumCodec(LogLevel.values)),
|
logLevel<LogLevel>(.systemConfig, .info, _EnumCodec(LogLevel.values)),
|
||||||
|
|
||||||
// Map
|
// Map
|
||||||
mapShowFavoriteOnly<bool>(.appConfig, 'map.showFavoriteOnly', false),
|
mapShowFavoriteOnly<bool>(.appConfig, false),
|
||||||
mapRelativeDate<int>(.appConfig, 'map.relativeDate', 0),
|
mapRelativeDate<int>(.appConfig, 0),
|
||||||
mapIncludeArchived<bool>(.appConfig, 'map.includeArchived', false),
|
mapIncludeArchived<bool>(.appConfig, false),
|
||||||
mapThemeMode<ThemeMode>(.appConfig, 'map.themeMode', .system, _EnumCodec(ThemeMode.values)),
|
mapThemeMode<ThemeMode>(.appConfig, .system, _EnumCodec(ThemeMode.values)),
|
||||||
mapWithPartners<bool>(.appConfig, 'map.withPartners', false),
|
mapWithPartners<bool>(.appConfig, false),
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
cleanupKeepFavorites<bool>(.appConfig, 'cleanup.keepFavorites', true),
|
cleanupKeepFavorites<bool>(.appConfig, true),
|
||||||
cleanupKeepMediaType<AssetKeepType>(
|
cleanupKeepMediaType<AssetKeepType>(.appConfig, AssetKeepType.none, _EnumCodec(AssetKeepType.values)),
|
||||||
.appConfig,
|
cleanupKeepAlbumIds<List<String>>(.appConfig, [], _ListCodec(_PrimitiveCodec.string)),
|
||||||
'cleanup.keepMediaType',
|
cleanupCutoffDaysAgo<int>(.appConfig, -1),
|
||||||
AssetKeepType.none,
|
cleanupDefaultsInitialized<bool>(.appConfig, false);
|
||||||
_EnumCodec(AssetKeepType.values),
|
|
||||||
),
|
|
||||||
cleanupKeepAlbumIds<List<String>>(.appConfig, 'cleanup.keepAlbumIds', [], _ListCodec(_PrimitiveCodec.string)),
|
|
||||||
cleanupCutoffDaysAgo<int>(.appConfig, 'cleanup.cutoffDaysAgo', -1),
|
|
||||||
cleanupDefaultsInitialized<bool>(.appConfig, 'cleanup.defaultsInitialized', false);
|
|
||||||
|
|
||||||
final MetadataDomain domain;
|
final MetadataDomain domain;
|
||||||
final String name;
|
|
||||||
final T defaultValue;
|
final T defaultValue;
|
||||||
final _MetadataCodec<T>? _codecOverride;
|
final _MetadataCodec<T>? _codecOverride;
|
||||||
|
|
||||||
const MetadataKey(this.domain, this.name, this.defaultValue, [this._codecOverride]);
|
const MetadataKey(this.domain, this.defaultValue, [this._codecOverride]);
|
||||||
|
|
||||||
String get key => '${domain.prefix}.$name';
|
String get key => '${domain.prefix}.$name';
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,10 @@ class MetadataRepository extends DriftDatabaseRepository {
|
|||||||
final query = _db.select(_db.metadataEntity)..where((t) => t.key.like('${domain.prefix}.%'));
|
final query = _db.select(_db.metadataEntity)..where((t) => t.key.like('${domain.prefix}.%'));
|
||||||
return query.watch().map((rows) {
|
return query.watch().map((rows) {
|
||||||
_hydrateCache(rows);
|
_hydrateCache(rows);
|
||||||
return domain.config(this);
|
return switch (domain) {
|
||||||
|
.appConfig => _appConfig as T,
|
||||||
|
.systemConfig => _systemConfig as T,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,77 +94,67 @@ class MetadataRepository extends DriftDatabaseRepository {
|
|||||||
void _updateCache<T extends Object>(MetadataKey<T> key, T value) {
|
void _updateCache<T extends Object>(MetadataKey<T> key, T value) {
|
||||||
if (_cache[key] == value) return;
|
if (_cache[key] == value) return;
|
||||||
_cache[key] = value;
|
_cache[key] = value;
|
||||||
key.domain.rebuild(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension<T extends Object> on MetadataDomain<T> {
|
switch (key.domain) {
|
||||||
T config(MetadataRepository repo) => switch (this) {
|
|
||||||
.appConfig => repo._appConfig as T,
|
|
||||||
.systemConfig => repo._systemConfig as T,
|
|
||||||
};
|
|
||||||
|
|
||||||
void rebuild(MetadataRepository repo) {
|
|
||||||
switch (this) {
|
|
||||||
case .appConfig:
|
case .appConfig:
|
||||||
repo._appConfig = .new(
|
_appConfig = _buildAppConfig();
|
||||||
theme: .new(
|
|
||||||
mode: repo._read(.themeMode),
|
|
||||||
primaryColor: repo._read(.themePrimaryColor),
|
|
||||||
dynamicTheme: repo._read(.themeDynamic),
|
|
||||||
colorfulInterface: repo._read(.themeColorfulInterface),
|
|
||||||
),
|
|
||||||
cleanup: .new(
|
|
||||||
keepFavorites: repo._read(.cleanupKeepFavorites),
|
|
||||||
keepMediaType: repo._read(.cleanupKeepMediaType),
|
|
||||||
keepAlbumIds: repo._read(.cleanupKeepAlbumIds),
|
|
||||||
cutoffDaysAgo: repo._read(.cleanupCutoffDaysAgo),
|
|
||||||
defaultsInitialized: repo._read(.cleanupDefaultsInitialized),
|
|
||||||
),
|
|
||||||
map: .new(
|
|
||||||
relativeDays: repo._read(.mapRelativeDate),
|
|
||||||
favoritesOnly: repo._read(.mapShowFavoriteOnly),
|
|
||||||
includeArchived: repo._read(.mapIncludeArchived),
|
|
||||||
themeMode: repo._read(.mapThemeMode),
|
|
||||||
withPartners: repo._read(.mapWithPartners),
|
|
||||||
),
|
|
||||||
timeline: .new(
|
|
||||||
tilesPerRow: repo._read(.timelineTilesPerRow),
|
|
||||||
groupAssetsBy: repo._read(.timelineGroupAssetsBy),
|
|
||||||
storageIndicator: repo._read(.timelineStorageIndicator),
|
|
||||||
),
|
|
||||||
image: .new(preferRemote: repo._read(.imagePreferRemote), loadOriginal: repo._read(.imageLoadOriginal)),
|
|
||||||
viewer: .new(
|
|
||||||
loopVideo: repo._read(.viewerLoopVideo),
|
|
||||||
loadOriginalVideo: repo._read(.viewerLoadOriginalVideo),
|
|
||||||
autoPlayVideo: repo._read(.viewerAutoPlayVideo),
|
|
||||||
tapToNavigate: repo._read(.viewerTapToNavigate),
|
|
||||||
),
|
|
||||||
album: .new(
|
|
||||||
sortMode: repo._read(.albumSortMode),
|
|
||||||
isReverse: repo._read(.albumIsReverse),
|
|
||||||
isGrid: repo._read(.albumIsGrid),
|
|
||||||
),
|
|
||||||
backup: .new(
|
|
||||||
enabled: repo._read(.backupEnabled),
|
|
||||||
useCellularForVideos: repo._read(.backupUseCellularForVideos),
|
|
||||||
useCellularForPhotos: repo._read(.backupUseCellularForPhotos),
|
|
||||||
requireCharging: repo._read(.backupRequireCharging),
|
|
||||||
triggerDelay: repo._read(.backupTriggerDelay),
|
|
||||||
syncAlbums: repo._read(.backupSyncAlbums),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
case .systemConfig:
|
case .systemConfig:
|
||||||
repo._systemConfig = .new(
|
_systemConfig = _buildSystemConfig();
|
||||||
logLevel: repo._read(.logLevel),
|
|
||||||
network: .new(
|
|
||||||
autoEndpointSwitching: repo._read(.networkAutoEndpointSwitching),
|
|
||||||
preferredWifiName: repo._read(.networkPreferredWifiName).nullIfEmpty,
|
|
||||||
localEndpoint: repo._read(.networkLocalEndpoint).nullIfEmpty,
|
|
||||||
externalEndpointList: repo._read(.networkExternalEndpointList),
|
|
||||||
customHeaders: repo._read(.networkCustomHeaders),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AppConfig _buildAppConfig() => .new(
|
||||||
|
theme: .new(
|
||||||
|
mode: _read(.themeMode),
|
||||||
|
primaryColor: _read(.themePrimaryColor),
|
||||||
|
dynamicTheme: _read(.themeDynamic),
|
||||||
|
colorfulInterface: _read(.themeColorfulInterface),
|
||||||
|
),
|
||||||
|
cleanup: .new(
|
||||||
|
keepFavorites: _read(.cleanupKeepFavorites),
|
||||||
|
keepMediaType: _read(.cleanupKeepMediaType),
|
||||||
|
keepAlbumIds: _read(.cleanupKeepAlbumIds),
|
||||||
|
cutoffDaysAgo: _read(.cleanupCutoffDaysAgo),
|
||||||
|
defaultsInitialized: _read(.cleanupDefaultsInitialized),
|
||||||
|
),
|
||||||
|
map: .new(
|
||||||
|
relativeDays: _read(.mapRelativeDate),
|
||||||
|
favoritesOnly: _read(.mapShowFavoriteOnly),
|
||||||
|
includeArchived: _read(.mapIncludeArchived),
|
||||||
|
themeMode: _read(.mapThemeMode),
|
||||||
|
withPartners: _read(.mapWithPartners),
|
||||||
|
),
|
||||||
|
timeline: .new(
|
||||||
|
tilesPerRow: _read(.timelineTilesPerRow),
|
||||||
|
groupAssetsBy: _read(.timelineGroupAssetsBy),
|
||||||
|
storageIndicator: _read(.timelineStorageIndicator),
|
||||||
|
),
|
||||||
|
image: .new(preferRemote: _read(.imagePreferRemote), loadOriginal: _read(.imageLoadOriginal)),
|
||||||
|
viewer: .new(
|
||||||
|
loopVideo: _read(.viewerLoopVideo),
|
||||||
|
loadOriginalVideo: _read(.viewerLoadOriginalVideo),
|
||||||
|
autoPlayVideo: _read(.viewerAutoPlayVideo),
|
||||||
|
tapToNavigate: _read(.viewerTapToNavigate),
|
||||||
|
),
|
||||||
|
album: .new(sortMode: _read(.albumSortMode), isReverse: _read(.albumIsReverse), isGrid: _read(.albumIsGrid)),
|
||||||
|
backup: .new(
|
||||||
|
enabled: _read(.backupEnabled),
|
||||||
|
useCellularForVideos: _read(.backupUseCellularForVideos),
|
||||||
|
useCellularForPhotos: _read(.backupUseCellularForPhotos),
|
||||||
|
requireCharging: _read(.backupRequireCharging),
|
||||||
|
triggerDelay: _read(.backupTriggerDelay),
|
||||||
|
syncAlbums: _read(.backupSyncAlbums),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
SystemConfig _buildSystemConfig() => .new(
|
||||||
|
logLevel: _read(.logLevel),
|
||||||
|
network: .new(
|
||||||
|
autoEndpointSwitching: _read(.networkAutoEndpointSwitching),
|
||||||
|
preferredWifiName: _read(.networkPreferredWifiName).nullIfEmpty,
|
||||||
|
localEndpoint: _read(.networkLocalEndpoint).nullIfEmpty,
|
||||||
|
externalEndpointList: _read(.networkExternalEndpointList),
|
||||||
|
customHeaders: _read(.networkCustomHeaders),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user