mirror of
https://github.com/bestnite/bilinovel-downloader.git
synced 2025-04-27 02:35:54 +08:00
83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bilinovel-downloader/downloader"
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var downloadCmd = &cobra.Command{
|
|
Use: "download",
|
|
}
|
|
|
|
var downloadNovelCmd = &cobra.Command{
|
|
Use: "novel",
|
|
Short: "Download a novel, default download all volumes",
|
|
Long: "Download a novel, default download all volumes",
|
|
RunE: runDownloadNovel,
|
|
}
|
|
|
|
var downloadVolumeCmd = &cobra.Command{
|
|
Use: "volume",
|
|
Short: "Download a volume",
|
|
Long: "Download a volume",
|
|
RunE: runDownloadVolume,
|
|
}
|
|
|
|
type downloadNovelArgs struct {
|
|
NovelId int `validate:"required"`
|
|
outputPath string
|
|
}
|
|
|
|
type downloadVolumeArgs struct {
|
|
NovelId int `validate:"required"`
|
|
VolumeId int `validate:"required"`
|
|
outputPath string
|
|
}
|
|
|
|
var (
|
|
novelArgs downloadNovelArgs
|
|
volumeArgs downloadVolumeArgs
|
|
)
|
|
|
|
func init() {
|
|
downloadNovelCmd.Flags().IntVarP(&novelArgs.NovelId, "novel-id", "n", 0, "novel id")
|
|
downloadNovelCmd.Flags().StringVarP(&novelArgs.outputPath, "output-path", "o", "./novels", "output path")
|
|
|
|
downloadVolumeCmd.Flags().IntVarP(&volumeArgs.NovelId, "novel-id", "n", 0, "novel id")
|
|
downloadVolumeCmd.Flags().IntVarP(&volumeArgs.VolumeId, "volume-id", "v", 0, "volume id")
|
|
downloadVolumeCmd.Flags().StringVarP(&volumeArgs.outputPath, "output-path", "o", "./novels", "output path")
|
|
|
|
downloadCmd.AddCommand(downloadNovelCmd)
|
|
downloadCmd.AddCommand(downloadVolumeCmd)
|
|
RootCmd.AddCommand(downloadCmd)
|
|
}
|
|
|
|
func runDownloadNovel(cmd *cobra.Command, args []string) error {
|
|
if novelArgs.NovelId == 0 {
|
|
return fmt.Errorf("novel id is required")
|
|
}
|
|
err := downloader.DownloadNovel(novelArgs.NovelId, novelArgs.outputPath)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to download novel: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func runDownloadVolume(cmd *cobra.Command, args []string) error {
|
|
if volumeArgs.NovelId == 0 {
|
|
return fmt.Errorf("novel id is required")
|
|
}
|
|
if volumeArgs.VolumeId == 0 {
|
|
return fmt.Errorf("volume id is required")
|
|
}
|
|
err := downloader.DownloadVolume(volumeArgs.NovelId, volumeArgs.VolumeId, volumeArgs.outputPath)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to download volume: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|