44 lines
1.1 KiB
TypeScript
Executable File
44 lines
1.1 KiB
TypeScript
Executable File
import {MediaItem} from '@common/player/media-item';
|
|
import {PlayerState} from '@common/player/state/player-state';
|
|
|
|
export function playerQueue(state: () => PlayerState) {
|
|
const getPointer = (): number => {
|
|
if (state().cuedMedia) {
|
|
return (
|
|
state().shuffledQueue.findIndex(
|
|
item => item.id === state().cuedMedia?.id
|
|
) || 0
|
|
);
|
|
}
|
|
return 0;
|
|
};
|
|
const getCurrent = (): MediaItem | undefined => {
|
|
return state().shuffledQueue[getPointer()];
|
|
};
|
|
const getFirst = (): MediaItem | undefined => {
|
|
return state().shuffledQueue[0];
|
|
};
|
|
const getLast = (): MediaItem | undefined => {
|
|
return state().shuffledQueue[state().shuffledQueue.length - 1];
|
|
};
|
|
const getNext = (): MediaItem | undefined => {
|
|
return state().shuffledQueue[getPointer() + 1];
|
|
};
|
|
const getPrevious = (): MediaItem | undefined => {
|
|
return state().shuffledQueue[getPointer() - 1];
|
|
};
|
|
const isLast = (): boolean => {
|
|
return getPointer() === state().originalQueue.length - 1;
|
|
};
|
|
|
|
return {
|
|
getPointer,
|
|
getCurrent,
|
|
getFirst,
|
|
getLast,
|
|
getNext,
|
|
getPrevious,
|
|
isLast,
|
|
};
|
|
}
|