accorder/cmd/build.go

60 lines
2.4 KiB
Go
Raw Normal View History

2021-10-30 23:25:44 +00:00
package cmd
import (
"fmt"
"os"
"accorder/pkg/calibre"
2021-10-30 23:25:44 +00:00
"github.com/spf13/cobra"
2021-11-17 00:19:46 +00:00
"github.com/spf13/viper"
"github.com/satori/go.uuid"
2021-10-30 23:25:44 +00:00
)
var buildCmd = &cobra.Command{
Use: "build",
Short: "Build standalone, portable webapp from Calibre library.",
Long: `Build searchable, standalone, portable webapp against the local Calibre
library including all the metadata needed. It creates BROWSE_LIBRARY.html in
root directory of the local Calibre library. For search (authors, titles,
tags...) it uses rendered metadata from static/data{1-8}.js files.
Every time the directory path and/or librarian is provided it is saved in
the configuration file for the future use (therefore: 'accorder build PROFILE'
should be enough for the next successful build).`,
Args: OnlyProfileArgument,
Run: func(cmd *cobra.Command, args []string) {
calibrePath := viper.GetString(fmt.Sprintf("%s.calibre_path", args[0]))
librarianName := viper.GetString(fmt.Sprintf("%s.librarian_name", args[0]))
libraryUUID := viper.GetString(fmt.Sprintf("%s.library_uuid", args[0]))
librarySecret := viper.GetString(fmt.Sprintf("%s.library_secret", args[0]))
calibrePathFromCli, _ := cmd.PersistentFlags().GetString("directory")
librarianNameFromCli, _ := cmd.PersistentFlags().GetString("librarian")
if calibrePathFromCli != "" || librarianNameFromCli != "" || libraryUUID == "" || librarySecret == "" {
if libraryUUID == "" {
libraryUUID = uuid.NewV4().String()
viper.Set(fmt.Sprintf("%s.library_uuid", args[0]), libraryUUID)
} else if librarySecret == "" {
librarySecret = uuid.NewV4().String()
viper.Set(fmt.Sprintf("%s.library_secret", args[0]), librarySecret)
}
viper.WriteConfig()
2021-11-17 00:19:46 +00:00
}
calibre.RenderStandaloneApp(calibrePath, librarianName, libraryUUID, librarySecret)
2021-10-30 23:25:44 +00:00
},
}
func init() {
buildCmd.PersistentFlags().StringP("directory", "d", "", "A local Calibre directory path.")
buildCmd.PersistentFlags().StringP("librarian", "l", "", "Librarian's name.")
buildCmd.PersistentFlags().StringP("jsonpath", "j", "", "Path where to render all metadata into JSON.")
buildCmd.PersistentFlags().StringP("bibtex", "b", "", "Import books from BibTex file into Calibre.")
CustomHelpOutput(buildCmd)
profile := os.Args[len(os.Args)-1]
viper.BindPFlag(fmt.Sprintf("%s.calibre_path", profile), buildCmd.PersistentFlags().Lookup("directory"))
viper.BindPFlag(fmt.Sprintf("%s.librarian_name", profile), buildCmd.PersistentFlags().Lookup("librarian"))
2021-11-17 00:19:46 +00:00
rootCmd.AddCommand(buildCmd)
2021-10-30 23:25:44 +00:00
}