aboutsummaryrefslogtreecommitdiff
path: root/cmd/web/app.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/web/app.go')
-rw-r--r--cmd/web/app.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/cmd/web/app.go b/cmd/web/app.go
new file mode 100644
index 0000000..8f6df89
--- /dev/null
+++ b/cmd/web/app.go
@@ -0,0 +1,75 @@
+package main
+
+import (
+ "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
+}
+
+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
+}
+