Files

84 lines
1.3 KiB
Go

package music
import (
"math/rand"
"sync"
"github.com/disgoorg/disgolink/v4/lavalink"
)
type Queue struct {
mu sync.Mutex
tracks []lavalink.Track
}
func NewQueue() *Queue {
return &Queue{}
}
func (q *Queue) Push(track lavalink.Track) {
q.mu.Lock()
defer q.mu.Unlock()
q.tracks = append(q.tracks, track)
}
func (q *Queue) Pop() (lavalink.Track, bool) {
q.mu.Lock()
defer q.mu.Unlock()
if len(q.tracks) == 0 {
return lavalink.Track{}, false
}
track := q.tracks[0]
q.tracks = q.tracks[1:]
return track, true
}
func (q *Queue) Clear() {
q.mu.Lock()
defer q.mu.Unlock()
q.tracks = nil
}
func (q *Queue) List() []lavalink.Track {
q.mu.Lock()
defer q.mu.Unlock()
tracks := make([]lavalink.Track, len(q.tracks))
copy(tracks, q.tracks)
return tracks
}
func (q *Queue) Len() int {
q.mu.Lock()
defer q.mu.Unlock()
return len(q.tracks)
}
func (q *Queue) Shuffle() int {
q.mu.Lock()
defer q.mu.Unlock()
rand.Shuffle(len(q.tracks), func(i, j int) {
q.tracks[i], q.tracks[j] = q.tracks[j], q.tracks[i]
})
return len(q.tracks)
}
func (q *Queue) RemoveAt(index int) (lavalink.Track, bool) {
q.mu.Lock()
defer q.mu.Unlock()
if index < 0 || index >= len(q.tracks) {
return lavalink.Track{}, false
}
track := q.tracks[index]
q.tracks = append(q.tracks[:index], q.tracks[index+1:]...)
return track, true
}