From 479064f29624b7314bf0b038a63fd6624246ffa1 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 28 Sep 2023 15:48:42 +0600 Subject: [PATCH] feat: add codec configuration in settings --- lib/collections/spotube_icons.dart | 2 + lib/l10n/app_en.arb | 4 +- lib/pages/settings/settings.dart | 36 +++++++++ lib/provider/user_preferences_provider.dart | 81 ++++++++++++++------- untranslated_messages.json | 52 +++++++++---- 5 files changed, 133 insertions(+), 42 deletions(-) diff --git a/lib/collections/spotube_icons.dart b/lib/collections/spotube_icons.dart index 8a4e63da..c586375f 100644 --- a/lib/collections/spotube_icons.dart +++ b/lib/collections/spotube_icons.dart @@ -98,4 +98,6 @@ abstract class SpotubeIcons { static const edit = FeatherIcons.edit; static const web = FeatherIcons.globe; static const amoled = FeatherIcons.sunset; + static const file = FeatherIcons.file; + static const stream = Icons.stream_rounded; } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 50c4a139..c37f93b1 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -268,5 +268,7 @@ "normalize_audio": "Normalize audio", "change_cover": "Change cover", "add_cover": "Add cover", - "restore_defaults": "Restore defaults" + "restore_defaults": "Restore defaults", + "download_music_codec": "Download music codec", + "streaming_music_codec": "Streaming music codec" } \ No newline at end of file diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index f4676a24..226e4da6 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -459,6 +459,42 @@ class SettingsPage extends HookConsumerWidget { value: preferences.normalizeAudio, onChanged: preferences.setNormalizeAudio, ), + AdaptiveSelectTile( + secondary: const Icon(SpotubeIcons.stream), + title: Text(context.l10n.streaming_music_codec), + value: preferences.streamMusicCodec, + options: MusicCodec.values + .map((e) => DropdownMenuItem( + value: e, + child: Text( + e.label, + style: theme.textTheme.labelMedium, + ), + )) + .toList(), + onChanged: (value) { + if (value == null) return; + preferences.setStreamMusicCodec(value); + }, + ), + AdaptiveSelectTile( + secondary: const Icon(SpotubeIcons.file), + title: Text(context.l10n.download_music_codec), + value: preferences.downloadMusicCodec, + options: MusicCodec.values + .map((e) => DropdownMenuItem( + value: e, + child: Text( + e.label, + style: theme.textTheme.labelMedium, + ), + )) + .toList(), + onChanged: (value) { + if (value == null) return; + preferences.setDownloadMusicCodec(value); + }, + ), ], ), SectionCardWithHeading( diff --git a/lib/provider/user_preferences_provider.dart b/lib/provider/user_preferences_provider.dart index 7abbad40..5cc4086c 100644 --- a/lib/provider/user_preferences_provider.dart +++ b/lib/provider/user_preferences_provider.dart @@ -40,39 +40,36 @@ enum YoutubeApiType { String get label => name[0].toUpperCase() + name.substring(1); } +enum MusicCodec { + m4a._("M4a\n(best for downloaded music)"), + weba._("WebA\n(best for streamed music)"); + + final String label; + const MusicCodec._(this.label); +} + class UserPreferences extends PersistedChangeNotifier { - ThemeMode themeMode; - Market recommendationMarket; - bool saveTrackLyrics; - bool checkUpdate; AudioQuality audioQuality; - - late SpotubeColor accentColorScheme; bool albumColorSync; - - String downloadLocation; - - LayoutMode layoutMode; - - CloseBehavior closeBehavior; - - bool showSystemTrayIcon; - - Locale locale; - - String pipedInstance; - - SearchMode searchMode; - - bool skipNonMusic; - - YoutubeApiType youtubeApiType; - - bool systemTitleBar; - bool amoledDarkTheme; - + bool checkUpdate; bool normalizeAudio; + bool saveTrackLyrics; + bool showSystemTrayIcon; + bool skipNonMusic; + bool systemTitleBar; + CloseBehavior closeBehavior; + late SpotubeColor accentColorScheme; + LayoutMode layoutMode; + Locale locale; + Market recommendationMarket; + SearchMode searchMode; + String downloadLocation; + String pipedInstance; + ThemeMode themeMode; + YoutubeApiType youtubeApiType; + MusicCodec streamMusicCodec; + MusicCodec downloadMusicCodec; final Ref ref; @@ -96,6 +93,8 @@ class UserPreferences extends PersistedChangeNotifier { this.systemTitleBar = false, this.amoledDarkTheme = false, this.normalizeAudio = true, + this.streamMusicCodec = MusicCodec.weba, + this.downloadMusicCodec = MusicCodec.m4a, SpotubeColor? accentColorScheme, }) : super() { this.accentColorScheme = @@ -129,6 +128,20 @@ class UserPreferences extends PersistedChangeNotifier { setAmoledDarkTheme(false); setNormalizeAudio(true); setAccentColorScheme(SpotubeColor(Colors.blue.value, name: "Blue")); + setStreamMusicCodec(MusicCodec.weba); + setDownloadMusicCodec(MusicCodec.m4a); + } + + void setStreamMusicCodec(MusicCodec codec) { + streamMusicCodec = codec; + notifyListeners(); + updatePersistence(); + } + + void setDownloadMusicCodec(MusicCodec codec) { + downloadMusicCodec = codec; + notifyListeners(); + updatePersistence(); } void setThemeMode(ThemeMode mode) { @@ -327,6 +340,16 @@ class UserPreferences extends PersistedChangeNotifier { normalizeAudio = map["normalizeAudio"] ?? normalizeAudio; audioPlayer.setAudioNormalization(normalizeAudio); + + streamMusicCodec = MusicCodec.values.firstWhere( + (codec) => codec.name == map["streamMusicCodec"], + orElse: () => MusicCodec.weba, + ); + + downloadMusicCodec = MusicCodec.values.firstWhere( + (codec) => codec.name == map["downloadMusicCodec"], + orElse: () => MusicCodec.m4a, + ); } @override @@ -352,6 +375,8 @@ class UserPreferences extends PersistedChangeNotifier { 'systemTitleBar': systemTitleBar, "amoledDarkTheme": amoledDarkTheme, "normalizeAudio": normalizeAudio, + "streamMusicCodec": streamMusicCodec.name, + "downloadMusicCodec": downloadMusicCodec.name, }; } diff --git a/untranslated_messages.json b/untranslated_messages.json index 0a7cf4f5..8e0df973 100644 --- a/untranslated_messages.json +++ b/untranslated_messages.json @@ -4,7 +4,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "bn": [ @@ -12,7 +14,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "ca": [ @@ -20,7 +24,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "de": [ @@ -28,7 +34,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "es": [ @@ -36,7 +44,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "fr": [ @@ -44,7 +54,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "hi": [ @@ -52,7 +64,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "ja": [ @@ -60,7 +74,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "pl": [ @@ -68,7 +84,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "pt": [ @@ -76,7 +94,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "ru": [ @@ -84,7 +104,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "uk": [ @@ -92,7 +114,9 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ], "zh": [ @@ -100,6 +124,8 @@ "normalize_audio", "change_cover", "add_cover", - "restore_defaults" + "restore_defaults", + "download_music_codec", + "streaming_music_codec" ] }