maotoumao/MusicFree · info
toast.currentQualityNotAvailableForCurrentMusic
Error message
toast.currentQualityNotAvailableForCurrentMusic
What it means
Toast shown when a requested audio quality change is not available for the current track. onQualityPress calls TrackPlayer.changeQuality(quality); a falsy changeResult means the player could not switch to that quality, so a warning is displayed instead of throwing.
Source
Thrown at src/pages/musicDetail/components/content/albumCover/operations.tsx:53
return (
<View
style={[
styles.wrapper,
orientation === "horizontal" ? styles.horizontalWrapper : null,
]}>
<HeartIcon />
<Pressable
onPress={() => {
if (!musicItem) {
return;
}
showPanel("MusicQuality", {
musicItem,
async onQualityPress(quality) {
const changeResult =
await TrackPlayer.changeQuality(quality);
if (!changeResult) {
Toast.warn(i18n.t("toast.currentQualityNotAvailableForCurrentMusic"));
}
},
});
}}>
<Image
source={ImgAsset.quality[currentQuality]}
style={styles.quality}
/>
</Pressable>
<Icon
name={isDownloaded ? "check-circle-outline" : "arrow-down-tray"}
size={iconSizeConst.normal}
color="white"
onPress={() => {
if (musicItem && !isDownloaded) {
showPanel("MusicQuality", {
type: "download",
musicItem,
View on GitHub (pinned to d118b18b3d)
Solutions
- Pick a quality listed as supported for this track's source
- Reload the track (or switch source plugin) so quality variants refresh
- Check whether the source requires login/VIP for higher qualities
Example fix
// before
const changeResult = await TrackPlayer.changeQuality(quality);
if (!changeResult) {
Toast.warn(i18n.t("toast.currentQualityNotAvailableForCurrentMusic"));
}
// after
const changeResult = await TrackPlayer.changeQuality(quality);
if (!changeResult) {
Toast.warn(i18n.t("toast.currentQualityNotAvailableForCurrentMusic"));
await TrackPlayer.changeQuality(currentQuality); // revert to previous quality
} Defensive patterns
Strategy: fallback
Validate before calling
const supported = qualityList.includes(quality); // only offer qualities advertised by the source if (!supported) return;
Try / catch
const ok = await TrackPlayer.changeQuality(quality);
if (!ok) {
Toast.warn(i18n.t('toast.currentQualityNotAvailableForCurrentMusic'));
await TrackPlayer.changeQuality(previousQuality); // fallback
} Prevention
- Only render quality options the source reports as available
- Revert to the previous quality on failure
- Refresh quality list when the track or plugin changes
When it happens
Trigger: Selecting a quality option (e.g. hires/flac) that the current music source/URL does not actually provide — changeQuality returns false rather than throwing.
Common situations: Plugin only exposes one bitrate but the UI lists more; quality URL expired or requires VIP on the source; track loaded from a source without quality variants.
AI-assisted analysis of maotoumao/MusicFree@d118b18b3d (2026-08-30).
Data as JSON: /api/errors/1b958764a4513450.
Report an issue: GitHub.