From 5c594e1efbadaf69dee5e676085d0d4431d34016 Mon Sep 17 00:00:00 2001 From: Gabriel Solis Date: Thu, 19 Dec 2024 14:50:45 -0500 Subject: [PATCH] Resume incompleted downloads --- pkg/appstore/appstore_download.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pkg/appstore/appstore_download.go b/pkg/appstore/appstore_download.go index 9a3d307e..8abaeaf1 100644 --- a/pkg/appstore/appstore_download.go +++ b/pkg/appstore/appstore_download.go @@ -111,6 +111,15 @@ func (t *appstore) downloadFile(src, dst string, progress *progressbar.ProgressB if err != nil { return fmt.Errorf("failed to create request: %w", err) } + + file, err := t.os.OpenFile(dst, os.O_CREATE|os.O_RDWR, 0644) + if err != nil { + return fmt.Errorf("failed to open file: %w", err) + } + + defer file.Close() + stat, _ := file.Stat() + req.Header.Add("range", fmt.Sprintf("bytes=%d-", stat.Size())) res, err := t.httpClient.Do(req) if err != nil { @@ -118,15 +127,11 @@ func (t *appstore) downloadFile(src, dst string, progress *progressbar.ProgressB } defer res.Body.Close() - file, err := t.os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - return fmt.Errorf("failed to open file: %w", err) - } - - defer file.Close() if progress != nil { - progress.ChangeMax64(res.ContentLength) + progress.ChangeMax64(res.ContentLength + stat.Size()) + progress.Set64(stat.Size()) + file.Seek(0, io.SeekEnd) _, err = io.Copy(io.MultiWriter(file, progress), res.Body) } else { _, err = io.Copy(file, res.Body)