43
common/resources/client/player/player-queue.ts
Executable file
43
common/resources/client/player/player-queue.ts
Executable file
@@ -0,0 +1,43 @@
|
||||
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,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user