@@ -27,7 +27,7 @@ func (a *App) Requests(method string, url string, headers map[string]string, bod
2727
2828 req .Header = GetHeader (headers )
2929
30- runtime .EventsOn (a .Ctx , options .CancelId , func (data ... interface {} ) {
30+ runtime .EventsOn (a .Ctx , options .CancelId , func (data ... any ) {
3131 log .Printf ("Requests Canceled: %v %v" , method , url )
3232 cancel ()
3333 })
@@ -59,7 +59,7 @@ func (a *App) Download(url string, path string, headers map[string]string, event
5959
6060 req .Header = GetHeader (headers )
6161
62- runtime .EventsOn (a .Ctx , options .CancelId , func (data ... interface {} ) {
62+ runtime .EventsOn (a .Ctx , options .CancelId , func (data ... any ) {
6363 log .Printf ("Download Canceled: %v %v" , url , path )
6464 cancel ()
6565 })
@@ -84,7 +84,12 @@ func (a *App) Download(url string, path string, headers map[string]string, event
8484 }
8585 defer file .Close ()
8686
87- reader := io .TeeReader (resp .Body , & WriteTracker {Total : resp .ContentLength , ProgressChange : event , App : a })
87+ reader := io .TeeReader (resp .Body , & WriteTracker {
88+ Total : resp .ContentLength ,
89+ EmitThreshold : 128 * 1024 , // 128KB
90+ ProgressChange : event ,
91+ App : a ,
92+ })
8893
8994 _ , err = io .Copy (file , reader )
9095 if err != nil {
@@ -118,7 +123,12 @@ func (a *App) Upload(url string, path string, headers map[string]string, event s
118123 return HTTPResult {false , 500 , nil , err .Error ()}
119124 }
120125
121- reader := io .TeeReader (file , & WriteTracker {Total : fileStat .Size (), ProgressChange : event , App : a })
126+ reader := io .TeeReader (file , & WriteTracker {
127+ Total : fileStat .Size (),
128+ EmitThreshold : 128 * 1024 , // 128KB
129+ ProgressChange : event ,
130+ App : a ,
131+ })
122132
123133 _ , err = io .Copy (part , reader )
124134 if err != nil {
@@ -132,7 +142,7 @@ func (a *App) Upload(url string, path string, headers map[string]string, event s
132142
133143 client , ctx , cancel := withRequestOptionsClient (options )
134144
135- runtime .EventsOn (a .Ctx , options .CancelId , func (data ... interface {} ) {
145+ runtime .EventsOn (a .Ctx , options .CancelId , func (data ... any ) {
136146 log .Printf ("Upload Canceled: %v %v" , url , path )
137147 cancel ()
138148 })
@@ -161,11 +171,20 @@ func (a *App) Upload(url string, path string, headers map[string]string, event s
161171}
162172
163173func (wt * WriteTracker ) Write (p []byte ) (n int , err error ) {
164- wt .Progress += int64 (len (p ))
165- if wt .ProgressChange != "" {
174+ n = len (p )
175+ wt .Progress += int64 (n )
176+
177+ if wt .ProgressChange == "" {
178+ return n , nil
179+ }
180+
181+ shouldEmit := wt .Total <= 0 || wt .Progress - wt .LastEmitted >= wt .EmitThreshold || wt .Progress == wt .Total
182+ if shouldEmit {
166183 runtime .EventsEmit (wt .App .Ctx , wt .ProgressChange , wt .Progress , wt .Total )
184+ wt .LastEmitted = wt .Progress
167185 }
168- return
186+
187+ return n , nil
169188}
170189
171190func withRequestOptionsClient (options RequestOptions ) (* http.Client , context.Context , context.CancelFunc ) {
0 commit comments