feat: playbacks
This commit is contained in:
@@ -63,8 +63,8 @@ const HIDDEN_ROUTE_NAMES = new Set([
|
||||
Routes.Register,
|
||||
]);
|
||||
|
||||
const noopAsync = async () => { };
|
||||
const noop = () => { };
|
||||
const noopAsync = async () => {};
|
||||
const noop = () => {};
|
||||
|
||||
const DEFAULT_CONTEXT = {
|
||||
currentTrack: null,
|
||||
@@ -274,36 +274,36 @@ const PlayerProvider = ({ children }) => {
|
||||
(items = [], options = {}) => {
|
||||
const normalized = Array.isArray(items)
|
||||
? items
|
||||
.map((item) => {
|
||||
if (!item) return null;
|
||||
if (typeof item === "object") {
|
||||
const { metadata, context, ...rest } = item;
|
||||
const safeMetadata =
|
||||
metadata && typeof metadata === "object"
|
||||
? { ...metadata }
|
||||
: undefined;
|
||||
if (safeMetadata) {
|
||||
delete safeMetadata.queue;
|
||||
.map((item) => {
|
||||
if (!item) return null;
|
||||
if (typeof item === "object") {
|
||||
const { metadata, context, ...rest } = item;
|
||||
const safeMetadata =
|
||||
metadata && typeof metadata === "object"
|
||||
? { ...metadata }
|
||||
: undefined;
|
||||
if (safeMetadata) {
|
||||
delete safeMetadata.queue;
|
||||
}
|
||||
const safeContext =
|
||||
context && typeof context === "object"
|
||||
? { ...context }
|
||||
: undefined;
|
||||
if (safeContext) {
|
||||
delete safeContext.queue;
|
||||
}
|
||||
return normalizeTrack(
|
||||
{
|
||||
...rest,
|
||||
...(safeMetadata ? { metadata: safeMetadata } : {}),
|
||||
...(safeContext ? { context: safeContext } : {}),
|
||||
},
|
||||
{}
|
||||
);
|
||||
}
|
||||
const safeContext =
|
||||
context && typeof context === "object"
|
||||
? { ...context }
|
||||
: undefined;
|
||||
if (safeContext) {
|
||||
delete safeContext.queue;
|
||||
}
|
||||
return normalizeTrack(
|
||||
{
|
||||
...rest,
|
||||
...(safeMetadata ? { metadata: safeMetadata } : {}),
|
||||
...(safeContext ? { context: safeContext } : {}),
|
||||
},
|
||||
{}
|
||||
);
|
||||
}
|
||||
return normalizeTrack(item, {});
|
||||
})
|
||||
.filter((track) => !!track?.source)
|
||||
return normalizeTrack(item, {});
|
||||
})
|
||||
.filter((track) => !!track?.source)
|
||||
: [];
|
||||
|
||||
queueRef.current = normalized;
|
||||
@@ -450,10 +450,9 @@ const PlayerProvider = ({ children }) => {
|
||||
if (!player) return;
|
||||
try {
|
||||
player.loop = !!isLooping;
|
||||
} catch (_err) { }
|
||||
} catch (_err) {}
|
||||
}, [player, isLooping]);
|
||||
|
||||
|
||||
const seekDebounceRef = useRef(null);
|
||||
const pendingSeekPosRef = useRef(null);
|
||||
const isSeekingRef = useRef(false);
|
||||
@@ -511,9 +510,12 @@ const PlayerProvider = ({ children }) => {
|
||||
|
||||
const seekBy = useCallback(
|
||||
async (deltaMs) => {
|
||||
const currentPos = pendingSeekPosRef.current !== null
|
||||
? (Platform.OS === "web" ? pendingSeekPosRef.current : pendingSeekPosRef.current * 1000)
|
||||
: playback.positionMs;
|
||||
const currentPos =
|
||||
pendingSeekPosRef.current !== null
|
||||
? Platform.OS === "web"
|
||||
? pendingSeekPosRef.current
|
||||
: pendingSeekPosRef.current * 1000
|
||||
: playback.positionMs;
|
||||
const next = Math.max(0, currentPos + Number(deltaMs || 0));
|
||||
await seekTo(next);
|
||||
},
|
||||
@@ -548,7 +550,6 @@ const PlayerProvider = ({ children }) => {
|
||||
await waitForActiveSeek();
|
||||
}, [player, status?.isLoaded, waitForActiveSeek]);
|
||||
|
||||
|
||||
const play = useCallback(
|
||||
async (trackInput, options = {}) => {
|
||||
const normalized = normalizeTrack(trackInput, options);
|
||||
@@ -680,8 +681,6 @@ const PlayerProvider = ({ children }) => {
|
||||
[currentTrack, playback.isPlaying, pause, play, resume]
|
||||
);
|
||||
|
||||
|
||||
|
||||
const stop = useCallback(async () => {
|
||||
try {
|
||||
autoPlayRef.current = false;
|
||||
@@ -720,7 +719,9 @@ const PlayerProvider = ({ children }) => {
|
||||
}
|
||||
return;
|
||||
}
|
||||
const idx = queueRef.current.findIndex((item) => item.id === currentTrack.id);
|
||||
const idx = queueRef.current.findIndex(
|
||||
(item) => item.id === currentTrack.id
|
||||
);
|
||||
if (idx !== queueIndexRef.current) {
|
||||
setQueueIndexValue(idx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user