Skip to content

Commit 08cc52e

Browse files
committed
Fix file parts are not joined when resume
1 parent 8010386 commit 08cc52e

File tree

2 files changed

+36
-26
lines changed

2 files changed

+36
-26
lines changed

http.go

+35-24
Original file line numberDiff line numberDiff line change
@@ -134,25 +134,30 @@ func (d *HttpDownloader) Do(doneChan chan bool, fileChan chan string, errorChan
134134
var barpool *pb.Pool
135135
var err error
136136

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)
142156
}
143-
barpool, err = pb.StartPool(bars...)
144-
FatalCheck(err)
145-
}
146157

147-
for i, p := range d.parts {
148158
ws.Add(1)
149-
go func(d *HttpDownloader, loop int64, part Part) {
159+
go func(d *HttpDownloader, bar *pb.ProgressBar, part Part) {
150160
defer ws.Done()
151-
var bar *pb.ProgressBar
152-
153-
if DisplayProgressBar() {
154-
bar = bars[loop]
155-
}
156161

157162
var ranges string
158163
if part.RangeTo != d.len {
@@ -214,20 +219,26 @@ func (d *HttpDownloader) Do(doneChan chan bool, fileChan chan string, errorChan
214219
// interrupt download by forcefully close the input stream
215220
resp.Body.Close()
216221
<-finishDownloadChan
217-
stateSaveChan <- Part{
218-
Url: d.url,
219-
Path: part.Path,
220-
RangeFrom: current + part.RangeFrom,
221-
RangeTo: part.RangeTo,
222-
}
223222
case <-finishDownloadChan:
224223
}
225224

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)
229237
}
230238

239+
barpool, err = pb.StartPool(bars...)
240+
FatalCheck(err)
241+
231242
ws.Wait()
232243
doneChan <- true
233244
barpool.Stop()

main.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ func main() {
6262

6363
func Execute(url string, state *State, conn int, skiptls bool) {
6464
//otherwise is hget <URL> command
65-
var err error
6665

6766
signal_chan := make(chan os.Signal, 1)
6867
signal.Notify(signal_chan,
@@ -121,7 +120,7 @@ func Execute(url string, state *State, conn int, skiptls bool) {
121120
return
122121
}
123122
} else {
124-
err = JoinFile(files, filepath.Base(url))
123+
err := JoinFile(files, filepath.Base(url))
125124
FatalCheck(err)
126125
err = os.RemoveAll(FolderOf(url))
127126
FatalCheck(err)

0 commit comments

Comments
 (0)