package main import ( "os" "path/filepath" "sync" "html/template" "time" "riedstra.dev/mitch/steam-export/steam" ) type steamLib struct { steam.Library sync.Mutex } type statusInfo struct { sync.RWMutex Running bool Error error Url string Transferred int64 Size int64 Start *time.Time } type App struct { Library *steamLib Status *statusInfo Templates *template.Template // Sending to this channel triggers the downloader in the background download chan string } var getWd string func (a *App) MuhTemplates() *template.Template { if getWd == "" { getWd, _ = os.Getwd() } return template.Must(template.ParseFiles( filepath.Join(getWd, "cmd/web/templates/index.html"))) } func NewApp(libPath string) (*App, error) { lib, err := steam.NewLibrary(libPath) if err != nil { return nil, err } a := &App{ Library: &steamLib{}, Status: &statusInfo{}, download: make(chan string), } a.Library.Library = *lib a.Templates = template.Must(template.New("index").Parse(indexTemplate)) return a, nil } func (a *App) LibrarySet(path string) { Logger.Println("Starting library reload") a.Library.Lock() defer a.Library.Unlock() var err error l2, err := steam.NewLibrary(path) if err != nil { Logger.Printf("Error reopening lib: %s", err) return } a.Library.Library = *l2 Logger.Println("Done reloading lib") } func (a *App) LibraryReload() { cur := a.Library.Folder a.LibrarySet(cur) return }