]> code.octet-stream.net Git - broadcaster/blobdiff - server/files.go
More UI improvements
[broadcaster] / server / files.go
index 4d6e2939912f76afc8d5760b2c741d788f68fd6e..963be99024ab917bde1762e65ffd12395e3922de 100644 (file)
@@ -7,6 +7,7 @@ import (
        "log"
        "os"
        "path/filepath"
        "log"
        "os"
        "path/filepath"
+       "sync"
 )
 
 type FileSpec struct {
 )
 
 type FileSpec struct {
@@ -18,6 +19,7 @@ type AudioFiles struct {
        path       string
        list       []FileSpec
        changeWait chan bool
        path       string
        list       []FileSpec
        changeWait chan bool
+       filesMutex sync.Mutex
 }
 
 var files AudioFiles
 }
 
 var files AudioFiles
@@ -25,22 +27,22 @@ var files AudioFiles
 func InitAudioFiles(path string) {
        files.changeWait = make(chan bool)
        files.path = path
 func InitAudioFiles(path string) {
        files.changeWait = make(chan bool)
        files.path = path
-       log.Println("initing audio files")
        files.Refresh()
        files.Refresh()
-       log.Println("done")
 }
 
 func (r *AudioFiles) Refresh() {
        entries, err := os.ReadDir(r.path)
        if err != nil {
 }
 
 func (r *AudioFiles) Refresh() {
        entries, err := os.ReadDir(r.path)
        if err != nil {
-               log.Println("couldn't read dir", r.path)
+               log.Println("Couldn't read dir", r.path)
                return
        }
                return
        }
+       r.filesMutex.Lock()
+       defer r.filesMutex.Unlock()
        r.list = nil
        for _, file := range entries {
                f, err := os.Open(filepath.Join(r.path, file.Name()))
                if err != nil {
        r.list = nil
        for _, file := range entries {
                f, err := os.Open(filepath.Join(r.path, file.Name()))
                if err != nil {
-                       log.Println("couldn't open", file.Name())
+                       log.Println("Couldn't open", file.Name())
                        return
                }
                hash := sha256.New()
                        return
                }
                hash := sha256.New()
@@ -57,6 +59,8 @@ func (r *AudioFiles) Path() string {
 }
 
 func (r *AudioFiles) Files() []FileSpec {
 }
 
 func (r *AudioFiles) Files() []FileSpec {
+       r.filesMutex.Lock()
+       defer r.filesMutex.Unlock()
        return r.list
 }
 
        return r.list
 }
 
@@ -68,6 +72,8 @@ func (r *AudioFiles) Delete(filename string) {
        }
 }
 
        }
 }
 
-func (r *AudioFiles) ChangeChannel() chan bool {
-       return r.changeWait
+func (r *AudioFiles) WatchForChanges() ([]FileSpec, chan bool) {
+       r.filesMutex.Lock()
+       defer r.filesMutex.Unlock()
+       return r.list, r.changeWait
 }
 }