mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-06 07:29:42 +00:00
fix: selection preset quality returning null
This commit is contained in:
parent
6272f376ea
commit
e1fa9efa14
@ -69,7 +69,10 @@ class AudioSourceAvailableQualityPresetsNotifier
|
|||||||
|
|
||||||
if (persistedStateStr != null) {
|
if (persistedStateStr != null) {
|
||||||
state =
|
state =
|
||||||
AudioSourcePresetsState.fromJson(jsonDecode(persistedStateStr));
|
AudioSourcePresetsState.fromJson(jsonDecode(persistedStateStr))
|
||||||
|
.copyWith(
|
||||||
|
presets: audioSource.audioSource.supportedPresets,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
state = AudioSourcePresetsState(
|
state = AudioSourcePresetsState(
|
||||||
presets: audioSource.audioSource.supportedPresets,
|
presets: audioSource.audioSource.supportedPresets,
|
||||||
|
|||||||
@ -306,6 +306,8 @@ class SourcedTrack extends BasicSourcedTrack {
|
|||||||
SpotubeAudioSourceContainerPreset preset,
|
SpotubeAudioSourceContainerPreset preset,
|
||||||
int qualityIndex,
|
int qualityIndex,
|
||||||
) {
|
) {
|
||||||
|
if (sources.isEmpty) return null;
|
||||||
|
|
||||||
final quality = preset.qualities[qualityIndex];
|
final quality = preset.qualities[qualityIndex];
|
||||||
|
|
||||||
final exactMatch = sources.firstWhereOrNull(
|
final exactMatch = sources.firstWhereOrNull(
|
||||||
@ -326,45 +328,24 @@ class SourcedTrack extends BasicSourcedTrack {
|
|||||||
return exactMatch;
|
return exactMatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the closest to preset
|
// Find the preset with closest quality to the supplied quality
|
||||||
SpotubeAudioSourceStreamObject? closest;
|
return sources.where((source) {
|
||||||
for (final source in sources) {
|
return source.container == preset.name;
|
||||||
if (source.container != preset.name) continue;
|
}).reduce((prev, curr) {
|
||||||
|
if (quality is SpotubeAudioLosslessContainerQuality) {
|
||||||
if (quality case SpotubeAudioLosslessContainerQuality()) {
|
final prevDiff = ((prev.sampleRate ?? 0) - quality.sampleRate).abs() +
|
||||||
final sourceBps = (source.bitDepth ?? 0) * (source.sampleRate ?? 0);
|
((prev.bitDepth ?? 0) - quality.bitDepth).abs();
|
||||||
final qualityBps = quality.bitDepth * quality.sampleRate;
|
final currDiff = ((curr.sampleRate ?? 0) - quality.sampleRate).abs() +
|
||||||
final closestBps =
|
((curr.bitDepth ?? 0) - quality.bitDepth).abs();
|
||||||
(closest?.bitDepth ?? 0) * (closest?.sampleRate ?? 0);
|
return currDiff < prevDiff ? curr : prev;
|
||||||
|
|
||||||
if (sourceBps == qualityBps) {
|
|
||||||
closest = source;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
final closestDiff = (closestBps - qualityBps).abs();
|
|
||||||
final sourceDiff = (sourceBps - qualityBps).abs();
|
|
||||||
|
|
||||||
if (sourceDiff < closestDiff) {
|
|
||||||
closest = source;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
final presetBitrate =
|
final prevDiff = ((prev.bitrate ?? 0) -
|
||||||
(preset as SpotubeAudioLossyContainerQuality).bitrate;
|
(quality as SpotubeAudioLossyContainerQuality).bitrate)
|
||||||
if (presetBitrate == source.bitrate) {
|
.abs();
|
||||||
closest = source;
|
final currDiff = ((curr.bitrate ?? 0) - quality.bitrate).abs();
|
||||||
break;
|
return currDiff < prevDiff ? curr : prev;
|
||||||
}
|
|
||||||
|
|
||||||
final closestDiff = (closest?.bitrate ?? 0) - presetBitrate;
|
|
||||||
final sourceDiff = (source.bitrate ?? 0) - presetBitrate;
|
|
||||||
|
|
||||||
if (sourceDiff < closestDiff) {
|
|
||||||
closest = source;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
return closest;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String? getUrlOfQuality(
|
String? getUrlOfQuality(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user