fix global player mobile

This commit is contained in:
2025-10-20 16:52:48 +02:00
parent c69afd93c8
commit 4796dbd434
+18 -26
View File
@@ -106,11 +106,6 @@ const MusicDetails = ({ route }) => {
seekBy: seekTrackBy,
} = useTrackController(trackDescriptor);
const progressInfo = useMemo(
() => ({ pos: positionMs, dur: durationMs }),
[positionMs, durationMs]
);
// Karaoke aligned words (from timestamps)
const alignedWords = useMemo(() => {
try {
@@ -176,11 +171,11 @@ const MusicDetails = ({ route }) => {
return `${m}:${s}`;
};
const handleTogglePlay = useCallback(async () => {
const togglePlay = useCallback(async () => {
if (!trackDescriptor) return;
try {
if (!isCurrentTrack) {
await ensureLoaded({ startPositionMs: progressInfo.pos, autoPlay: true });
await ensureLoaded({ startPositionMs: positionMs, autoPlay: true });
return;
}
if (isTrackPlaying) {
@@ -195,7 +190,7 @@ const MusicDetails = ({ route }) => {
trackDescriptor,
isCurrentTrack,
ensureLoaded,
progressInfo.pos,
positionMs,
isTrackPlaying,
pauseTrack,
resumeTrack,
@@ -206,10 +201,7 @@ const MusicDetails = ({ route }) => {
try {
wasPlayingBeforeSeek.current = isTrackPlaying;
if (!isCurrentTrack) {
await ensureLoaded({
startPositionMs: progressInfo.pos,
autoPlay: false,
});
await ensureLoaded({ startPositionMs: positionMs, autoPlay: false });
}
if (isTrackPlaying) {
await pauseTrack();
@@ -222,13 +214,13 @@ const MusicDetails = ({ route }) => {
isTrackPlaying,
isCurrentTrack,
ensureLoaded,
progressInfo.pos,
positionMs,
pauseTrack,
]);
const handleSliderSeek = useCallback(
async (ratio) => {
const dur = progressInfo.dur || 0;
const dur = durationMs || 0;
if (!trackDescriptor || dur <= 0) return;
const targetMs = Math.max(0, Math.floor(dur * ratio));
try {
@@ -241,14 +233,14 @@ const MusicDetails = ({ route }) => {
console.log("MusicDetails seek error", e?.message);
}
},
[progressInfo.dur, trackDescriptor, isCurrentTrack, ensureLoaded, seekTrackTo]
[durationMs, trackDescriptor, isCurrentTrack, ensureLoaded, seekTrackTo]
);
const handleSliderSeekEnd = useCallback(async () => {
try {
if (wasPlayingBeforeSeek.current) {
if (!isCurrentTrack) {
await ensureLoaded({ startPositionMs: progressInfo.pos, autoPlay: true });
await ensureLoaded({ startPositionMs: positionMs, autoPlay: true });
} else {
await resumeTrack();
}
@@ -258,13 +250,13 @@ const MusicDetails = ({ route }) => {
} finally {
wasPlayingBeforeSeek.current = false;
}
}, [ensureLoaded, isCurrentTrack, progressInfo.pos, resumeTrack]);
}, [ensureLoaded, isCurrentTrack, positionMs, resumeTrack]);
const handleSeekBySeconds = useCallback(
async (deltaSeconds) => {
if (!trackDescriptor) return;
const deltaMs = Number(deltaSeconds || 0) * 1000;
const target = Math.max(0, (progressInfo.pos || 0) + deltaMs);
const target = Math.max(0, (positionMs || 0) + deltaMs);
try {
if (!isCurrentTrack) {
await ensureLoaded({ startPositionMs: target, autoPlay: true });
@@ -277,7 +269,7 @@ const MusicDetails = ({ route }) => {
},
[
trackDescriptor,
progressInfo.pos,
positionMs,
isCurrentTrack,
ensureLoaded,
seekTrackBy,
@@ -341,8 +333,8 @@ const MusicDetails = ({ route }) => {
// Current time in seconds for highlighting
const currentTimeS = useMemo(
() => Math.max(0, (progressInfo.pos || 0) / 1000),
[progressInfo.pos]
() => Math.max(0, (positionMs || 0) / 1000),
[positionMs]
);
// Preview lead: show words 0.5s earlier
const visibleTimeS = useMemo(
@@ -657,11 +649,11 @@ const MusicDetails = ({ route }) => {
{songUrl && (
<View style={{ paddingTop: 22 }}>
<Slider
value={fmt(progressInfo.pos)}
maxValue={fmt(progressInfo.dur)}
value={fmt(positionMs)}
maxValue={fmt(durationMs)}
progress={
progressInfo.dur
? Math.min(1, Math.max(0, (progressInfo.pos || 0) / progressInfo.dur))
durationMs
? Math.min(1, Math.max(0, (positionMs || 0) / durationMs))
: 0
}
seekEnabled={!!songUrl}
@@ -688,7 +680,7 @@ const MusicDetails = ({ route }) => {
alignItems: "center",
justifyContent: "center",
}}
onPress={handleTogglePlay}
onPress={togglePlay}
>
<RNImage
resizeMode={"contain"}