@@ -54,7 +54,9 @@ import (
54
54
"github.com/gauntface/go-html-asset-manager/v4/utils/html/htmlencoding"
55
55
"github.com/gauntface/go-html-asset-manager/v4/utils/vimeoapi"
56
56
"github.com/mitchellh/go-homedir"
57
+ "github.com/schollz/progressbar/v3"
57
58
"golang.org/x/net/html"
59
+ "golang.org/x/sync/semaphore"
58
60
)
59
61
60
62
var (
@@ -216,15 +218,25 @@ func (c *client) manipulations(manager assetmanagerManager, manipulators []manip
216
218
}
217
219
218
220
func (c * client ) manipulateHTMLFiles (assets []assetmanagerLocalAsset , manager assetmanagerManager , manipulators []manipulations.Manipulator ) []error {
219
- var wg sync.WaitGroup
220
- wg .Add (len (assets ))
221
+ ctx := context .Background ()
221
222
222
223
errs := []error {}
223
224
var errMu sync.Mutex
224
225
226
+ maxWorkers := int64 (24 )
227
+ sem := semaphore .NewWeighted (maxWorkers )
228
+ bar := progressbar .Default (int64 (len (assets )), "HTML files processed" )
229
+
225
230
for _ , htmlAsset := range assets {
231
+ if err := sem .Acquire (ctx , 1 ); err != nil {
232
+ errMu .Lock ()
233
+ defer errMu .Unlock ()
234
+ errs = append (errs , fmt .Errorf ("%w %q: %v" , errManipulate , htmlAsset .Path (), err ))
235
+ }
236
+
226
237
go func (htmlAsset assetmanagerLocalAsset ) {
227
- defer wg .Done ()
238
+ defer sem .Release (1 )
239
+ defer bar .Add (1 )
228
240
229
241
err := c .manipulateHTMLFile (htmlAsset , manager , manipulators )
230
242
if err != nil {
@@ -235,7 +247,7 @@ func (c *client) manipulateHTMLFiles(assets []assetmanagerLocalAsset, manager as
235
247
}(htmlAsset )
236
248
}
237
249
238
- wg . Wait ( )
250
+ sem . Acquire ( ctx , maxWorkers )
239
251
240
252
return errs
241
253
}
0 commit comments