Light theme default + yt-dlp search fallback

This commit is contained in:
iliasmouhcine
2026-08-22 13:02:32 +01:00
commit 7704cae4a0
282 changed files with 52324 additions and 0 deletions
+204
View File
@@ -0,0 +1,204 @@
import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'preferred_language_service.dart';
class AppSettingsService {
AppSettingsService._();
static final AppSettingsService instance = AppSettingsService._();
static const String _defaultResolutionKey =
'youtube_personal.settings.default_resolution.v1';
static const String _preferredLanguageKey =
'youtube_personal.settings.preferred_language.v1';
static const String _youngAudienceFilterKey =
'youtube_personal.settings.young_audience_filter.v1';
static const String _pauseScreenSleepMinutesKey =
'youtube_personal.settings.pause_screen_sleep_minutes.v1';
static const String _appearanceModeKey =
'youtube_personal.settings.appearance_mode.v1';
static const int historicalDefaultResolution = 1080;
final SharedPreferencesAsync _preferences = SharedPreferencesAsync();
final ValueNotifier<int> defaultResolution =
ValueNotifier<int>(historicalDefaultResolution);
final ValueNotifier<String> preferredLanguage =
ValueNotifier<String>('auto');
final ValueNotifier<int> youngAudienceFilterLevel =
ValueNotifier<int>(0);
final ValueNotifier<int> pauseScreenSleepMinutes =
ValueNotifier<int>(5);
final ValueNotifier<String> appearanceMode =
ValueNotifier<String>('light');
Future<void> initialize() async {
final storedResolution = await _preferences.getInt(_defaultResolutionKey);
final storedLanguage = await _preferences.getString(_preferredLanguageKey);
final storedYoungAudienceFilter =
await _preferences.getInt(_youngAudienceFilterKey);
final storedPauseScreenSleepMinutes =
await _preferences.getInt(_pauseScreenSleepMinutesKey);
final storedAppearanceMode =
await _preferences.getString(_appearanceModeKey);
if (storedResolution != null &&
supportedResolutions.contains(storedResolution)) {
defaultResolution.value = storedResolution;
}
if (storedLanguage != null &&
PreferredLanguageService.isSupported(storedLanguage)) {
preferredLanguage.value = storedLanguage;
}
if (storedYoungAudienceFilter != null &&
supportedYoungAudienceFilterLevels
.contains(storedYoungAudienceFilter)) {
youngAudienceFilterLevel.value = storedYoungAudienceFilter;
}
if (storedPauseScreenSleepMinutes != null &&
supportedPauseScreenSleepMinutes
.contains(storedPauseScreenSleepMinutes)) {
pauseScreenSleepMinutes.value = storedPauseScreenSleepMinutes;
}
if (storedAppearanceMode != null &&
supportedAppearanceModes.contains(storedAppearanceMode)) {
appearanceMode.value = storedAppearanceMode;
}
}
Future<void> setAppearanceMode(String mode) async {
if (!supportedAppearanceModes.contains(mode)) {
return;
}
if (appearanceMode.value == mode) {
return;
}
appearanceMode.value = mode;
await _preferences.setString(_appearanceModeKey, mode);
}
Future<void> setDefaultResolution(int resolution) async {
if (!supportedResolutions.contains(resolution)) {
return;
}
if (defaultResolution.value == resolution) {
return;
}
defaultResolution.value = resolution;
await _preferences.setInt(_defaultResolutionKey, resolution);
}
Future<void> setPreferredLanguage(String languageCode) async {
if (!PreferredLanguageService.isSupported(languageCode)) {
return;
}
if (preferredLanguage.value == languageCode) {
return;
}
preferredLanguage.value = languageCode;
await _preferences.setString(_preferredLanguageKey, languageCode);
}
Future<void> setPauseScreenSleepMinutes(int minutes) async {
if (!supportedPauseScreenSleepMinutes.contains(minutes)) {
return;
}
if (pauseScreenSleepMinutes.value == minutes) {
return;
}
pauseScreenSleepMinutes.value = minutes;
await _preferences.setInt(_pauseScreenSleepMinutesKey, minutes);
}
Future<void> setYoungAudienceFilterLevel(int level) async {
if (!supportedYoungAudienceFilterLevels.contains(level)) {
return;
}
if (youngAudienceFilterLevel.value == level) {
return;
}
youngAudienceFilterLevel.value = level;
await _preferences.setInt(_youngAudienceFilterKey, level);
}
static const List<String> supportedAppearanceModes = <String>[
'auto',
'dark',
'light',
'system',
];
static String appearanceModeLabel(String mode) {
return switch (mode) {
'dark' => 'Sombre',
'light' => 'Clair',
'auto' => 'Auto (jour/nuit)',
_ => 'Système',
};
}
static const List<int> supportedPauseScreenSleepMinutes = <int>[
2,
5,
10,
0,
];
static String pauseScreenSleepLabel(int minutes) {
return switch (minutes) {
0 => 'Jamais',
2 => '2 minutes',
10 => '10 minutes',
_ => '5 minutes',
};
}
static const List<int> supportedYoungAudienceFilterLevels = <int>[
0,
1,
2,
];
static String youngAudienceFilterLabel(int level) {
return switch (level) {
1 => 'Modéré',
2 => 'Strict',
_ => 'Désactivé',
};
}
static const List<int> supportedResolutions = <int>[
0,
360,
720,
1080,
1440,
2160,
];
static String resolutionLabel(int resolution) {
return switch (resolution) {
0 => 'Auto',
2160 => '2160p (4K)',
_ => '${resolution}p',
};
}
}