You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
932 B
41 lines
932 B
import { MWStreamType } from "@/backend/helpers/streams"; |
|
import { MakeSlice } from "@/stores/player/slices/types"; |
|
import { ValuesOf } from "@/utils/typeguard"; |
|
|
|
export const playerStatus = { |
|
IDLE: "idle", |
|
SCRAPING: "scraping", |
|
PLAYING: "playing", |
|
} as const; |
|
|
|
export type PlayerStatus = ValuesOf<typeof playerStatus>; |
|
|
|
export interface SourceSliceSource { |
|
url: string; |
|
type: MWStreamType; |
|
} |
|
|
|
export interface SourceSlice { |
|
status: PlayerStatus; |
|
source: SourceSliceSource | null; |
|
setStatus(status: PlayerStatus): void; |
|
setSource(url: string, type: MWStreamType): void; |
|
} |
|
|
|
export const createSourceSlice: MakeSlice<SourceSlice> = (set) => ({ |
|
source: null, |
|
status: playerStatus.IDLE, |
|
setStatus(status: PlayerStatus) { |
|
set((s) => { |
|
s.status = status; |
|
}); |
|
}, |
|
setSource(url: string, type: MWStreamType) { |
|
set((s) => { |
|
s.source = { |
|
type, |
|
url, |
|
}; |
|
}); |
|
}, |
|
});
|
|
|