diff options
| author | Nathan Perry <avaglir@gmail.com> | 2017-07-29 18:02:10 -0400 |
|---|---|---|
| committer | Nathan Perry <avaglir@gmail.com> | 2017-07-29 18:02:10 -0400 |
| commit | 9bd93434fbefc56ac6c154c569e064cc7e5f956d (patch) | |
| tree | f1aee399f1fc0ecd3d61c64654c83b1bbbcd8fb4 /downloader/downloader.go | |
| parent | deac22dffb03829216138d90e74423384b4c2c80 (diff) | |
working on adding playback commandsgo
Diffstat (limited to 'downloader/downloader.go')
| -rw-r--r-- | downloader/downloader.go | 29 |
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 + } } } |
