bot.*SongQueue.HasNext   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 0
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
package bot
2
3
// SongQueue struct contains songs array
4
type SongQueue struct {
5
	list    []Song
6
	current *Song
7
	Running bool
8
}
9
10
// Get returns songs array
11
func (queue *SongQueue) Get() []Song {
12
	return queue.list
13
}
14
15
// Set sets songs array
16
func (queue *SongQueue) Set(list []Song) {
17
	queue.list = list
18
}
19
20
// Add adds one song in songs array
21
func (queue *SongQueue) Add(song *Song) {
22
	queue.list = append(queue.list, *song)
23
}
24
25
// HasNext check if exist newx song in queue
26
func (queue *SongQueue) HasNext() bool {
27
	return len(queue.list) > 0
28
}
29
30
// Next returns next song from queue
31
func (queue *SongQueue) Next() Song {
32
	song := queue.list[0]
33
	queue.list = queue.list[1:]
34
	queue.current = &song
35
	return song
36
}
37
38
// Clear removes all songs from queue
39
func (queue *SongQueue) Clear() {
40
	queue.list = make([]Song, 0)
41
	queue.Running = false
42
	queue.current = nil
43
}
44
45
// Start starts queue playing
46
func (queue SongQueue) Start(sess *Session, callback func(string)) {
47
	queue.Running = true
48
	for queue.HasNext() && queue.Running {
49
		song := queue.Next()
50
		callback(song.Title)
51
		// TODO: sess already has volume, dont pass it here
52
		_ = sess.Play(song.Media, sess.Volume)
53
	}
54
	if !queue.Running {
55
		callback("stop")
56
	} else {
57
		callback("finish")
58
	}
59
}
60
61
// Current returns current song
62
func (queue *SongQueue) Current() *Song {
63
	return queue.current
64
}
65
66
// Pause pauses queue playing
67
func (queue *SongQueue) Pause() {
68
	queue.Running = false
69
}
70
71
func newSongQueue() *SongQueue {
72
	queue := new(SongQueue)
73
	queue.list = make([]Song, 0)
74
	return queue
75
}
76