mirror of
https://github.com/gen2brain/cbconvert
synced 2025-10-14 10:38:51 +02:00
Set comment
This commit is contained in:
68
cbconvert.go
68
cbconvert.go
@@ -366,7 +366,7 @@ func (c *Convertor) convertDirectory(dirPath string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
i, err = c.imDecode(file, img)
|
i, err = c.imDecode(file, img)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("coverDirectory: %w", err)
|
return fmt.Errorf("convertDirectory: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -764,7 +764,7 @@ func (c *Convertor) archiveList(fileName string) ([]string, error) {
|
|||||||
|
|
||||||
archive, err := unarr.NewArchive(fileName)
|
archive, err := unarr.NewArchive(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return contents, err
|
return contents, fmt.Errorf("archiveList: %w", err)
|
||||||
}
|
}
|
||||||
defer archive.Close()
|
defer archive.Close()
|
||||||
|
|
||||||
@@ -773,16 +773,70 @@ func (c *Convertor) archiveList(fileName string) ([]string, error) {
|
|||||||
|
|
||||||
// archiveComment returns ZIP comment.
|
// archiveComment returns ZIP comment.
|
||||||
func (c *Convertor) archiveComment(fileName string) (string, error) {
|
func (c *Convertor) archiveComment(fileName string) (string, error) {
|
||||||
r, err := zip.OpenReader(fileName)
|
zr, err := zip.OpenReader(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", fmt.Errorf("archiveComment: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.Comment, nil
|
return zr.Comment, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// archiveSetComment sets ZIP comment.
|
// archiveSetComment sets ZIP comment.
|
||||||
func (c *Convertor) archiveSetComment(fileName, commentBody string) error {
|
func (c *Convertor) archiveSetComment(fileName, commentBody string) error {
|
||||||
|
zr, err := zip.OpenReader(fileName)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
defer zr.Close()
|
||||||
|
|
||||||
|
zf, err := os.CreateTemp(os.TempDir(), "cbc")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpName := zf.Name()
|
||||||
|
defer os.Remove(tmpName)
|
||||||
|
|
||||||
|
zw := zip.NewWriter(zf)
|
||||||
|
zw.SetComment(commentBody)
|
||||||
|
|
||||||
|
for _, item := range zr.File {
|
||||||
|
ir, err := item.OpenRaw()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
it, err := zw.CreateRaw(&item.FileHeader)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = io.Copy(it, ir)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = zw.Close()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = zf.Close()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := os.ReadFile(tmpName)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.WriteFile(fileName, data, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("archiveSetComment: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1303,6 +1357,10 @@ func (c *Convertor) Meta(fileName string, info os.FileInfo) (any, error) {
|
|||||||
|
|
||||||
return comment, nil
|
return comment, nil
|
||||||
} else if c.Opts.CommentBody != "" {
|
} else if c.Opts.CommentBody != "" {
|
||||||
|
err := c.archiveSetComment(fileName, c.Opts.CommentBody)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
@@ -8,7 +8,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/gen2brain/cbconvert"
|
"github.com/gen2brain/cbconvert"
|
||||||
"github.com/schollz/progressbar/v3"
|
pb "github.com/schollz/progressbar/v3"
|
||||||
flag "github.com/spf13/pflag"
|
flag "github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -44,26 +44,26 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
var bar *progressbar.ProgressBar
|
var bar *pb.ProgressBar
|
||||||
if opts.Cover || opts.Thumbnail || opts.Meta {
|
if opts.Cover || opts.Thumbnail || opts.Meta {
|
||||||
if !opts.Quiet {
|
if !opts.Quiet {
|
||||||
bar = progressbar.NewOptions(conv.Nfiles,
|
bar = pb.NewOptions(conv.Nfiles,
|
||||||
progressbar.OptionShowCount(),
|
pb.OptionShowCount(),
|
||||||
progressbar.OptionClearOnFinish(),
|
pb.OptionClearOnFinish(),
|
||||||
progressbar.OptionUseANSICodes(true),
|
pb.OptionUseANSICodes(true),
|
||||||
progressbar.OptionSetPredictTime(false),
|
pb.OptionSetPredictTime(false),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
conv.OnStart = func() {
|
conv.OnStart = func() {
|
||||||
if !opts.Quiet {
|
if !opts.Quiet {
|
||||||
bar = progressbar.NewOptions(conv.Ncontents,
|
bar = pb.NewOptions(conv.Ncontents,
|
||||||
progressbar.OptionShowCount(),
|
pb.OptionShowCount(),
|
||||||
progressbar.OptionClearOnFinish(),
|
pb.OptionClearOnFinish(),
|
||||||
progressbar.OptionUseANSICodes(true),
|
pb.OptionUseANSICodes(true),
|
||||||
progressbar.OptionSetDescription(fmt.Sprintf("Converting %d of %d:", conv.CurrFile, conv.Nfiles)),
|
pb.OptionSetDescription(fmt.Sprintf("Converting %d of %d:", conv.CurrFile, conv.Nfiles)),
|
||||||
progressbar.OptionSetPredictTime(false),
|
pb.OptionSetPredictTime(false),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,6 +120,8 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, _ = fmt.Fprintf(os.Stderr, "\r")
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseFlags parses command line flags
|
// parseFlags parses command line flags
|
||||||
@@ -185,7 +187,7 @@ func parseFlags() (cbconvert.Options, []string) {
|
|||||||
meta.SortFlags = false
|
meta.SortFlags = false
|
||||||
meta.BoolVar(&opts.Cover, "cover", false, "Print cover name")
|
meta.BoolVar(&opts.Cover, "cover", false, "Print cover name")
|
||||||
meta.BoolVar(&opts.Comment, "comment", false, "Print comment")
|
meta.BoolVar(&opts.Comment, "comment", false, "Print comment")
|
||||||
meta.StringVar(&opts.CommentBody, "comment-body", "", "Set comment body (file or string)")
|
meta.StringVar(&opts.CommentBody, "comment-body", "", "Set comment")
|
||||||
|
|
||||||
convert.Usage = func() {
|
convert.Usage = func() {
|
||||||
_, _ = fmt.Fprintf(os.Stderr, "Usage: %s <command> [<flags>] [file1 dir1 ... fileOrDirN]\n\n", filepath.Base(os.Args[0]))
|
_, _ = fmt.Fprintf(os.Stderr, "Usage: %s <command> [<flags>] [file1 dir1 ... fileOrDirN]\n\n", filepath.Base(os.Args[0]))
|
||||||
|
Reference in New Issue
Block a user