Render document pages from several goroutines

This commit is contained in:
Milan Nikolic
2026-08-25 12:04:17 +02:00
parent 7cf35d502d
commit 147480003c
+35 -38
View File
@@ -46,23 +46,24 @@ func (c *Converter) convertDocument(ctx context.Context, fileName string) error
for n := 0; n < c.Ncontents; n++ {
if ctx.Err() != nil {
return fmt.Errorf("convertDocument: %w", ctx.Err())
break
}
img, err := c.renderPage(doc, n)
if err != nil {
return fmt.Errorf("convertDocument: %w", err)
}
eg.Go(func() error {
img, err := c.renderPage(doc, n)
if err != nil {
return err
}
if img != nil {
eg.Go(func() error {
return c.imageConvert(ctx, img, n, "")
})
}
if img == nil {
return nil
}
return c.imageConvert(ctx, img, n, "")
})
}
err = eg.Wait()
if err != nil {
if err = eg.Wait(); err != nil {
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.SetLimit(runtime.NumCPU() + 1)
for index, img := range contents {
if ctx.Err() != nil {
return fmt.Errorf("convertDirectory: %w", ctx.Err())
}
convertOne := func(index int, img string) error {
rel, rerr := filepath.Rel(dirPath, img)
if rerr != nil {
rel = filepath.Base(img)
@@ -216,28 +213,21 @@ func (c *Converter) convertDirectory(ctx context.Context, dirPath string) error
if err != nil {
return fmt.Errorf("convertDirectory: %w", err)
}
defer file.Close()
if isNonImage(img) && c.prefix == "" && !c.Opts.NoNonImage {
if err = copyFile(file, c.workPath(flatName(rel))); err != nil {
return fmt.Errorf("convertDirectory: %w", err)
}
if err = file.Close(); err != nil {
return fmt.Errorf("convertDirectory: %w", err)
}
continue
return nil
} else if isImage(img) {
if c.Opts.NoConvert {
if err = copyFile(file, c.workPath(flatName(rel))); err != nil {
return fmt.Errorf("convertDirectory: %w", err)
}
if err = file.Close(); err != nil {
return fmt.Errorf("convertDirectory: %w", err)
}
continue
return nil
}
var i image.Image
@@ -251,15 +241,7 @@ func (c *Converter) convertDirectory(ctx context.Context, dirPath string) error
return fmt.Errorf("convertDirectory: %w", err)
}
if err = file.Close(); err != nil {
return fmt.Errorf("convertDirectory: %w", err)
}
continue
}
if err = file.Close(); err != nil {
return fmt.Errorf("convertDirectory: %w", err)
return 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 {
return fmt.Errorf("convertDirectory: %w", err)
return err
}
return nil