Skip to content

Commit 5c594e1

Browse files
committed
Resume incompleted downloads
1 parent 8a23d6f commit 5c594e1

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

pkg/appstore/appstore_download.go

+12-7
Original file line numberDiff line numberDiff line change
@@ -111,22 +111,27 @@ func (t *appstore) downloadFile(src, dst string, progress *progressbar.ProgressB
111111
if err != nil {
112112
return fmt.Errorf("failed to create request: %w", err)
113113
}
114+
115+
file, err := t.os.OpenFile(dst, os.O_CREATE|os.O_RDWR, 0644)
116+
if err != nil {
117+
return fmt.Errorf("failed to open file: %w", err)
118+
}
119+
120+
defer file.Close()
121+
stat, _ := file.Stat()
122+
req.Header.Add("range", fmt.Sprintf("bytes=%d-", stat.Size()))
114123

115124
res, err := t.httpClient.Do(req)
116125
if err != nil {
117126
return fmt.Errorf("request failed: %w", err)
118127
}
119128
defer res.Body.Close()
120129

121-
file, err := t.os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0644)
122-
if err != nil {
123-
return fmt.Errorf("failed to open file: %w", err)
124-
}
125-
126-
defer file.Close()
127130

128131
if progress != nil {
129-
progress.ChangeMax64(res.ContentLength)
132+
progress.ChangeMax64(res.ContentLength + stat.Size())
133+
progress.Set64(stat.Size())
134+
file.Seek(0, io.SeekEnd)
130135
_, err = io.Copy(io.MultiWriter(file, progress), res.Body)
131136
} else {
132137
_, err = io.Copy(file, res.Body)

0 commit comments

Comments
 (0)