-
Notifications
You must be signed in to change notification settings - Fork 0
/
queue.go
67 lines (54 loc) · 1.06 KB
/
queue.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package disgo
import (
"math/rand"
"time"
)
type (
Song interface {
URL() (string, error)
Title() string
Author() string
Duration() string
}
Queue struct {
songs []Song
}
)
func (q *Queue) AddSong(s Song) {
q.songs = append(q.songs, s)
}
func (q *Queue) RemoveSong(i int) {
q.songs = append(q.songs[:i], q.songs[i+1:]...)
}
func (q *Queue) GetSongs() []Song {
return q.songs
}
func (q *Queue) GetSong(i int) Song {
return q.songs[i]
}
func (q *Queue) Len() int {
return len(q.songs)
}
func (q *Queue) IsEmpty() bool {
return q.Len() == 0
}
func (q *Queue) Clear() {
q.songs = []Song{}
}
func (q *Queue) Pop() Song {
song := q.songs[0]
q.songs = q.songs[1:]
return song
}
func (q *Queue) MoveSong(i int, j int) {
song := q.songs[i]
q.songs = append(q.songs[:i], q.songs[i+1:]...)
q.songs = append(q.songs[:j], append([]Song{song}, q.songs[j:]...)...)
}
func (q *Queue) Shuffle() {
s := rand.NewSource(time.Now().UnixNano())
r := rand.New(s)
r.Shuffle(len(q.songs), func(i, j int) {
q.songs[i], q.songs[j] = q.songs[j], q.songs[i]
})
}