Add `scan` command

This commit is contained in:
Deluan 2020-07-02 20:08:41 -04:00 committed by Deluan Quintão
parent 8181aba61f
commit 3a7d70c908
4 changed files with 61 additions and 4 deletions

View File

@ -12,13 +12,17 @@ import (
)
var (
cfgFile string
cfgFile string
noBanner bool
rootCmd = &cobra.Command{
Use: "navidrome",
Short: "Navidrome is a self-hosted music server and streamer",
Long: `Navidrome is a self-hosted music server and streamer.
Complete documentation is available at https://www.navidrome.org/docs`,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
preRun()
},
Run: func(cmd *cobra.Command, args []string) {
startServer()
},
@ -34,10 +38,14 @@ func Execute() {
}
}
func startServer() {
println(consts.Banner())
func preRun() {
if !noBanner {
println(consts.Banner())
}
conf.Load()
}
func startServer() {
db.EnsureLatestVersion()
subsonic, err := CreateSubsonicAPIRouter()
@ -57,6 +65,7 @@ func init() {
})
rootCmd.PersistentFlags().StringVarP(&cfgFile, "configfile", "c", "", `config file (default "./navidrome.toml")`)
rootCmd.PersistentFlags().BoolVarP(&noBanner, "nobanner", "n", false, `don't show banner`)
rootCmd.PersistentFlags().String("musicfolder", viper.GetString("musicfolder"), "folder where your music is stored")
rootCmd.PersistentFlags().String("datafolder", viper.GetString("datafolder"), "folder to store application data (DB, cache...), needs write access")
rootCmd.PersistentFlags().StringP("loglevel", "l", viper.GetString("loglevel"), "log level, possible values: error, info, debug, trace")

36
cmd/scan.go Normal file
View File

@ -0,0 +1,36 @@
package cmd
import (
"github.com/deluan/navidrome/conf"
"github.com/deluan/navidrome/log"
"github.com/spf13/cobra"
)
var fullRescan bool
func init() {
scanCmd.Flags().BoolVarP(&fullRescan, "full", "f", false, "check all subfolders, ignoring timestamps")
rootCmd.AddCommand(scanCmd)
}
var scanCmd = &cobra.Command{
Use: "scan",
Short: "Scan music folder",
Long: "Scan music folder for updates",
Run: func(cmd *cobra.Command, args []string) {
runScanner()
},
}
func runScanner() {
scanner := CreateScanner(conf.Server.MusicFolder)
err := scanner.RescanAll(fullRescan)
if err != nil {
log.Error("Error scanning media folder", "folder", conf.Server.MusicFolder, err)
}
if fullRescan {
log.Info("Finished full rescan")
} else {
log.Info("Finished rescan")
}
}

View File

@ -25,6 +25,12 @@ func CreateServer(musicFolder string) *server.Server {
return serverServer
}
func CreateScanner(musicFolder string) *scanner.Scanner {
dataStore := persistence.New()
scannerScanner := scanner.New(dataStore)
return scannerScanner
}
func CreateAppRouter() *app.Router {
dataStore := persistence.New()
router := app.New(dataStore)

View File

@ -27,6 +27,12 @@ func CreateServer(musicFolder string) *server.Server {
))
}
func CreateScanner(musicFolder string) *scanner.Scanner {
panic(wire.Build(
allProviders,
))
}
func CreateAppRouter() *app.Router {
panic(wire.Build(allProviders))
}