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

@ -13,12 +13,16 @@ import (
var ( var (
cfgFile string cfgFile string
noBanner bool
rootCmd = &cobra.Command{ rootCmd = &cobra.Command{
Use: "navidrome", Use: "navidrome",
Short: "Navidrome is a self-hosted music server and streamer", Short: "Navidrome is a self-hosted music server and streamer",
Long: `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`, 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) { Run: func(cmd *cobra.Command, args []string) {
startServer() startServer()
}, },
@ -34,10 +38,14 @@ func Execute() {
} }
} }
func startServer() { func preRun() {
if !noBanner {
println(consts.Banner()) println(consts.Banner())
}
conf.Load() conf.Load()
}
func startServer() {
db.EnsureLatestVersion() db.EnsureLatestVersion()
subsonic, err := CreateSubsonicAPIRouter() subsonic, err := CreateSubsonicAPIRouter()
@ -57,6 +65,7 @@ func init() {
}) })
rootCmd.PersistentFlags().StringVarP(&cfgFile, "configfile", "c", "", `config file (default "./navidrome.toml")`) 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("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().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") 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 return serverServer
} }
func CreateScanner(musicFolder string) *scanner.Scanner {
dataStore := persistence.New()
scannerScanner := scanner.New(dataStore)
return scannerScanner
}
func CreateAppRouter() *app.Router { func CreateAppRouter() *app.Router {
dataStore := persistence.New() dataStore := persistence.New()
router := app.New(dataStore) 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 { func CreateAppRouter() *app.Router {
panic(wire.Build(allProviders)) panic(wire.Build(allProviders))
} }