about summary refs log tree commit diff
path: root/tools/mpd-stats
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2021-10-10 16:10:32 -0700
committerFranck Cuny <franck@fcuny.net>2022-06-11 14:32:08 -0700
commitbb52f9d45b2524633b944a6c6117f4802d379791 (patch)
treef6aa5d08537dea0d9f0ed97dceba57b999ba896a /tools/mpd-stats
parentscrobbler: use helper function EqualAttrs (diff)
downloadworld-bb52f9d45b2524633b944a6c6117f4802d379791.tar.gz
mpd-scrobbler: proper default arguments
The program needs two arguments: the mpd host and port, which can be
passed as flags (default is to use the local instance of mpd).

We store the database in `XDG_CONFIG_HOME/mpd-scrobbler`, and we create
the path if needed.
Diffstat (limited to 'tools/mpd-stats')
-rw-r--r--tools/mpd-stats/cmd/mpd-scrobbler/main.go33
1 files changed, 31 insertions, 2 deletions
diff --git a/tools/mpd-stats/cmd/mpd-scrobbler/main.go b/tools/mpd-stats/cmd/mpd-scrobbler/main.go
index fdd9e4d..c2693a4 100644
--- a/tools/mpd-stats/cmd/mpd-scrobbler/main.go
+++ b/tools/mpd-stats/cmd/mpd-scrobbler/main.go
@@ -1,17 +1,29 @@
 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 := "localhost:6600"
-	dbpath := fmt.Sprintf("%s/.config/scrobbler.sql", os.Getenv("HOME"))
+	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 {
@@ -26,3 +38,20 @@ func main() {
 
 	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
+}