aboutsummaryrefslogtreecommitdiff
path: root/downloader/download_manager.go
diff options
context:
space:
mode:
authorNathan Perry <avaglir@gmail.com>2017-07-29 16:39:57 -0400
committerNathan Perry <avaglir@gmail.com>2017-07-29 16:39:57 -0400
commiteb12be6f8315973bfb3e39c259c00d325889c32c (patch)
treeedf28ba06a7184ff630401ea5ef967524b5fc596 /downloader/download_manager.go
parentb562764a74caa986b99b523dbf78beced6fc1e88 (diff)
refactor works
Diffstat (limited to 'downloader/download_manager.go')
-rw-r--r--downloader/download_manager.go51
1 files changed, 35 insertions, 16 deletions
diff --git a/downloader/download_manager.go b/downloader/download_manager.go
index 481fc4f..d6f3fa0 100644
--- a/downloader/download_manager.go
+++ b/downloader/download_manager.go
@@ -24,7 +24,9 @@ const (
type DownloadManager struct {
conn *discordgo.VoiceConnection
session *discordgo.Session
- dls chan *Downloader
+ guildID string
+ voiceID string
+ dls chan *downloader
PlayState chan DlMessage
playStateChan chan DlMessage
@@ -36,12 +38,14 @@ type DownloadManager struct {
const proxyBufSize = 512
-func NewManager(s *discordgo.Session) *DownloadManager {
+func NewManager(s *discordgo.Session, guildID string, voiceChanID string) *DownloadManager {
dm := &DownloadManager{
session: s,
- dls: make(chan *Downloader),
+ dls: make(chan *downloader),
connUpdate: make(chan connUpdate, 1),
PlayState: make(chan DlMessage),
+ guildID: guildID,
+ voiceID: voiceChanID,
playStateChan: make(chan DlMessage),
@@ -103,39 +107,54 @@ loop:
if attachState == attach {
select {
- case upd := <-m.connUpdate:
- attachState = upd
+ case attachState = <-m.connUpdate:
case m.conn.OpusSend <- <-m.proxyChan:
}
} else {
select {
- case upd := <-m.connUpdate:
- attachState = upd
+ case attachState = <-m.connUpdate:
}
}
}
}
func (m *DownloadManager) playFromQueue() {
-loop:
+ //timer := time.After(5*time.Second)
+
for {
select {
case dl := <-m.dls:
- dl.SendOn(m.proxyChan)
- select {
- case <-dl.done:
- continue loop
-
- case upd:=<-m.playStateChan:
+ if m.conn == nil {
+ ch, err := m.session.ChannelVoiceJoin(m.guildID, m.voiceID, false, false)
+ if err != nil {
+ log.Errorf("unable to connect to the voice channel: %q", err)
+ time.Sleep(1 * time.Second)
+ break
+ }
+ m.conn = ch
+ m.connUpdate <- attach
}
+ m.conn.Speaking(true)
+ // todo: figure out how to do disconnection checking
+ dl.SendOn(m.proxyChan)
+ <-dl.done
+ m.conn.Speaking(false)
+ //case <-timer:
+ // if m.conn != nil {
+ // m.connUpdate<-detach
+ // if err := m.conn.Disconnect(); err != nil {
+ // log.Errorf("disconnecting from voice connection: %q", err)
+ // }
+ // m.conn = nil
+ // }
}
}
}
-func (m *DownloadManager) Enqueue(url string, startTime, endTime time.Duration) error {
- dl, err := NewDownload(url, startTime, endTime)
+func (m *DownloadManager) Enqueue(url string, startTime, duration time.Duration) error {
+ dl, err := newDownload(url, startTime, duration)
if err != nil {
return err
}