mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-05 13:37:38 +03:00
Add scan
command
This commit is contained in:
parent
8181aba61f
commit
3a7d70c908
4 changed files with 61 additions and 4 deletions
17
cmd/root.go
17
cmd/root.go
|
@ -12,13 +12,17 @@ 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() {
|
||||||
println(consts.Banner())
|
if !noBanner {
|
||||||
|
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
36
cmd/scan.go
Normal 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")
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue