mirror of
https://github.com/Xpl0itU/WiiUDownloader.git
synced 2025-05-20 10:15:22 -04:00
Implement multiple concurrent downloads
This commit is contained in:
parent
894ac30409
commit
b74b43fff0
3 changed files with 160 additions and 59 deletions
|
@ -5,35 +5,31 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
func calculateDownloadSpeed(downloaded int64, startTime, endTime time.Time) int64 {
|
||||
duration := endTime.Sub(startTime).Seconds()
|
||||
if duration > 0 {
|
||||
return int64(float64(downloaded) / duration)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type WriterProgress struct {
|
||||
writer io.Writer
|
||||
progressReporter ProgressReporter
|
||||
startTime time.Time
|
||||
filePath string
|
||||
totalDownloaded int64
|
||||
writer io.Writer
|
||||
progressReporter ProgressReporter
|
||||
updateProgressTicker *time.Ticker
|
||||
downloadToReport int64 // Number of bytes to report to the progressReporter since the last update
|
||||
}
|
||||
|
||||
func newWriterProgress(writer io.Writer, progressReporter ProgressReporter, startTime time.Time, filePath string) *WriterProgress {
|
||||
return &WriterProgress{writer: writer, totalDownloaded: 0, progressReporter: progressReporter, startTime: startTime, filePath: filePath}
|
||||
func newWriterProgress(writer io.Writer, progressReporter ProgressReporter) *WriterProgress {
|
||||
return &WriterProgress{writer: writer, progressReporter: progressReporter, updateProgressTicker: time.NewTicker(25 * time.Millisecond), downloadToReport: 0}
|
||||
}
|
||||
|
||||
func (r *WriterProgress) Write(p []byte) (n int, err error) {
|
||||
select {
|
||||
case <-r.updateProgressTicker.C:
|
||||
r.progressReporter.UpdateDownloadProgress(r.downloadToReport)
|
||||
r.downloadToReport = 0
|
||||
default:
|
||||
}
|
||||
if r.progressReporter.Cancelled() {
|
||||
return len(p), nil
|
||||
return 0, nil
|
||||
}
|
||||
n, err = r.writer.Write(p)
|
||||
if err != nil && err != io.EOF {
|
||||
return n, err
|
||||
}
|
||||
r.totalDownloaded += int64(n)
|
||||
r.progressReporter.UpdateDownloadProgress(r.totalDownloaded, calculateDownloadSpeed(r.totalDownloaded, r.startTime, time.Now()), r.filePath)
|
||||
r.downloadToReport += int64(n)
|
||||
return n, err
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue