82 lines
4.4 KiB
Dart
82 lines
4.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import '../mixins/disposable_change_notifier_mixin.dart';
|
|
import '../models/transcode_quality_preset.dart';
|
|
import '../services/settings_service.dart';
|
|
|
|
class SettingsProvider extends ChangeNotifier with DisposableChangeNotifierMixin {
|
|
SettingsService? _settingsService;
|
|
bool _isInitialized = false;
|
|
Future<void>? _initFuture;
|
|
|
|
SettingsProvider() {
|
|
_initFuture = _initializeSettings();
|
|
}
|
|
|
|
Future<void> ensureInitialized() => _initFuture ?? _initializeSettings();
|
|
|
|
bool get isReady => _isInitialized;
|
|
bool get isInitialized => _isInitialized;
|
|
Future<void> get ready => _initFuture ?? Future.value();
|
|
|
|
Future<void> _initializeSettings() async {
|
|
if (_isInitialized) return;
|
|
_settingsService = await SettingsService.getInstance();
|
|
_isInitialized = true;
|
|
safeNotifyListeners();
|
|
}
|
|
|
|
/// Re-read settings after an external mutation (import, reset). The provider
|
|
/// no longer caches values, so this just re-fetches the service instance and
|
|
/// notifies listeners.
|
|
Future<void> reload() async {
|
|
_settingsService = await SettingsService.getInstance();
|
|
_isInitialized = true;
|
|
safeNotifyListeners();
|
|
}
|
|
|
|
T _read<T>(Pref<T> pref, T fallback) => _isInitialized ? _settingsService!.read(pref) : fallback;
|
|
|
|
Future<void> _set<T>(Pref<T> pref, T value) async {
|
|
if (!_isInitialized) await _initializeSettings();
|
|
if (_settingsService!.read(pref) == value) return;
|
|
await _settingsService!.write(pref, value);
|
|
safeNotifyListeners();
|
|
}
|
|
|
|
int get libraryDensity => _read(SettingsService.libraryDensity, LibraryDensity.defaultValue);
|
|
ViewMode get viewMode => _read(SettingsService.viewMode, ViewMode.grid);
|
|
EpisodePosterMode get episodePosterMode =>
|
|
_read(SettingsService.episodePosterMode, EpisodePosterMode.episodeThumbnail);
|
|
bool get showHeroSection => _read(SettingsService.showHeroSection, true);
|
|
bool get useGlobalHubs => _read(SettingsService.useGlobalHubs, true);
|
|
bool get showServerNameOnHubs => _read(SettingsService.showServerNameOnHubs, false);
|
|
bool get groupLibrariesByServer => _read(SettingsService.groupLibrariesByServer, true);
|
|
bool get alwaysKeepSidebarOpen => _read(SettingsService.alwaysKeepSidebarOpen, false);
|
|
bool get showUnwatchedCount => _read(SettingsService.showUnwatchedCount, true);
|
|
bool get showEpisodeNumberOnCards => _read(SettingsService.showEpisodeNumberOnCards, true);
|
|
bool get hideSpoilers => _read(SettingsService.hideSpoilers, false);
|
|
bool get showNavBarLabels => _read(SettingsService.showNavBarLabels, true);
|
|
bool get liveTvDefaultFavorites => _read(SettingsService.liveTvDefaultFavorites, false);
|
|
bool get autoHidePerformanceOverlay => _read(SettingsService.autoHidePerformanceOverlay, true);
|
|
TranscodeQualityPreset get defaultQualityPreset =>
|
|
TranscodeQualityPreset.fromStorage(_read(SettingsService.defaultQualityPreset, 'original'));
|
|
|
|
Future<void> setLibraryDensity(int density) =>
|
|
_set(SettingsService.libraryDensity, density.clamp(LibraryDensity.min, LibraryDensity.max));
|
|
Future<void> setViewMode(ViewMode mode) => _set(SettingsService.viewMode, mode);
|
|
Future<void> setEpisodePosterMode(EpisodePosterMode mode) => _set(SettingsService.episodePosterMode, mode);
|
|
Future<void> setShowHeroSection(bool value) => _set(SettingsService.showHeroSection, value);
|
|
Future<void> setUseGlobalHubs(bool value) => _set(SettingsService.useGlobalHubs, value);
|
|
Future<void> setShowServerNameOnHubs(bool value) => _set(SettingsService.showServerNameOnHubs, value);
|
|
Future<void> setGroupLibrariesByServer(bool value) => _set(SettingsService.groupLibrariesByServer, value);
|
|
Future<void> setAlwaysKeepSidebarOpen(bool value) => _set(SettingsService.alwaysKeepSidebarOpen, value);
|
|
Future<void> setShowUnwatchedCount(bool value) => _set(SettingsService.showUnwatchedCount, value);
|
|
Future<void> setShowEpisodeNumberOnCards(bool value) => _set(SettingsService.showEpisodeNumberOnCards, value);
|
|
Future<void> setHideSpoilers(bool value) => _set(SettingsService.hideSpoilers, value);
|
|
Future<void> setShowNavBarLabels(bool value) => _set(SettingsService.showNavBarLabels, value);
|
|
Future<void> setLiveTvDefaultFavorites(bool value) => _set(SettingsService.liveTvDefaultFavorites, value);
|
|
Future<void> setAutoHidePerformanceOverlay(bool value) => _set(SettingsService.autoHidePerformanceOverlay, value);
|
|
Future<void> setDefaultQualityPreset(TranscodeQualityPreset preset) =>
|
|
_set(SettingsService.defaultQualityPreset, preset.storageKey);
|
|
}
|