use a "CacheCover" folder for scaled covers
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"regexp"
|
||||
"time"
|
||||
|
||||
@@ -17,6 +18,11 @@ import (
|
||||
"go.senan.xyz/gonic/version"
|
||||
)
|
||||
|
||||
const (
|
||||
cleanTimeDuration = 10 * time.Minute
|
||||
coverCachePrefix = "covers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
set := flag.NewFlagSet(version.NAME, flag.ExitOnError)
|
||||
listenAddr := set.String("listen-addr", "0.0.0.0:4747", "listen address (optional)")
|
||||
@@ -45,6 +51,7 @@ func main() {
|
||||
set.VisitAll(func(f *flag.Flag) {
|
||||
log.Printf(" %-15s %s\n", f.Name, f.Value)
|
||||
})
|
||||
//
|
||||
if _, err := os.Stat(*musicPath); os.IsNotExist(err) {
|
||||
log.Fatal("please provide a valid music directory")
|
||||
}
|
||||
@@ -53,6 +60,12 @@ func main() {
|
||||
log.Fatalf("couldn't create cache path: %v\n", err)
|
||||
}
|
||||
}
|
||||
coverCachePath := path.Join(*cachePath, "covers")
|
||||
if _, err := os.Stat(coverCachePath); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(coverCachePath, os.ModePerm); err != nil {
|
||||
log.Fatalf("couldn't create cover cache path: %v\n", err)
|
||||
}
|
||||
}
|
||||
db, err := db.New(*dbPath)
|
||||
if err != nil {
|
||||
log.Fatalf("error opening database: %v\n", err)
|
||||
@@ -63,14 +76,15 @@ func main() {
|
||||
*proxyPrefix = proxyPrefixExpr.ReplaceAllString(*proxyPrefix, `/$1`)
|
||||
//
|
||||
server := server.New(server.Options{
|
||||
DB: db,
|
||||
MusicPath: *musicPath,
|
||||
CachePath: *cachePath,
|
||||
ProxyPrefix: *proxyPrefix,
|
||||
DB: db,
|
||||
MusicPath: *musicPath,
|
||||
CachePath: *cachePath,
|
||||
CoverCachePath: coverCachePath,
|
||||
ProxyPrefix: *proxyPrefix,
|
||||
})
|
||||
var g run.Group
|
||||
g.Add(server.StartHTTP(*listenAddr))
|
||||
g.Add(server.StartSessionClean(10 * time.Minute))
|
||||
g.Add(server.StartSessionClean(cleanTimeDuration))
|
||||
if *scanInterval > 0 {
|
||||
tickerDur := time.Duration(*scanInterval) * time.Minute
|
||||
g.Add(server.StartScanTicker(tickerDur))
|
||||
|
||||
@@ -25,8 +25,9 @@ const (
|
||||
|
||||
type Controller struct {
|
||||
*ctrlbase.Controller
|
||||
CachePath string
|
||||
Jukebox *jukebox.Jukebox
|
||||
CachePath string
|
||||
CoverCachePath string
|
||||
Jukebox *jukebox.Jukebox
|
||||
}
|
||||
|
||||
type metaResponse struct {
|
||||
|
||||
@@ -106,7 +106,7 @@ func (c *Controller) ServeGetCoverArt(w http.ResponseWriter, r *http.Request) *s
|
||||
}
|
||||
size := params.GetOrInt("size", coverDefaultSize)
|
||||
cachePath := path.Join(
|
||||
c.CachePath,
|
||||
c.CoverCachePath,
|
||||
fmt.Sprintf("%s-%d.%s", id.String(), size, coverCacheFormat),
|
||||
)
|
||||
_, err = os.Stat(cachePath)
|
||||
|
||||
@@ -21,10 +21,11 @@ import (
|
||||
)
|
||||
|
||||
type Options struct {
|
||||
DB *db.DB
|
||||
MusicPath string
|
||||
CachePath string
|
||||
ProxyPrefix string
|
||||
DB *db.DB
|
||||
MusicPath string
|
||||
CachePath string
|
||||
CoverCachePath string
|
||||
ProxyPrefix string
|
||||
}
|
||||
|
||||
type Server struct {
|
||||
@@ -61,9 +62,10 @@ func New(opts Options) *Server {
|
||||
//
|
||||
ctrlAdmin := ctrladmin.New(base, sessDB)
|
||||
ctrlSubsonic := &ctrlsubsonic.Controller{
|
||||
Controller: base,
|
||||
CachePath: opts.CachePath,
|
||||
Jukebox: jukebox,
|
||||
Controller: base,
|
||||
CachePath: opts.CachePath,
|
||||
CoverCachePath: opts.CoverCachePath,
|
||||
Jukebox: jukebox,
|
||||
}
|
||||
setupMisc(r, base)
|
||||
setupAdmin(r.PathPrefix("/admin").Subrouter(), ctrlAdmin)
|
||||
|
||||
Reference in New Issue
Block a user