package main import ( "flag" "log" "net/http" "os" "path/filepath" "github.com/gorilla/mux" "riedstra.dev/mitch/steam-export/steam" ) var ( Logger = log.New(os.Stderr, "", log.LstdFlags) Listen = ":8899" Lib = steam.NewLibraryMust(DefaultLib) ) //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) if err != nil { Logger.Printf("Error Sending game: %s", err) // Headers already sent, don't bother sending an error } } 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.Parse(os.Args[1:]) if *debug { Logger.SetFlags(log.LstdFlags | log.Llongfile) } r := mux.NewRouter() r.HandleFunc("/download/{game}", gameDownloader) r.HandleFunc("/style.css", cssHandler) r.HandleFunc("/", index) s := http.Server{ Handler: r, Addr: *listen, } Logger.Fatal(s.ListenAndServe()) }