main.go
1424 bytes
1package main
2
3import (
4 "flag"
5 "fmt"
6 "net/http"
7 "os"
8
9 tea "github.com/charmbracelet/bubbletea"
10)
11
12func main() {
13 dir := flag.String("dir", "/mnt/media/music", "directory to scan for music files")
14 blacklist := flag.String("blacklist", "blacklist", "path to blacklist file (one directory per line, fully excluded)")
15 rounds := flag.Int("rounds", 10, "number of rounds")
16 web := flag.Bool("web", false, "run as a web server instead of the TUI")
17 port := flag.Int("port", 8080, "port for the web server")
18 flag.Parse()
19
20 catalog, err := buildCatalog(*dir, *blacklist)
21 if err != nil {
22 fmt.Fprintf(os.Stderr, "error building catalog: %v\n", err)
23 os.Exit(1)
24 }
25 if len(catalog) == 0 {
26 fmt.Fprintln(os.Stderr, "no songs found in the catalog")
27 os.Exit(1)
28 }
29
30 if *rounds <= 0 {
31 *rounds = len(catalog)
32 }
33
34 if *web {
35 srv, err := newServer(catalog, *rounds)
36 if err != nil {
37 fmt.Fprintf(os.Stderr, "error starting web server: %v\n", err)
38 os.Exit(1)
39 }
40 addr := fmt.Sprintf(":%d", *port)
41 fmt.Printf("Muse Guessr web server listening on http://localhost:%d\n", *port)
42 if err := http.ListenAndServe(addr, srv.handler()); err != nil {
43 fmt.Fprintf(os.Stderr, "server error: %v\n", err)
44 os.Exit(1)
45 }
46 return
47 }
48
49 m := newModel(catalog, *rounds)
50 p := tea.NewProgram(m, tea.WithAltScreen())
51 if _, err := p.Run(); err != nil {
52 fmt.Fprintf(os.Stderr, "error running TUI: %v\n", err)
53 os.Exit(1)
54 }
55}