diff --git a/.gitignore b/.gitignore deleted file mode 100644 index e578b50..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -records \ No newline at end of file diff --git a/main.go b/main.go index 1a7d925..9634176 100644 --- a/main.go +++ b/main.go @@ -16,13 +16,11 @@ const version = "0-pre" var addr *string var port *uint16 -var regenerate *bool var showVersion *bool func main() { addr = getopt.String('a', "0.0.0.0") port = getopt.Uint16('p', 8000) - regenerate = getopt.Bool('r') showVersion = getopt.Bool('V') if err := getopt.Getopt(nil); err != nil { util.Die(err.Error()) @@ -35,7 +33,7 @@ func main() { args := getopt.Args() if len(args) != 1 { - fmt.Fprintf(os.Stderr, "usage: %s [-rV] [-a address] [-p port] directory\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "usage: %s [-V] [-a address] [-p port] directory\n", os.Args[0]) os.Exit(1) } @@ -44,7 +42,7 @@ func main() { log.Printf("This is records %s\n", version) log.Println("https://git.baxters.nz/jeremy/records") - musicindex.Init(mediaDir, *regenerate) + musicindex.Init(mediaDir) var artistCount, albumCount, songCount int artistCount = len(musicindex.Artists()) diff --git a/musicindex/index.go b/musicindex/index.go index 3c034c1..76a983e 100644 --- a/musicindex/index.go +++ b/musicindex/index.go @@ -2,6 +2,7 @@ package musicindex import ( "errors" + "fmt" "io/fs" "log" "os" @@ -57,26 +58,13 @@ func indexArtists() { util.Die("%s", err.Error()) } - if (regenerateTarballs) { - err = os.RemoveAll(TempDir) - if err != nil { - util.Die("cannot remove temporary directory %s: %s", TempDir, err.Error()) - } - } - - f, err := os.Stat(TempDir) + err = os.RemoveAll(TempDir) if err != nil { - err = os.Mkdir(TempDir, 0711) - if err != nil { - util.Die("cannot make temporary directory %s: %s", TempDir, - err.Error()) - } - log.Println("generating new tarball index") - } else { - if !f.IsDir() { - util.Die("cannot make temporary directory %s: %s", TempDir, - "not a directory") - } + util.Die("cannot remove temporary directory %s: %s", TempDir, err.Error()) + } + err = os.Mkdir(TempDir, 0711) + if err != nil { + util.Die("cannot make temporary directory %s: %s", TempDir, err.Error()) } artists = make(map[string]Artist) @@ -160,32 +148,42 @@ func indexAlbum(artist *Artist, albumName, albumDir string) (a Album, err error) slices.Sort(tracks) a.TrackFiles = tracks - generate := false hash := util.HashOf(a.Artist.Name + "::" + a.Name) - a.Tarball = TempDir + "/" + hash + path := TempDir + "/" + hash - if _, err = os.Stat(a.Tarball); errors.Is(err, os.ErrNotExist) { - // if the file isn't there we definitely want to generate one - generate = true - } else { // if the file exists or if it's some other error - if regenerateTarballs { - // not sure why this is here since we deleted the whole - // directory beforehand but let's try overwrite it anyway - generate = true + if _, err = os.Stat(path); errors.Is(err, os.ErrNotExist) { + a.Tarball = path + } else if err == nil { + a.Tarball = "" + for i := range 9 { + if _, err = os.Stat(fmt.Sprintf("%s.%d", path, i)); err == nil { + continue + } else if errors.Is(err, os.ErrNotExist) { + a.Tarball = path + } else { + err = errors.New("cannot create tarball in filesystem: " + + err.Error()) + return + } } - } - - if generate { - err = targz.Compress(a.Directory(), a.Tarball) - if err != nil { - a.Tarball = "" + if len(a.Tarball) == 0 { + err = errors.New("cannot create tarball in filesystem; " + + "please clean out " + TempDir) return } + } else { + err = errors.New("cannot create tarball in filesystem: " + err.Error()) + return + } + + a.Tarball = path + err = targz.Compress(a.Directory(), a.Tarball) + if err != nil { + return } tarball, err := os.Stat(a.Tarball) if err != nil { - a.Tarball = "" return } a.TarballSize = tarball.Size() diff --git a/musicindex/musicindex.go b/musicindex/musicindex.go index b70b0d3..c29406c 100644 --- a/musicindex/musicindex.go +++ b/musicindex/musicindex.go @@ -34,23 +34,20 @@ var artists map[string]Artist var coverFileExtension string var defaultCoverFile string var mediaDir string -var regenerateTarballs bool var trackFileExtension string -func Init(path string, regenerate bool) { - InitWith(path, regenerate, ".flac", "cover.jpg", ".jpg") +func Init(path string) { + InitWith(path, ".flac", "cover.jpg", ".jpg") } -func InitWith(path string, regenerate bool, - mediaExtension, coverFile, coverExtension string) { +func InitWith(path, mediaExtension, coverFile, coverExtension string) { if initialised { return } mediaDir = path - defaultCoverFile = coverFile - regenerateTarballs = regenerate trackFileExtension = mediaExtension + defaultCoverFile = coverFile coverFileExtension = coverExtension assertAccessTo(mediaDir)