package main import ( "flag" "fmt" "log" "os" "path/filepath" "golang.fcuny.net/mpd-stats/internal/scrobbler" ) func main() { var ( mpdHost = flag.String("host", "localhost", "The MPD server to connect to (default: localhost)") mpdPort = flag.Int("port", 6600, "The TCP port of the MPD server to connect to (default: 6600)") ) flag.Parse() net := "tcp" addr := fmt.Sprintf("%s:%d", *mpdHost, *mpdPort) dbpath, err := getDbPath() if err != nil { log.Fatalf("failed to get the path to the database: %v", err) } s, err := scrobbler.NewScrobbler(net, addr, dbpath) if err != nil { log.Fatalf("failed to create a client: %v", err) } defer func() { if err := s.Close(); err != nil { log.Fatalf("failed to close the scrobbler: %v", err) } }() s.Run() } func getDbPath() (string, error) { xch := os.Getenv("XDG_CONFIG_HOME") if xch == "" { home := os.Getenv("HOME") xch = filepath.Join(home, ".config") } scrobblerHome := filepath.Join(xch, "mpd-scrobbler") if _, err := os.Stat(scrobblerHome); os.IsNotExist(err) { if err := os.Mkdir(scrobblerHome, 0755); err != nil { return "", err } } return filepath.Join(scrobblerHome, "scrobbler.sql"), nil }