|
package downloader |
|
|
|
import "hash" |
|
|
|
type progressWriter struct { |
|
fileName string |
|
total int64 |
|
fileNo int |
|
totalFiles int |
|
written int64 |
|
downloadStatus func(string, string, string, float64) |
|
hash hash.Hash |
|
} |
|
|
|
func (pw *progressWriter) Write(p []byte) (n int, err error) { |
|
n, err = pw.hash.Write(p) |
|
pw.written += int64(n) |
|
|
|
if pw.total > 0 { |
|
percentage := float64(pw.written) / float64(pw.total) * 100 |
|
if pw.totalFiles > 1 { |
|
|
|
|
|
|
|
|
|
|
|
percentage = percentage / float64(pw.totalFiles) |
|
if pw.fileNo > 1 { |
|
percentage += float64(pw.fileNo-1) * 100 / float64(pw.totalFiles) |
|
} |
|
} |
|
|
|
pw.downloadStatus(pw.fileName, formatBytes(pw.written), formatBytes(pw.total), percentage) |
|
} else { |
|
pw.downloadStatus(pw.fileName, formatBytes(pw.written), "", 0) |
|
} |
|
|
|
return |
|
} |
|
|