Parent directory

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}