mirror of
https://github.com/gen2brain/cbconvert
synced 2026-09-04 12:41:12 +02:00
Render document pages from several goroutines
This commit is contained in:
+35
-38
@@ -46,23 +46,24 @@ func (c *Converter) convertDocument(ctx context.Context, fileName string) error
|
|||||||
|
|
||||||
for n := 0; n < c.Ncontents; n++ {
|
for n := 0; n < c.Ncontents; n++ {
|
||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
return fmt.Errorf("convertDocument: %w", ctx.Err())
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
img, err := c.renderPage(doc, n)
|
eg.Go(func() error {
|
||||||
if err != nil {
|
img, err := c.renderPage(doc, n)
|
||||||
return fmt.Errorf("convertDocument: %w", err)
|
if err != nil {
|
||||||
}
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if img != nil {
|
if img == nil {
|
||||||
eg.Go(func() error {
|
return nil
|
||||||
return c.imageConvert(ctx, img, n, "")
|
}
|
||||||
})
|
|
||||||
}
|
return c.imageConvert(ctx, img, n, "")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
err = eg.Wait()
|
if err = eg.Wait(); err != nil {
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("convertDocument: %w", err)
|
return fmt.Errorf("convertDocument: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,11 +203,7 @@ func (c *Converter) convertDirectory(ctx context.Context, dirPath string) error
|
|||||||
eg, ctx := errgroup.WithContext(ctx)
|
eg, ctx := errgroup.WithContext(ctx)
|
||||||
eg.SetLimit(runtime.NumCPU() + 1)
|
eg.SetLimit(runtime.NumCPU() + 1)
|
||||||
|
|
||||||
for index, img := range contents {
|
convertOne := func(index int, img string) error {
|
||||||
if ctx.Err() != nil {
|
|
||||||
return fmt.Errorf("convertDirectory: %w", ctx.Err())
|
|
||||||
}
|
|
||||||
|
|
||||||
rel, rerr := filepath.Rel(dirPath, img)
|
rel, rerr := filepath.Rel(dirPath, img)
|
||||||
if rerr != nil {
|
if rerr != nil {
|
||||||
rel = filepath.Base(img)
|
rel = filepath.Base(img)
|
||||||
@@ -216,28 +213,21 @@ func (c *Converter) convertDirectory(ctx context.Context, dirPath string) error
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
return fmt.Errorf("convertDirectory: %w", err)
|
||||||
}
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
if isNonImage(img) && c.prefix == "" && !c.Opts.NoNonImage {
|
if isNonImage(img) && c.prefix == "" && !c.Opts.NoNonImage {
|
||||||
if err = copyFile(file, c.workPath(flatName(rel))); err != nil {
|
if err = copyFile(file, c.workPath(flatName(rel))); err != nil {
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
return fmt.Errorf("convertDirectory: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = file.Close(); err != nil {
|
return nil
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
continue
|
|
||||||
} else if isImage(img) {
|
} else if isImage(img) {
|
||||||
if c.Opts.NoConvert {
|
if c.Opts.NoConvert {
|
||||||
if err = copyFile(file, c.workPath(flatName(rel))); err != nil {
|
if err = copyFile(file, c.workPath(flatName(rel))); err != nil {
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
return fmt.Errorf("convertDirectory: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = file.Close(); err != nil {
|
return nil
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var i image.Image
|
var i image.Image
|
||||||
@@ -251,15 +241,7 @@ func (c *Converter) convertDirectory(ctx context.Context, dirPath string) error
|
|||||||
return fmt.Errorf("convertDirectory: %w", err)
|
return fmt.Errorf("convertDirectory: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = file.Close(); err != nil {
|
return nil
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = file.Close(); err != nil {
|
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if i != nil {
|
if i != nil {
|
||||||
@@ -268,11 +250,26 @@ func (c *Converter) convertDirectory(ctx context.Context, dirPath string) error
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for index, img := range contents {
|
||||||
|
if ctx.Err() != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = convertOne(index, img); err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if werr := eg.Wait(); werr != nil {
|
||||||
|
return fmt.Errorf("convertDirectory: %w", werr)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = eg.Wait()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user