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:
Deluan
2020-10-27 18:19:56 -04:00
parent 9b756faef5
commit d9f7a154cf
17 changed files with 196 additions and 37 deletions
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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,
))
}