Passed
Push — master ( 1f49ab...30b92c )
by Viktor
01:45
created

bot.SongQueue.Start   A

Complexity

Conditions 4

Size

Total Lines 11
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 10
nop 2
dl 0
loc 11
rs 9.9
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
		_ = sess.PlayYoutube(song)
52
	}
53
	if !queue.Running {
54
		callback("stop")
55
	} else {
56
		callback("finish")
57
	}
58
}
59
60
// Current returns current song
61
func (queue *SongQueue) Current() *Song {
62
	return queue.current
63
}
64
65
// Pause pauses queue playing
66
func (queue *SongQueue) Pause() {
67
	queue.Running = false
68
}
69
70
func newSongQueue() *SongQueue {
71
	queue := new(SongQueue)
72
	queue.list = make([]Song, 0)
73
	return queue
74
}
75