Initial commit

This commit is contained in:
2026-05-26 12:11:14 +07:00
commit 9fdd78e737
117 changed files with 10579 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const useQueueStore = defineStore('queue', () => {
const queue = ref([])
const currentIndex = ref(-1)
const shuffle = ref(false)
const repeat = ref('off')
const currentTrack = computed(() => {
if (currentIndex.value < 0 || currentIndex.value >= queue.value.length) return null
return queue.value[currentIndex.value]
})
function setQueue(tracks, startIndex = 0) {
queue.value = tracks
currentIndex.value = startIndex
}
function nextTrack() {
if (queue.value.length === 0) return null
if (repeat.value === 'one') return queue.value[currentIndex.value]
let idx
if (shuffle.value) {
idx = Math.floor(Math.random() * queue.value.length)
} else {
idx = currentIndex.value + 1
}
if (idx >= queue.value.length) {
if (repeat.value === 'all') {
idx = 0
} else {
return null
}
}
currentIndex.value = idx
return queue.value[idx]
}
function prevTrack() {
if (queue.value.length === 0) return null
if (repeat.value === 'one') return queue.value[currentIndex.value]
let idx
if (shuffle.value) {
idx = Math.floor(Math.random() * queue.value.length)
} else {
idx = currentIndex.value - 1
}
if (idx < 0) {
if (repeat.value === 'all') {
idx = queue.value.length - 1
} else {
return null
}
}
currentIndex.value = idx
return queue.value[idx]
}
function toggleShuffle() {
shuffle.value = !shuffle.value
}
function cycleRepeat() {
const modes = ['off', 'all', 'one']
const i = modes.indexOf(repeat.value)
repeat.value = modes[(i + 1) % modes.length]
}
function $reset() {
queue.value = []
currentIndex.value = -1
shuffle.value = false
repeat.value = 'off'
}
return {
queue, currentIndex, shuffle, repeat, currentTrack,
setQueue, nextTrack, prevTrack,
toggleShuffle, cycleRepeat, $reset,
}
})