Implements library scanning endpoints. Also:
- Bumped Subsonic API version to 1.15: - Better User/Users Subsonic endpoint implementations, not final though
This commit is contained in:
+1
-1
@@ -78,7 +78,7 @@ func startServer() (func() error, func(err error)) {
|
||||
func startScanner() (func() error, func(err error)) {
|
||||
interval := conf.Server.ScanInterval
|
||||
log.Info("Starting scanner", "interval", interval.String())
|
||||
scanner := CreateScanner(conf.Server.MusicFolder)
|
||||
scanner := GetScanner()
|
||||
|
||||
return func() error {
|
||||
if interval != 0 {
|
||||
|
||||
+1
-2
@@ -3,7 +3,6 @@ package cmd
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/deluan/navidrome/conf"
|
||||
"github.com/deluan/navidrome/log"
|
||||
"github.com/deluan/navidrome/scanner"
|
||||
"github.com/spf13/cobra"
|
||||
@@ -37,7 +36,7 @@ func waitScanToFinish(scanner scanner.Scanner) {
|
||||
}
|
||||
|
||||
func runScanner() {
|
||||
scanner := CreateScanner(conf.Server.MusicFolder)
|
||||
scanner := GetScanner()
|
||||
go func() { _ = scanner.Start(0) }()
|
||||
scanner.RescanAll(fullRescan)
|
||||
waitScanToFinish(scanner)
|
||||
|
||||
+25
-11
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/deluan/navidrome/server/app"
|
||||
"github.com/deluan/navidrome/server/subsonic"
|
||||
"github.com/google/wire"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Injectors from wire_injectors.go:
|
||||
@@ -24,15 +25,6 @@ func CreateServer(musicFolder string) *server.Server {
|
||||
return serverServer
|
||||
}
|
||||
|
||||
func CreateScanner(musicFolder string) scanner.Scanner {
|
||||
dataStore := persistence.New()
|
||||
artworkCache := core.GetImageCache()
|
||||
artwork := core.NewArtwork(dataStore, artworkCache)
|
||||
cacheWarmer := core.NewCacheWarmer(artwork)
|
||||
scannerScanner := scanner.New(dataStore, cacheWarmer)
|
||||
return scannerScanner
|
||||
}
|
||||
|
||||
func CreateAppRouter() *app.Router {
|
||||
dataStore := persistence.New()
|
||||
router := app.New(dataStore)
|
||||
@@ -51,10 +43,32 @@ func CreateSubsonicAPIRouter() *subsonic.Router {
|
||||
client := core.LastFMNewClient()
|
||||
spotifyClient := core.SpotifyNewClient()
|
||||
externalInfo := core.NewExternalInfo(dataStore, client, spotifyClient)
|
||||
router := subsonic.New(artwork, mediaStreamer, archiver, players, externalInfo, dataStore)
|
||||
scanner := GetScanner()
|
||||
router := subsonic.New(dataStore, artwork, mediaStreamer, archiver, players, externalInfo, scanner)
|
||||
return router
|
||||
}
|
||||
|
||||
func createScanner() scanner.Scanner {
|
||||
dataStore := persistence.New()
|
||||
artworkCache := core.GetImageCache()
|
||||
artwork := core.NewArtwork(dataStore, artworkCache)
|
||||
cacheWarmer := core.NewCacheWarmer(artwork)
|
||||
scannerScanner := scanner.New(dataStore, cacheWarmer)
|
||||
return scannerScanner
|
||||
}
|
||||
|
||||
// wire_injectors.go:
|
||||
|
||||
var allProviders = wire.NewSet(core.Set, scanner.New, subsonic.New, app.New, persistence.New)
|
||||
var allProviders = wire.NewSet(core.Set, subsonic.New, app.New, persistence.New)
|
||||
|
||||
var (
|
||||
onceScanner sync.Once
|
||||
scannerInstance scanner.Scanner
|
||||
)
|
||||
|
||||
func GetScanner() scanner.Scanner {
|
||||
onceScanner.Do(func() {
|
||||
scannerInstance = createScanner()
|
||||
})
|
||||
return scannerInstance
|
||||
}
|
||||
|
||||
+24
-8
@@ -14,7 +14,6 @@ import (
|
||||
|
||||
var allProviders = wire.NewSet(
|
||||
core.Set,
|
||||
scanner.New,
|
||||
subsonic.New,
|
||||
app.New,
|
||||
persistence.New,
|
||||
@@ -27,16 +26,33 @@ func CreateServer(musicFolder string) *server.Server {
|
||||
))
|
||||
}
|
||||
|
||||
func CreateScanner(musicFolder string) scanner.Scanner {
|
||||
panic(wire.Build(
|
||||
allProviders,
|
||||
))
|
||||
}
|
||||
|
||||
func CreateAppRouter() *app.Router {
|
||||
panic(wire.Build(allProviders))
|
||||
}
|
||||
|
||||
func CreateSubsonicAPIRouter() *subsonic.Router {
|
||||
panic(wire.Build(allProviders))
|
||||
panic(wire.Build(
|
||||
allProviders,
|
||||
GetScanner,
|
||||
))
|
||||
}
|
||||
|
||||
// Scanner must be a Singleton
|
||||
var (
|
||||
onceScanner sync.Once
|
||||
scannerInstance scanner.Scanner
|
||||
)
|
||||
|
||||
func GetScanner() scanner.Scanner {
|
||||
onceScanner.Do(func() {
|
||||
scannerInstance = createScanner()
|
||||
})
|
||||
return scannerInstance
|
||||
}
|
||||
|
||||
func createScanner() scanner.Scanner {
|
||||
panic(wire.Build(
|
||||
allProviders,
|
||||
scanner.New,
|
||||
))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user