From d4abc99239159f278c155676d78bd2bcac945b87 Mon Sep 17 00:00:00 2001 From: Milan Nikolic Date: Wed, 8 Mar 2023 05:42:49 +0100 Subject: [PATCH] Add meta command --- README.md | 6 ++++++ cbconvert.go | 26 ++++++++++++++++++++++++++ cmd/cbconvert/main.go | 30 ++++++++++++++++++++++++++++-- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 68bce2b..658d561 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,12 @@ This is what it looks like in the PCManFM file manager:             Process subdirectories recursively (default "false")         --quiet             Hide console output (default "false") + + meta + CBZ metadata + + --cover + Print cover name (default "false") ``` ### Examples diff --git a/cbconvert.go b/cbconvert.go index e05d137..ba04e91 100644 --- a/cbconvert.go +++ b/cbconvert.go @@ -93,6 +93,8 @@ type Options struct { Cover bool // Extract cover thumbnail (freedesktop spec.) Thumbnail bool + // CBZ metadata + Meta bool // Output file Outfile string // Output directory @@ -1225,6 +1227,30 @@ func (c *Convertor) Thumbnail(fileName string, info os.FileInfo) error { return mw.WriteImage(fName) } +// Meta manipulates with CBZ metadata. +func (c *Convertor) Meta(fileName string, info os.FileInfo) (any, error) { + c.CurrFile++ + + if c.Opts.Cover { + var images []string + + contents, err := c.listArchive(fileName) + if err != nil { + return nil, err + } + + for _, ct := range contents { + if c.isImage(ct) { + images = append(images, ct) + } + } + + return c.coverName(images), nil + } + + return nil, nil +} + // Convert converts comic book. func (c *Convertor) Convert(filename string, info os.FileInfo) error { c.CurrFile++ diff --git a/cmd/cbconvert/main.go b/cmd/cbconvert/main.go index 11c813d..c2fb4d5 100644 --- a/cmd/cbconvert/main.go +++ b/cmd/cbconvert/main.go @@ -47,7 +47,7 @@ func main() { } var bar *progressbar.ProgressBar - if opts.Cover || opts.Thumbnail { + if opts.Cover || opts.Thumbnail || opts.Meta { if !opts.Quiet { bar = progressbar.NewOptions(conv.Nfiles, progressbar.OptionShowCount(), @@ -89,7 +89,19 @@ func main() { os.Exit(1) } - if opts.Cover { + if opts.Meta { + ret, err := conv.Meta(file, stat) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + if opts.Cover { + fmt.Println(ret) + } + + continue + } else if opts.Cover { err = conv.Cover(file, stat) if err != nil { fmt.Println(err) @@ -172,6 +184,10 @@ func parseFlags() (cbconvert.Options, []string) { thumbnail.BoolVar(&opts.Recursive, "recursive", false, "Process subdirectories recursively") thumbnail.BoolVar(&opts.Quiet, "quiet", false, "Hide console output") + meta := flag.NewFlagSet("meta", flag.ExitOnError) + meta.SortFlags = false + meta.BoolVar(&opts.Cover, "cover", false, "Print cover name") + convert.Usage = func() { _, _ = fmt.Fprintf(os.Stderr, "Usage: %s [] [file1 dir1 ... fileOrDirN]\n\n", filepath.Base(os.Args[0])) _, _ = fmt.Fprintf(os.Stderr, "\nCommands:\n") @@ -193,6 +209,12 @@ func parseFlags() (cbconvert.Options, []string) { _, _ = fmt.Fprintf(os.Stderr, "\n \t") _, _ = fmt.Fprintf(os.Stderr, "%v (default %q)\n", f.Usage, f.DefValue) }) + _, _ = fmt.Fprintf(os.Stderr, "\n meta\n \tCBZ metadata\n\n") + meta.VisitAll(func(f *flag.Flag) { + _, _ = fmt.Fprintf(os.Stderr, " --%s", f.Name) + _, _ = fmt.Fprintf(os.Stderr, "\n \t") + _, _ = fmt.Fprintf(os.Stderr, "%v (default %q)\n", f.Usage, f.DefValue) + }) _, _ = fmt.Fprintf(os.Stderr, "\n") } @@ -214,6 +236,10 @@ func parseFlags() (cbconvert.Options, []string) { opts.Thumbnail = true _ = thumbnail.Parse(os.Args[2:]) args = thumbnail.Args() + case "meta": + opts.Meta = true + _ = meta.Parse(os.Args[2:]) + args = meta.Args() default: _ = convert.Parse(os.Args[1:]) args = convert.Args()