@@ -134,25 +134,30 @@ func (d *HttpDownloader) Do(doneChan chan bool, fileChan chan string, errorChan
134
134
var barpool * pb.Pool
135
135
var err error
136
136
137
- if DisplayProgressBar () {
138
- bars = make ([]* pb.ProgressBar , 0 )
139
- for i , part := range d .parts {
140
- newbar := pb .New64 (part .RangeTo - part .RangeFrom ).SetUnits (pb .U_BYTES ).Prefix (color .YellowString (fmt .Sprintf ("%s-%d" , d .file , i )))
141
- bars = append (bars , newbar )
137
+ for i , p := range d .parts {
138
+
139
+ if p .RangeTo <= p .RangeFrom {
140
+ fileChan <- p .Path
141
+ stateSaveChan <- Part {
142
+ Url : d .url ,
143
+ Path : p .Path ,
144
+ RangeFrom : p .RangeFrom ,
145
+ RangeTo : p .RangeTo ,
146
+ }
147
+
148
+ continue
149
+ }
150
+
151
+ var bar * pb.ProgressBar
152
+
153
+ if DisplayProgressBar () {
154
+ bar = pb .New64 (p .RangeTo - p .RangeFrom ).SetUnits (pb .U_BYTES ).Prefix (color .YellowString (fmt .Sprintf ("%s-%d" , d .file , i )))
155
+ bars = append (bars , bar )
142
156
}
143
- barpool , err = pb .StartPool (bars ... )
144
- FatalCheck (err )
145
- }
146
157
147
- for i , p := range d .parts {
148
158
ws .Add (1 )
149
- go func (d * HttpDownloader , loop int64 , part Part ) {
159
+ go func (d * HttpDownloader , bar * pb. ProgressBar , part Part ) {
150
160
defer ws .Done ()
151
- var bar * pb.ProgressBar
152
-
153
- if DisplayProgressBar () {
154
- bar = bars [loop ]
155
- }
156
161
157
162
var ranges string
158
163
if part .RangeTo != d .len {
@@ -214,20 +219,26 @@ func (d *HttpDownloader) Do(doneChan chan bool, fileChan chan string, errorChan
214
219
// interrupt download by forcefully close the input stream
215
220
resp .Body .Close ()
216
221
<- finishDownloadChan
217
- stateSaveChan <- Part {
218
- Url : d .url ,
219
- Path : part .Path ,
220
- RangeFrom : current + part .RangeFrom ,
221
- RangeTo : part .RangeTo ,
222
- }
223
222
case <- finishDownloadChan :
224
223
}
225
224
226
- bar .Update ()
227
- bar .Finish ()
228
- }(d , int64 (i ), p )
225
+ stateSaveChan <- Part {
226
+ Url : d .url ,
227
+ Path : part .Path ,
228
+ RangeFrom : current + part .RangeFrom ,
229
+ RangeTo : part .RangeTo ,
230
+ }
231
+
232
+ if DisplayProgressBar () {
233
+ bar .Update ()
234
+ bar .Finish ()
235
+ }
236
+ }(d , bar , p )
229
237
}
230
238
239
+ barpool , err = pb .StartPool (bars ... )
240
+ FatalCheck (err )
241
+
231
242
ws .Wait ()
232
243
doneChan <- true
233
244
barpool .Stop ()
0 commit comments