mirror of
https://github.com/Xpl0itU/WiiUDownloader.git
synced 2025-05-12 22:26:15 -04:00
parent
f054096e64
commit
28581f79a0
7 changed files with 76 additions and 150 deletions
35
utils.go
35
utils.go
|
@ -30,38 +30,3 @@ func doDeleteEncryptedContents(path string) error {
|
|||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
type BufferedWriter struct {
|
||||
file *os.File
|
||||
downloaded *int64
|
||||
progressReporter ProgressReporter
|
||||
buffer []byte
|
||||
}
|
||||
|
||||
func NewFileWriterWithProgress(file *os.File, downloaded *int64, progressReporter ProgressReporter) (*BufferedWriter, error) {
|
||||
return &BufferedWriter{
|
||||
file: file,
|
||||
downloaded: downloaded,
|
||||
progressReporter: progressReporter,
|
||||
buffer: make([]byte, BUFFER_SIZE),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (bw *BufferedWriter) Write(data []byte) (int, error) {
|
||||
written := 0
|
||||
for written < len(data) {
|
||||
if bw.progressReporter.Cancelled() {
|
||||
return written, nil
|
||||
}
|
||||
remaining := len(data) - written
|
||||
toWrite := min(BUFFER_SIZE, uint64(remaining))
|
||||
copy(bw.buffer, data[written:written+int(toWrite)])
|
||||
n, err := bw.file.Write(bw.buffer[:toWrite])
|
||||
if err != nil {
|
||||
return written, err
|
||||
}
|
||||
written += n
|
||||
*bw.downloaded += int64(n)
|
||||
}
|
||||
return written, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue