impl repeat mode

fix position not being restored on close/open due to some bad progress updates
This commit is contained in:
austinried
2021-08-04 22:15:16 +09:00
parent a0b49ec75f
commit 9dc1ac451c
4 changed files with 75 additions and 18 deletions

View File

@@ -1,6 +1,6 @@
import PromiseQueue from '@app/util/PromiseQueue'
import produce from 'immer'
import TrackPlayer, { State, Track } from 'react-native-track-player'
import TrackPlayer, { RepeatMode, State, Track } from 'react-native-track-player'
import { GetState, SetState } from 'zustand'
import { Store } from './store'
@@ -22,6 +22,9 @@ export type TrackPlayerSlice = {
shuffleOrder?: number[]
setShuffleOrder: (shuffleOrder?: number[]) => void
repeatMode: RepeatMode
setRepeatMode: (repeatMode: RepeatMode) => void
playerState: State
setPlayerState: (playerState: State) => void
@@ -48,6 +51,9 @@ export const selectTrackPlayer = {
setShuffleOrder: (store: TrackPlayerSlice) => store.setShuffleOrder,
shuffled: (store: TrackPlayerSlice) => !!store.shuffleOrder,
repeatMode: (store: TrackPlayerSlice) => store.repeatMode,
setRepeatMode: (store: TrackPlayerSlice) => store.setRepeatMode,
playerState: (store: TrackPlayerSlice) => store.playerState,
setPlayerState: (store: TrackPlayerSlice) => store.setPlayerState,
@@ -75,6 +81,9 @@ export const createTrackPlayerSlice = (set: SetState<Store>, get: GetState<Store
shuffleOrder: undefined,
setShuffleOrder: shuffleOrder => set({ shuffleOrder }),
repeatMode: RepeatMode.Off,
setRepeatMode: repeatMode => set({ repeatMode }),
playerState: State.None,
setPlayerState: playerState => set({ playerState }),
@@ -114,6 +123,7 @@ export const createTrackPlayerSlice = (set: SetState<Store>, get: GetState<Store
set({
name: undefined,
shuffleOrder: undefined,
repeatMode: RepeatMode.Off,
playerState: State.None,
currentTrack: undefined,
currentTrackIdx: undefined,
@@ -133,6 +143,9 @@ export const getCurrentTrack = async (): Promise<number | undefined> => {
}
export const getPlayerState = async (): Promise<State> => {
const state = await TrackPlayer.getState()
return state || State.None
return (await TrackPlayer.getState()) || State.None
}
export const getRepeatMode = async (): Promise<RepeatMode> => {
return (await TrackPlayer.getRepeatMode()) || RepeatMode.Off
}