mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-11 17:37:31 +00:00
feat: add codec configuration in settings
This commit is contained in:
parent
5a758d8671
commit
479064f296
@ -98,4 +98,6 @@ abstract class SpotubeIcons {
|
|||||||
static const edit = FeatherIcons.edit;
|
static const edit = FeatherIcons.edit;
|
||||||
static const web = FeatherIcons.globe;
|
static const web = FeatherIcons.globe;
|
||||||
static const amoled = FeatherIcons.sunset;
|
static const amoled = FeatherIcons.sunset;
|
||||||
|
static const file = FeatherIcons.file;
|
||||||
|
static const stream = Icons.stream_rounded;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -268,5 +268,7 @@
|
|||||||
"normalize_audio": "Normalize audio",
|
"normalize_audio": "Normalize audio",
|
||||||
"change_cover": "Change cover",
|
"change_cover": "Change cover",
|
||||||
"add_cover": "Add 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"
|
||||||
}
|
}
|
||||||
@ -459,6 +459,42 @@ class SettingsPage extends HookConsumerWidget {
|
|||||||
value: preferences.normalizeAudio,
|
value: preferences.normalizeAudio,
|
||||||
onChanged: preferences.setNormalizeAudio,
|
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(
|
SectionCardWithHeading(
|
||||||
|
|||||||
@ -40,39 +40,36 @@ enum YoutubeApiType {
|
|||||||
String get label => name[0].toUpperCase() + name.substring(1);
|
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 {
|
class UserPreferences extends PersistedChangeNotifier {
|
||||||
ThemeMode themeMode;
|
|
||||||
Market recommendationMarket;
|
|
||||||
bool saveTrackLyrics;
|
|
||||||
bool checkUpdate;
|
|
||||||
AudioQuality audioQuality;
|
AudioQuality audioQuality;
|
||||||
|
|
||||||
late SpotubeColor accentColorScheme;
|
|
||||||
bool albumColorSync;
|
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 amoledDarkTheme;
|
||||||
|
bool checkUpdate;
|
||||||
bool normalizeAudio;
|
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;
|
final Ref ref;
|
||||||
|
|
||||||
@ -96,6 +93,8 @@ class UserPreferences extends PersistedChangeNotifier {
|
|||||||
this.systemTitleBar = false,
|
this.systemTitleBar = false,
|
||||||
this.amoledDarkTheme = false,
|
this.amoledDarkTheme = false,
|
||||||
this.normalizeAudio = true,
|
this.normalizeAudio = true,
|
||||||
|
this.streamMusicCodec = MusicCodec.weba,
|
||||||
|
this.downloadMusicCodec = MusicCodec.m4a,
|
||||||
SpotubeColor? accentColorScheme,
|
SpotubeColor? accentColorScheme,
|
||||||
}) : super() {
|
}) : super() {
|
||||||
this.accentColorScheme =
|
this.accentColorScheme =
|
||||||
@ -129,6 +128,20 @@ class UserPreferences extends PersistedChangeNotifier {
|
|||||||
setAmoledDarkTheme(false);
|
setAmoledDarkTheme(false);
|
||||||
setNormalizeAudio(true);
|
setNormalizeAudio(true);
|
||||||
setAccentColorScheme(SpotubeColor(Colors.blue.value, name: "Blue"));
|
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) {
|
void setThemeMode(ThemeMode mode) {
|
||||||
@ -327,6 +340,16 @@ class UserPreferences extends PersistedChangeNotifier {
|
|||||||
|
|
||||||
normalizeAudio = map["normalizeAudio"] ?? normalizeAudio;
|
normalizeAudio = map["normalizeAudio"] ?? normalizeAudio;
|
||||||
audioPlayer.setAudioNormalization(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
|
@override
|
||||||
@ -352,6 +375,8 @@ class UserPreferences extends PersistedChangeNotifier {
|
|||||||
'systemTitleBar': systemTitleBar,
|
'systemTitleBar': systemTitleBar,
|
||||||
"amoledDarkTheme": amoledDarkTheme,
|
"amoledDarkTheme": amoledDarkTheme,
|
||||||
"normalizeAudio": normalizeAudio,
|
"normalizeAudio": normalizeAudio,
|
||||||
|
"streamMusicCodec": streamMusicCodec.name,
|
||||||
|
"downloadMusicCodec": downloadMusicCodec.name,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"bn": [
|
"bn": [
|
||||||
@ -12,7 +14,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ca": [
|
"ca": [
|
||||||
@ -20,7 +24,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"de": [
|
"de": [
|
||||||
@ -28,7 +34,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"es": [
|
"es": [
|
||||||
@ -36,7 +44,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"fr": [
|
"fr": [
|
||||||
@ -44,7 +54,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"hi": [
|
"hi": [
|
||||||
@ -52,7 +64,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ja": [
|
"ja": [
|
||||||
@ -60,7 +74,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"pl": [
|
"pl": [
|
||||||
@ -68,7 +84,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"pt": [
|
"pt": [
|
||||||
@ -76,7 +94,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ru": [
|
"ru": [
|
||||||
@ -84,7 +104,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"uk": [
|
"uk": [
|
||||||
@ -92,7 +114,9 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
],
|
],
|
||||||
|
|
||||||
"zh": [
|
"zh": [
|
||||||
@ -100,6 +124,8 @@
|
|||||||
"normalize_audio",
|
"normalize_audio",
|
||||||
"change_cover",
|
"change_cover",
|
||||||
"add_cover",
|
"add_cover",
|
||||||
"restore_defaults"
|
"restore_defaults",
|
||||||
|
"download_music_codec",
|
||||||
|
"streaming_music_codec"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user