From 3a10b438ce7d08832d7875fb141e272581c097cc Mon Sep 17 00:00:00 2001 From: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Date: Fri, 1 May 2026 00:59:38 +0700 Subject: [PATCH] more refactor --- mobile/lib/domain/models/metadata_key.dart | 8 ++++-- .../repositories/metadata.repository.dart | 28 ++++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/mobile/lib/domain/models/metadata_key.dart b/mobile/lib/domain/models/metadata_key.dart index 062b0565d7..24e3c0da25 100644 --- a/mobile/lib/domain/models/metadata_key.dart +++ b/mobile/lib/domain/models/metadata_key.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; +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/log.model.dart'; -enum MetadataDomain { - appConfig('config.app'), - systemConfig('config.system'); +enum MetadataDomain { + appConfig('config.app'), + systemConfig('config.system'); final String prefix; const MetadataDomain(this.prefix); diff --git a/mobile/lib/infrastructure/repositories/metadata.repository.dart b/mobile/lib/infrastructure/repositories/metadata.repository.dart index 90cc59249d..1209961c07 100644 --- a/mobile/lib/infrastructure/repositories/metadata.repository.dart +++ b/mobile/lib/infrastructure/repositories/metadata.repository.dart @@ -84,13 +84,16 @@ class MetadataRepository extends DriftDatabaseRepository { _updateCache(key, key.defaultValue); } - Stream watchAppConfig() => _watchDomain(.appConfig).map((_) => appConfig).distinct(); + Stream watchAppConfig() => _watchDomain(MetadataDomain.appConfig).distinct(); - Stream watchSystemConfig() => _watchDomain(.systemConfig).map((_) => systemConfig).distinct(); + Stream watchSystemConfig() => _watchDomain(MetadataDomain.systemConfig).distinct(); - Stream _watchDomain(MetadataDomain domain) { + Stream _watchDomain(MetadataDomain domain) { final query = _db.select(_db.metadataEntity)..where((t) => t.key.like('${domain.prefix}.%')); - return query.watch().map(_hydrateCache); + return query.watch().map((rows) { + _hydrateCache(rows); + return domain.config(this); + }); } void _hydrateCache(List rows) { @@ -105,11 +108,22 @@ class MetadataRepository extends DriftDatabaseRepository { void _updateCache(MetadataKey key, T value) { if (_cache[key] == value) return; _cache[key] = value; - switch (key.domain) { + key.domain.rebuild(this); + } +} + +extension on MetadataDomain { + T config(MetadataRepository repo) => switch (this) { + .appConfig => repo._appConfig as T, + .systemConfig => repo._systemConfig as T, + }; + + void rebuild(MetadataRepository repo) { + switch (this) { case .appConfig: - _appConfig = .new(theme: .new(mode: _read(.themeMode))); + repo._appConfig = .new(theme: .new(mode: repo._read(.themeMode))); case .systemConfig: - _systemConfig = .new(logLevel: _read(.logLevel)); + repo._systemConfig = .new(logLevel: repo._read(.logLevel)); } } }