records/main.go

87 lines
1.8 KiB
Go

// Copyright (c) 2026 Jeremy Baxter.
// entry point for records
package main
import (
"fmt"
"log"
"os"
"github.com/pborman/getopt"
"git.baxters.nz/jeremy/records/musicindex"
"git.baxters.nz/jeremy/records/server"
"git.baxters.nz/jeremy/records/util"
)
const version = "0-pre"
var addr *string
var port *uint16
var tempDir *string
var deleteAndExit *bool
var regenerate *bool
var showVersion *bool
func main() {
addr = getopt.String('a', "0.0.0.0")
port = getopt.Uint16('p', 8000)
tempDir = getopt.String('t', "")
deleteAndExit = getopt.Bool('d')
regenerate = getopt.Bool('r')
showVersion = getopt.Bool('V')
if err := getopt.Getopt(nil); err != nil {
util.Die(err.Error())
}
if len(*tempDir) != 0 {
musicindex.TempDir = *tempDir
}
if *deleteAndExit {
err := os.RemoveAll(musicindex.TempDir)
if err != nil {
util.Die("cannot remove %s: %s", musicindex.TempDir, err.Error())
}
os.Exit(0)
}
if *showVersion {
fmt.Printf("records %s\n", version)
os.Exit(0)
}
args := getopt.Args()
if len(args) != 1 {
fmt.Fprintf(os.Stderr, "usage: %s [-drV] [-a address] [-p port] directory\n", os.Args[0])
os.Exit(1)
}
mediaDir := args[0]
{
interactive := ""
if util.Interactive() {
interactive = ", running with interactive features"
}
log.Printf("This is records %s%s", version, interactive)
}
log.Println("https://git.baxters.nz/jeremy/records")
musicindex.Init(mediaDir, *regenerate)
var artistCount, albumCount, songCount int
artistCount = len(musicindex.Artists())
albumCount = 0
songCount = 0
for _, album := range musicindex.Albums() {
songCount += len(album.TrackFiles)
albumCount++
}
log.Printf("indexed %d artists, %d albums and %d songs\n",
artistCount, albumCount, songCount);
server.RunOn(fmt.Sprintf("%s:%d", *addr, *port))
}