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

  1. Pick a quality listed as supported for this track's source
  2. Reload the track (or switch source plugin) so quality variants refresh
  3. 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

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.