feat: add codec configuration in settings

This commit is contained in:
Kingkor Roy Tirtho 2023-09-28 15:48:42 +06:00
parent 5a758d8671
commit 479064f296
5 changed files with 133 additions and 42 deletions

View File

@ -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;
}

View File

@ -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"
}

View File

@ -459,6 +459,42 @@ class SettingsPage extends HookConsumerWidget {
value: preferences.normalizeAudio,
onChanged: preferences.setNormalizeAudio,
),
AdaptiveSelectTile<MusicCodec>(
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<MusicCodec>(
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(

View File

@ -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,
};
}

View File

@ -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"
]
}