mirror of
https://github.com/Belphemur/CBZOptimizer.git
synced 2026-07-22 03:15:41 +02:00
Add a new `--keep-filenames` boolean flag (no shorthand, default false) on both `optimize` and `watch` commands. When enabled, page entries in the output CBZ preserve their original base filenames instead of being renumbered to `%04d` sequential indices. Extension is swapped on format conversion (e.g. `001.png` → `001.webp`), split pages get `-NN` suffixes on the original stem, and duplicate base names fall back to `<stem>_<index>.<ext>`. Watch mode supports the flag via the `keep-filenames` viper config key. Design: data-driven `OriginalName` field on `manga.PageFile`, set at extraction in `cbz_loader.ExtractChapter`. The `Converter` interface is unchanged. Flag off → behavior identical to before. Closes #216
115 lines
4.6 KiB
Go
115 lines
4.6 KiB
Go
package commands
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/belphemur/CBZOptimizer/v2/pkg/converter/constant"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
"github.com/thediveo/enumflag/v2"
|
|
)
|
|
|
|
// setupFormatFlag sets up the format flag for a command.
|
|
//
|
|
// Parameters:
|
|
// - cmd: The Cobra command to add the format flag to
|
|
// - converterType: Pointer to the ConversionFormat variable that will store the flag value
|
|
// - bindViper: If true, binds the flag to viper for configuration file support.
|
|
// Set to true for commands that use viper for configuration (e.g., watch command),
|
|
// and false for commands that don't (e.g., optimize command).
|
|
func setupFormatFlag(cmd *cobra.Command, converterType *constant.ConversionFormat, bindViper bool) {
|
|
formatFlag := enumflag.New(converterType, "format", constant.CommandValue, enumflag.EnumCaseInsensitive)
|
|
_ = formatFlag.RegisterCompletion(cmd, "format", constant.HelpText)
|
|
|
|
cmd.Flags().VarP(
|
|
formatFlag,
|
|
"format", "f",
|
|
fmt.Sprintf("Format to convert the images to: %s", constant.ListAll()))
|
|
|
|
if bindViper {
|
|
_ = viper.BindPFlag("format", cmd.Flags().Lookup("format"))
|
|
}
|
|
}
|
|
|
|
// setupQualityFlag sets up the quality flag for a command.
|
|
//
|
|
// Parameters:
|
|
// - cmd: The Cobra command to add the quality flag to
|
|
// - defaultValue: The default quality value (0-100)
|
|
// - bindViper: If true, binds the flag to viper for configuration file support
|
|
func setupQualityFlag(cmd *cobra.Command, defaultValue uint8, bindViper bool) {
|
|
cmd.Flags().Uint8P("quality", "q", defaultValue, "Quality for conversion (0-100)")
|
|
if bindViper {
|
|
_ = viper.BindPFlag("quality", cmd.Flags().Lookup("quality"))
|
|
}
|
|
}
|
|
|
|
// setupOverrideFlag sets up the override flag for a command.
|
|
//
|
|
// Parameters:
|
|
// - cmd: The Cobra command to add the override flag to
|
|
// - defaultValue: The default override value
|
|
// - bindViper: If true, binds the flag to viper for configuration file support
|
|
func setupOverrideFlag(cmd *cobra.Command, defaultValue bool, bindViper bool) {
|
|
cmd.Flags().BoolP("override", "o", defaultValue, "Override the original CBZ/CBR files")
|
|
if bindViper {
|
|
_ = viper.BindPFlag("override", cmd.Flags().Lookup("override"))
|
|
}
|
|
}
|
|
|
|
// setupSplitFlag sets up the split flag for a command.
|
|
//
|
|
// Parameters:
|
|
// - cmd: The Cobra command to add the split flag to
|
|
// - defaultValue: The default split value
|
|
// - bindViper: If true, binds the flag to viper for configuration file support
|
|
func setupSplitFlag(cmd *cobra.Command, defaultValue bool, bindViper bool) {
|
|
cmd.Flags().BoolP("split", "s", defaultValue, "Split long pages into smaller chunks")
|
|
if bindViper {
|
|
_ = viper.BindPFlag("split", cmd.Flags().Lookup("split"))
|
|
}
|
|
}
|
|
|
|
// setupKeepFilenamesFlag sets up the keep-filenames flag for a command.
|
|
//
|
|
// Parameters:
|
|
// - cmd: The Cobra command to add the keep-filenames flag to
|
|
// - defaultValue: The default keep-filenames value
|
|
// - bindViper: If true, binds the flag to viper for configuration file support
|
|
func setupKeepFilenamesFlag(cmd *cobra.Command, defaultValue bool, bindViper bool) {
|
|
cmd.Flags().Bool("keep-filenames", defaultValue, "Preserve original page filenames instead of renumbering to sequential indices")
|
|
if bindViper {
|
|
_ = viper.BindPFlag("keep-filenames", cmd.Flags().Lookup("keep-filenames"))
|
|
}
|
|
}
|
|
|
|
// setupTimeoutFlag sets up the timeout flag for a command.
|
|
//
|
|
// Parameters:
|
|
// - cmd: The Cobra command to add the timeout flag to
|
|
// - bindViper: If true, binds the flag to viper for configuration file support
|
|
func setupTimeoutFlag(cmd *cobra.Command, bindViper bool) {
|
|
cmd.Flags().DurationP("timeout", "t", 0, "Maximum time allowed for converting a single chapter (e.g., 30s, 5m, 1h). 0 means no timeout")
|
|
if bindViper {
|
|
_ = viper.BindPFlag("timeout", cmd.Flags().Lookup("timeout"))
|
|
}
|
|
}
|
|
|
|
// setupCommonFlags sets up all common flags for optimize and watch commands.
|
|
//
|
|
// Parameters:
|
|
// - cmd: The Cobra command to add the flags to
|
|
// - converterType: Pointer to the ConversionFormat variable that will store the format flag value
|
|
// - qualityDefault: The default quality value (0-100)
|
|
// - overrideDefault: The default override value
|
|
// - splitDefault: The default split value
|
|
// - bindViper: If true, binds all flags to viper for configuration file support
|
|
func setupCommonFlags(cmd *cobra.Command, converterType *constant.ConversionFormat, qualityDefault uint8, overrideDefault bool, splitDefault bool, bindViper bool) {
|
|
setupFormatFlag(cmd, converterType, bindViper)
|
|
setupQualityFlag(cmd, qualityDefault, bindViper)
|
|
setupOverrideFlag(cmd, overrideDefault, bindViper)
|
|
setupSplitFlag(cmd, splitDefault, bindViper)
|
|
setupKeepFilenamesFlag(cmd, false, bindViper)
|
|
setupTimeoutFlag(cmd, bindViper)
|
|
}
|