Skip to content

Commit 46eb790

Browse files
committed
Improve download progress reporting
1 parent 8341832 commit 46eb790

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

cmd/WiiUDownloader/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ func main() {
8585

8686
client := &http.Client{
8787
Transport: &http.Transport{
88+
Proxy: http.ProxyFromEnvironment,
8889
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
8990
dialer := &net.Dialer{
9091
Timeout: 30 * time.Second,

cmd/WiiUDownloader/progressWindow.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,17 @@ func (pw *ProgressWindow) SetGameTitle(title string) {
7979
}
8080

8181
func (pw *ProgressWindow) UpdateDownloadProgress(downloaded int64, filename string) {
82+
if downloaded == 0 {
83+
return
84+
}
8285
glib.IdleAdd(func() bool {
8386
pw.cancelButton.SetSensitive(true)
8487
pw.progressMutex.Lock()
88+
if _, ok := pw.progressPerFile[filename]; !ok {
89+
// This file was already marked as done, don't re-add it
90+
pw.progressMutex.Unlock()
91+
return false
92+
}
8593
pw.progressPerFile[filename] += downloaded
8694
total := pw.totalDownloaded
8795
for _, v := range pw.progressPerFile {

downloader.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ func downloadFile(progressReporter ProgressReporter, client *http.Client, downlo
185185

186186
_, err = io.Copy(writerProgress, watchdog)
187187
timer.Stop()
188+
writerProgress.Close()
188189

189190
if err != nil {
190191
file.Close()
@@ -197,6 +198,7 @@ func downloadFile(progressReporter ProgressReporter, client *http.Client, downlo
197198
}
198199
file.Close()
199200
resp.Body.Close()
201+
progressReporter.MarkFileAsDone(filepath.Base(dstPath))
200202
break
201203
}
202204

writerProgress.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,10 @@ type WriterProgress struct {
1414
}
1515

1616
func newWriterProgress(writer io.Writer, progressReporter ProgressReporter, filename string) *WriterProgress {
17-
return &WriterProgress{writer: writer, progressReporter: progressReporter, updateProgressTicker: time.NewTicker(25 * time.Millisecond), downloadToReport: 0, filename: filename}
17+
return &WriterProgress{writer: writer, progressReporter: progressReporter, updateProgressTicker: time.NewTicker(100 * time.Millisecond), downloadToReport: 0, filename: filename}
1818
}
1919

2020
func (r *WriterProgress) Write(p []byte) (n int, err error) {
21-
select {
22-
case <-r.updateProgressTicker.C:
23-
r.progressReporter.UpdateDownloadProgress(r.downloadToReport, r.filename)
24-
r.downloadToReport = 0
25-
default:
26-
}
2721
if r.progressReporter.Cancelled() {
2822
return 0, nil
2923
}
@@ -32,10 +26,23 @@ func (r *WriterProgress) Write(p []byte) (n int, err error) {
3226
return n, err
3327
}
3428
r.downloadToReport += int64(n)
29+
30+
select {
31+
case <-r.updateProgressTicker.C:
32+
if r.downloadToReport > 0 {
33+
r.progressReporter.UpdateDownloadProgress(r.downloadToReport, r.filename)
34+
r.downloadToReport = 0
35+
}
36+
default:
37+
}
3538
return n, err
3639
}
3740

3841
func (r *WriterProgress) Close() error {
3942
r.updateProgressTicker.Stop()
43+
if r.downloadToReport > 0 {
44+
r.progressReporter.UpdateDownloadProgress(r.downloadToReport, r.filename)
45+
r.downloadToReport = 0
46+
}
4047
return nil
4148
}

0 commit comments

Comments
 (0)