package main import ( "log" "net/http" "sync" "text/template" ) // version is set at build time via -ldflags="-X main.version=..." var version = "dev" var importerMu sync.Mutex var importerRunning bool var tmpl = template.Must(template.New("index").Parse(` Music Importer

Music Importer

`)) func handleHome(w http.ResponseWriter, r *http.Request) { importerMu.Lock() running := importerRunning importerMu.Unlock() tmpl.Execute(w, struct { Running bool Version string }{Running: running, Version: version}) } func handleRun(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "POST only", http.StatusMethodNotAllowed) return } importerMu.Lock() running := importerRunning importerMu.Unlock() if running { http.Redirect(w, r, "/", http.StatusSeeOther) return } go RunImporter() http.Redirect(w, r, "/", http.StatusSeeOther) } func main() { log.Printf("Music Importer %s starting on http://localhost:8080", version) http.HandleFunc("/", handleHome) http.HandleFunc("/run", handleRun) log.Fatal(http.ListenAndServe(":8080", nil)) }