diff options
Diffstat (limited to 'cmd/web/main.go')
| -rw-r--r-- | cmd/web/main.go | 71 |
1 files changed, 25 insertions, 46 deletions
diff --git a/cmd/web/main.go b/cmd/web/main.go index 93025e5..64321da 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -5,7 +5,7 @@ import ( "log" "net/http" "os" - "path/filepath" + "sync" "github.com/gorilla/mux" "riedstra.dev/mitch/steam-export/steam" @@ -15,75 +15,54 @@ var ( Logger = log.New(os.Stderr, "", log.LstdFlags) Listen = ":8899" - Lib = steam.NewLibraryMust(DefaultLib) + libMu = &sync.RWMutex{} + Lib *steam.Library ) -//size, err := estimateSize(g.LibraryPath + "common/" + g.Name) -//if err != nil { -// http.Error(w, "Encountered:"+err, 500) -// return -//} -func estimateSize(pth string) (int64, error) { - var size int64 = 0 - - err := filepath.Walk(pth, func(path string, info os.FileInfo, err error) error { - - if err != nil { - return err - } - - if info.Mode().IsRegular() { - size = size + info.Size() - } - - return nil - }) - - return size, err - -} - -func gameDownloader(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) - game := vars["game"] - - g, ok := Lib.Games[game] - if !ok { - Logger.Printf("Missing: %s", game) - http.Error(w, "Game is missing", 404) - return - } - - w.Header().Add("Content-type", "application/tar") - - err := g.Package(w) +func reloadLib() { + libMu.Lock() + defer libMu.Unlock() + var err error + Lib, err = steam.NewLibrary(DefaultLib) if err != nil { - Logger.Printf("Error Sending game: %s", err) - // Headers already sent, don't bother sending an error + Logger.Printf("Error reopening library: %s", err) + return } - } func main() { fl := flag.NewFlagSet("steam-export", flag.ExitOnError) debug := fl.Bool("d", false, "Print line numbers in log") - listen := fl.String("l", Listen, "What address do we listen on?") + fl.StringVar(&Listen, "l", Listen, "What address do we listen on?") + fl.StringVar(&DefaultLib, "L", DefaultLib, "Full path to default library") fl.Parse(os.Args[1:]) if *debug { Logger.SetFlags(log.LstdFlags | log.Llongfile) } + var err error + Lib, err = steam.NewLibrary(DefaultLib) + if err != nil { + Logger.Fatalf("While opening library path: %s", err) + } + + go installer(getPath) + r := mux.NewRouter() + r.HandleFunc("/delete", gameDelete) + r.HandleFunc("/install", gameInstaller) r.HandleFunc("/download/{game}", gameDownloader) r.HandleFunc("/style.css", cssHandler) r.HandleFunc("/", index) s := http.Server{ Handler: r, - Addr: *listen, + Addr: Listen, } + go startBrowser() + Logger.Fatal(s.ListenAndServe()) } |
