aboutsummaryrefslogtreecommitdiff
path: root/downloader/downloader.go
diff options
context:
space:
mode:
authorNathan Perry <avaglir@gmail.com>2017-07-29 18:02:10 -0400
committerNathan Perry <avaglir@gmail.com>2017-07-29 18:02:10 -0400
commit9bd93434fbefc56ac6c154c569e064cc7e5f956d (patch)
treef1aee399f1fc0ecd3d61c64654c83b1bbbcd8fb4 /downloader/downloader.go
parentdeac22dffb03829216138d90e74423384b4c2c80 (diff)
working on adding playback commandsgo
Diffstat (limited to 'downloader/downloader.go')
-rw-r--r--downloader/downloader.go29
1 files changed, 23 insertions, 6 deletions
diff --git a/downloader/downloader.go b/downloader/downloader.go
index 6abe7f0..b7645da 100644
--- a/downloader/downloader.go
+++ b/downloader/downloader.go
@@ -62,13 +62,21 @@ func (d *downloader) Stop() {
})
}
-func (d *downloader) Start() (<-chan []byte, <-chan struct{}) {
+func (d *downloader) Start() <-chan []byte {
out := make(chan []byte, 1024)
- done := make(chan struct{}, 1)
go func() {
- defer close(done)
defer close(out)
+ select {
+ case <-d.done:
+ for wavB := range d.pb {
+ wavB.wav.Stop()
+ wavB.cleanup()
+ }
+ return
+ default:
+ }
+
for wavB := range d.pb {
wavB.wav.Start(out)
@@ -78,17 +86,22 @@ func (d *downloader) Start() (<-chan []byte, <-chan struct{}) {
wavB.cleanup()
case <-wavB.wav.Done:
- break
}
}
}()
- return out, done
+ return out
}
func (d *downloader) schedule() {
defer close(d.pb)
for i := 0; ; i++ {
+ select {
+ case <-d.done:
+ return
+ default:
+ }
+
clipStart := time.Duration(i)*clipTime + d.StartTime
clipEnd := time.Duration(i+1)*clipTime + d.StartTime
@@ -107,7 +120,11 @@ func (d *downloader) schedule() {
return
}
- d.pb <- wavb
+ select {
+ case d.pb <- wavb:
+ case <-d.done:
+ return
+ }
}
}