Added Head/Tail methods for queue
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
DataHoarder 2022-03-02 00:22:39 +01:00
parent fcac047a8d
commit 8254100fb5
2 changed files with 31 additions and 2 deletions

View file

@ -688,7 +688,7 @@ func TestQueue(t *testing.T) {
return
}
q.Add(source, func(q *audio.Queue, entry *audio.QueueEntry) {
q.AddTail(source, func(q *audio.Queue, entry *audio.QueueEntry) {
t.Logf("Started playback of %d %s\n", entry.Identifier, fullPath)
}, func(q *audio.Queue, entry *audio.QueueEntry) {

View file

@ -138,7 +138,36 @@ func (q *Queue) getFilterChain(source Source) Source {
}
}
func (q *Queue) Add(source Source, startPlayback func(q *Queue, entry *QueueEntry), endPlayback func(q *Queue, entry *QueueEntry)) (identifier QueueIdentifier) {
func (q *Queue) AddHead(source Source, startPlayback func(q *Queue, entry *QueueEntry), endPlayback func(q *Queue, entry *QueueEntry)) (identifier QueueIdentifier) {
q.lock.Lock()
splicedOutput, cancel := q.spliceSources(source)
identifier = q.identifierCounter
if len(q.queue) > 0 {
q.queue = append(q.queue[:1], append([]*QueueEntry{&QueueEntry{
Identifier: identifier,
Source: q.getFilterChain(splicedOutput),
cancel: cancel,
StartCallback: startPlayback,
EndCallback: endPlayback,
}}, q.queue[1:]...)...)
} else {
q.queue = append(q.queue, &QueueEntry{
Identifier: identifier,
Source: q.getFilterChain(splicedOutput),
cancel: cancel,
StartCallback: startPlayback,
EndCallback: endPlayback,
})
}
q.identifierCounter++
q.lock.Unlock()
q.sendInterrupt()
return
}
func (q *Queue) AddTail(source Source, startPlayback func(q *Queue, entry *QueueEntry), endPlayback func(q *Queue, entry *QueueEntry)) (identifier QueueIdentifier) {
q.lock.Lock()
splicedOutput, cancel := q.spliceSources(source)