]> code.octet-stream.net Git - broadcaster/blobdiff - server/radio_sync.go
Allow web user to cancel transmission in progress
[broadcaster] / server / radio_sync.go
index 3dfd4ed5395c008b6cdfe9889fda4d8e6de240ae..2eaef340fdf6bec1d9a430ca5e4447f5b588f33e 100644 (file)
@@ -53,22 +53,11 @@ func RadioSync(ws *websocket.Conn) {
                        radio = r
                        log.Println("Radio authenticated:", radio.Name)
                        isAuthenticated = true
                        radio = r
                        log.Println("Radio authenticated:", radio.Name)
                        isAuthenticated = true
+                       commandRouter.AddWebsocket(r.Id, ws)
+                       defer commandRouter.RemoveWebsocket(ws)
 
                        go KeepFilesUpdated(ws)
 
                        go KeepFilesUpdated(ws)
-
-                       // send initial file message
-                       err = sendFilesMessageToRadio(ws)
-                       if err != nil {
-                               return
-                       }
-
                        go KeepPlaylistsUpdated(ws)
                        go KeepPlaylistsUpdated(ws)
-
-                       // send initial playlists message
-                       err = sendPlaylistsMessageToRadio(ws)
-                       if err != nil {
-                               return
-                       }
                }
 
                if t == protocol.StatusType {
                }
 
                if t == protocol.StatusType {
@@ -79,9 +68,9 @@ func RadioSync(ws *websocket.Conn) {
        }
 }
 
        }
 }
 
-func sendPlaylistsMessageToRadio(ws *websocket.Conn) error {
+func sendPlaylistsMessageToRadio(ws *websocket.Conn, p []Playlist) error {
        playlistSpecs := make([]protocol.PlaylistSpec, 0)
        playlistSpecs := make([]protocol.PlaylistSpec, 0)
-       for _, v := range db.GetPlaylists() {
+       for _, v := range p {
                if v.Enabled {
                        entrySpecs := make([]protocol.EntrySpec, 0)
                        for _, e := range db.GetEntriesForPlaylist(v.Id) {
                if v.Enabled {
                        entrySpecs := make([]protocol.EntrySpec, 0)
                        for _, e := range db.GetEntriesForPlaylist(v.Id) {
@@ -101,17 +90,18 @@ func sendPlaylistsMessageToRadio(ws *websocket.Conn) error {
 
 func KeepPlaylistsUpdated(ws *websocket.Conn) {
        for {
 
 func KeepPlaylistsUpdated(ws *websocket.Conn) {
        for {
-               <-playlistChangeWait
-               err := sendPlaylistsMessageToRadio(ws)
+               p, ch := playlists.WatchForChanges()
+               err := sendPlaylistsMessageToRadio(ws, p)
                if err != nil {
                        return
                }
                if err != nil {
                        return
                }
+               <-ch
        }
 }
 
        }
 }
 
-func sendFilesMessageToRadio(ws *websocket.Conn) error {
+func sendFilesMessageToRadio(ws *websocket.Conn, f []FileSpec) error {
        specs := make([]protocol.FileSpec, 0)
        specs := make([]protocol.FileSpec, 0)
-       for _, v := range files.Files() {
+       for _, v := range f {
                specs = append(specs, protocol.FileSpec{Name: v.Name, Hash: v.Hash})
        }
        files := protocol.FilesMessage{
                specs = append(specs, protocol.FileSpec{Name: v.Name, Hash: v.Hash})
        }
        files := protocol.FilesMessage{
@@ -125,10 +115,11 @@ func sendFilesMessageToRadio(ws *websocket.Conn) error {
 
 func KeepFilesUpdated(ws *websocket.Conn) {
        for {
 
 func KeepFilesUpdated(ws *websocket.Conn) {
        for {
-               <-files.ChangeChannel()
-               err := sendFilesMessageToRadio(ws)
+               f, ch := files.WatchForChanges()
+               err := sendFilesMessageToRadio(ws, f)
                if err != nil {
                        return
                }
                if err != nil {
                        return
                }
+               <-ch
        }
 }
        }
 }