72 lines
1.4 KiB
JavaScript
72 lines
1.4 KiB
JavaScript
|
|
import { defineStore } from 'pinia'
|
||
|
|
import { ref } from 'vue'
|
||
|
|
|
||
|
|
export const usePlayerStore = defineStore('player', () => {
|
||
|
|
const isPlaying = ref(false)
|
||
|
|
const currentTrack = ref(null)
|
||
|
|
const currentTrackUrl = ref(null)
|
||
|
|
const position = ref(0)
|
||
|
|
const duration = ref(0)
|
||
|
|
const volume = ref(100)
|
||
|
|
|
||
|
|
function setPlayerState(state) {
|
||
|
|
isPlaying.value = state.is_playing
|
||
|
|
position.value = state.position
|
||
|
|
if (state.current_track_id) {
|
||
|
|
currentTrack.value = { id: state.current_track_id }
|
||
|
|
}
|
||
|
|
if (state.track_url) {
|
||
|
|
currentTrackUrl.value = state.track_url
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function setTrack(track, url) {
|
||
|
|
currentTrack.value = track
|
||
|
|
currentTrackUrl.value = url
|
||
|
|
position.value = 0
|
||
|
|
}
|
||
|
|
|
||
|
|
function setPosition(pos) {
|
||
|
|
position.value = pos
|
||
|
|
}
|
||
|
|
|
||
|
|
function setDuration(dur) {
|
||
|
|
duration.value = dur
|
||
|
|
}
|
||
|
|
|
||
|
|
function setVolume(vol) {
|
||
|
|
volume.value = vol
|
||
|
|
localStorage.setItem('volume', vol)
|
||
|
|
}
|
||
|
|
|
||
|
|
function play() {
|
||
|
|
isPlaying.value = true
|
||
|
|
}
|
||
|
|
|
||
|
|
function pause() {
|
||
|
|
isPlaying.value = false
|
||
|
|
}
|
||
|
|
|
||
|
|
// Load saved volume
|
||
|
|
const savedVolume = localStorage.getItem('volume')
|
||
|
|
if (savedVolume) {
|
||
|
|
volume.value = parseInt(savedVolume)
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
isPlaying,
|
||
|
|
currentTrack,
|
||
|
|
currentTrackUrl,
|
||
|
|
position,
|
||
|
|
duration,
|
||
|
|
volume,
|
||
|
|
setPlayerState,
|
||
|
|
setTrack,
|
||
|
|
setPosition,
|
||
|
|
setDuration,
|
||
|
|
setVolume,
|
||
|
|
play,
|
||
|
|
pause,
|
||
|
|
}
|
||
|
|
})
|