musicindex: cache tarballs by default
overridable with the -r command line option
This commit is contained in:
parent
a392a5fc4c
commit
3f892331f6
3 changed files with 46 additions and 39 deletions
|
|
@ -2,7 +2,6 @@ package musicindex
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log"
|
||||
"os"
|
||||
|
|
@ -58,13 +57,26 @@ func indexArtists() {
|
|||
util.Die("%s", err.Error())
|
||||
}
|
||||
|
||||
err = os.RemoveAll(TempDir)
|
||||
if err != nil {
|
||||
util.Die("cannot remove temporary directory %s: %s", TempDir, err.Error())
|
||||
if (regenerateTarballs) {
|
||||
err = os.RemoveAll(TempDir)
|
||||
if err != nil {
|
||||
util.Die("cannot remove temporary directory %s: %s", TempDir, err.Error())
|
||||
}
|
||||
}
|
||||
err = os.Mkdir(TempDir, 0711)
|
||||
|
||||
f, err := os.Stat(TempDir)
|
||||
if err != nil {
|
||||
util.Die("cannot make 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())
|
||||
}
|
||||
log.Println("generating new tarball index")
|
||||
} else {
|
||||
if !f.IsDir() {
|
||||
util.Die("cannot make temporary directory %s: %s", TempDir,
|
||||
"not a directory")
|
||||
}
|
||||
}
|
||||
|
||||
artists = make(map[string]Artist)
|
||||
|
|
@ -148,42 +160,32 @@ 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)
|
||||
path := TempDir + "/" + hash
|
||||
a.Tarball = TempDir + "/" + hash
|
||||
|
||||
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 _, 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 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
|
||||
if generate {
|
||||
err = targz.Compress(a.Directory(), a.Tarball)
|
||||
if err != nil {
|
||||
a.Tarball = ""
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tarball, err := os.Stat(a.Tarball)
|
||||
if err != nil {
|
||||
a.Tarball = ""
|
||||
return
|
||||
}
|
||||
a.TarballSize = tarball.Size()
|
||||
|
|
|
|||
|
|
@ -34,20 +34,23 @@ var artists map[string]Artist
|
|||
var coverFileExtension string
|
||||
var defaultCoverFile string
|
||||
var mediaDir string
|
||||
var regenerateTarballs bool
|
||||
var trackFileExtension string
|
||||
|
||||
func Init(path string) {
|
||||
InitWith(path, ".flac", "cover.jpg", ".jpg")
|
||||
func Init(path string, regenerate bool) {
|
||||
InitWith(path, regenerate, ".flac", "cover.jpg", ".jpg")
|
||||
}
|
||||
|
||||
func InitWith(path, mediaExtension, coverFile, coverExtension string) {
|
||||
func InitWith(path string, regenerate bool,
|
||||
mediaExtension, coverFile, coverExtension string) {
|
||||
if initialised {
|
||||
return
|
||||
}
|
||||
|
||||
mediaDir = path
|
||||
trackFileExtension = mediaExtension
|
||||
defaultCoverFile = coverFile
|
||||
regenerateTarballs = regenerate
|
||||
trackFileExtension = mediaExtension
|
||||
coverFileExtension = coverExtension
|
||||
|
||||
assertAccessTo(mediaDir)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue