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