mex/cmd/mex.go

92 lines
2.1 KiB
Go
Raw Normal View History

2023-10-23 03:57:43 +00:00
package main
import (
"flag"
"fmt"
"log"
"os"
"foosoft.net/projects/mex"
)
func processPath(inputPath, outputDir string, config mex.ExportConfig) error {
var allocator mex.TempDirAllocator
defer allocator.Cleanup()
if len(outputDir) == 0 {
var err error
outputDir, err = os.Getwd()
if err != nil {
log.Fatal(err)
}
}
rootNode, err := mex.Walk(inputPath, &allocator)
if err != nil {
return err
}
book, err := mex.ParseBook(rootNode)
if err != nil {
return err
}
if err := book.Export(outputDir, config, &allocator); err != nil {
return err
}
return nil
}
func main() {
var (
compressBook = flag.Bool("zip-book", false, "compress book as a cbz archive")
compressVolumes = flag.Bool("zip-volume", true, "compress volumes as cbz archives")
pageTemplate = flag.String("label-page", "page_{{.Index}}{{.Ext}}", "page name template")
volumeTemplate = flag.String("label-volume", "vol_{{.Index}}", "volume name template")
bookTemplate = flag.String("label-book", "{{.Name}}", "book name template")
workers = flag.Int("workers", 4, "number of simultaneous workers")
)
flag.Usage = func() {
fmt.Fprintln(os.Stderr, "Usage: mex <input_path> [<output_dir>]")
flag.PrintDefaults()
fmt.Fprintln(os.Stderr, "Templates:")
fmt.Fprintln(os.Stderr, " {{.Index}} - index of current volume or page")
fmt.Fprintln(os.Stderr, " {{.Name}} - original filename and extension")
fmt.Fprintln(os.Stderr, " {{.Ext}} - original extension only")
}
flag.Parse()
config := mex.ExportConfig{
PageTemplate: *pageTemplate,
VolumeTemplate: *volumeTemplate,
BookTemplate: *bookTemplate,
Workers: *workers,
}
if *compressBook {
config.Flags |= mex.ExportFlag_CompressBook
}
if *compressVolumes {
config.Flags |= mex.ExportFlag_CompressVolumes
}
if argc := flag.NArg(); argc >= 1 && argc <= 2 {
inputPath := flag.Arg(0)
var outputDir string
if argc == 2 {
outputDir = flag.Arg(1)
}
if err := processPath(inputPath, outputDir, config); err != nil {
log.Fatal(err)
}
} else {
flag.Usage()
os.Exit(2)
}
}