mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-27 00:59:28 +01:00
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { useStore } from '@app/state/store'
|
|
import { getQueue, selectTrackPlayer, trackPlayerCommands } from '@app/state/trackplayer'
|
|
import TrackPlayer from 'react-native-track-player'
|
|
|
|
export const usePlay = () => {
|
|
return () => trackPlayerCommands.enqueue(() => TrackPlayer.play())
|
|
}
|
|
|
|
export const usePause = () => {
|
|
return () => trackPlayerCommands.enqueue(() => TrackPlayer.pause())
|
|
}
|
|
|
|
export const usePrevious = () => {
|
|
return () =>
|
|
trackPlayerCommands.enqueue(async () => {
|
|
const [current] = await Promise.all([await TrackPlayer.getCurrentTrack(), await getQueue()])
|
|
if (current > 0) {
|
|
await TrackPlayer.skipToPrevious()
|
|
} else {
|
|
await TrackPlayer.seekTo(0)
|
|
}
|
|
await TrackPlayer.play()
|
|
})
|
|
}
|
|
|
|
export const useNext = () => {
|
|
return () =>
|
|
trackPlayerCommands.enqueue(async () => {
|
|
const [current, queue] = await Promise.all([await TrackPlayer.getCurrentTrack(), await getQueue()])
|
|
if (current >= queue.length - 1) {
|
|
await TrackPlayer.skip(0)
|
|
await TrackPlayer.pause()
|
|
} else {
|
|
await TrackPlayer.skipToNext()
|
|
await TrackPlayer.play()
|
|
}
|
|
})
|
|
}
|
|
|
|
export const useSkipTo = () => {
|
|
return (track: number) =>
|
|
trackPlayerCommands.enqueue(async () => {
|
|
const queue = await getQueue()
|
|
if (track < 0 || track >= queue.length) {
|
|
return
|
|
}
|
|
await TrackPlayer.skip(track)
|
|
await TrackPlayer.play()
|
|
})
|
|
}
|
|
|
|
export const useSeekTo = () => {
|
|
return (position: number) =>
|
|
trackPlayerCommands.enqueue(async () => {
|
|
await TrackPlayer.seekTo(position)
|
|
})
|
|
}
|
|
|
|
export const useReset = (enqueue = true) => {
|
|
const resetStore = useStore(selectTrackPlayer.resetTrackPlayerState)
|
|
|
|
const reset = async () => {
|
|
await TrackPlayer.reset()
|
|
resetStore()
|
|
}
|
|
|
|
return enqueue ? () => trackPlayerCommands.enqueue(reset) : reset
|
|
}
|
|
|
|
export const useIsPlaying = (contextId: string | undefined, track: number) => {
|
|
const queueContextId = useStore(selectTrackPlayer.queueContextId)
|
|
const currentTrackIdx = useStore(selectTrackPlayer.currentTrackIdx)
|
|
const shuffleOrder = useStore(selectTrackPlayer.shuffleOrder)
|
|
|
|
if (contextId === undefined) {
|
|
return track === currentTrackIdx
|
|
}
|
|
|
|
if (shuffleOrder) {
|
|
const shuffledTrack = shuffleOrder.findIndex(i => i === track)
|
|
track = shuffledTrack !== undefined ? shuffledTrack : -1
|
|
}
|
|
|
|
return contextId === queueContextId && track === currentTrackIdx
|
|
}
|