mirror of
https://github.com/Xpl0itU/WiiUDownloader.git
synced 2025-05-17 16:45:12 -04:00
Improve cancellation
This commit is contained in:
parent
624c96b7e8
commit
f927c43c1b
3 changed files with 15 additions and 9 deletions
|
@ -121,6 +121,7 @@ func createProgressWindow(parent *gtk.ApplicationWindow) (*ProgressWindow, error
|
|||
win.SetTitle("WiiUDownloader - Downloading")
|
||||
|
||||
win.SetTransientFor(parent)
|
||||
win.SetDeletable(false)
|
||||
|
||||
box, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
||||
if err != nil {
|
||||
|
|
|
@ -50,7 +50,7 @@ func downloadFile(ctx context.Context, progressReporter ProgressReporter, client
|
|||
updateProgress := func(downloaded *int64) {
|
||||
for range ticker.C {
|
||||
if progressReporter.Cancelled() {
|
||||
break
|
||||
return
|
||||
}
|
||||
progressReporter.UpdateDownloadProgress(*downloaded, calculateDownloadSpeed(*downloaded, startTime, time.Now()), filePath)
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ func downloadFile(ctx context.Context, progressReporter ProgressReporter, client
|
|||
|
||||
go updateProgress(&downloaded)
|
||||
|
||||
customBufferedWriter, err := NewFileWriterWithProgress(file, &downloaded)
|
||||
customBufferedWriter, err := NewFileWriterWithProgress(file, &downloaded, progressReporter)
|
||||
if err != nil {
|
||||
resp.CloseBodyStream()
|
||||
file.Close()
|
||||
|
|
19
utils.go
19
utils.go
|
@ -32,22 +32,27 @@ func doDeleteEncryptedContents(path string) error {
|
|||
}
|
||||
|
||||
type BufferedWriter struct {
|
||||
file *os.File
|
||||
downloaded *int64
|
||||
buffer []byte
|
||||
file *os.File
|
||||
downloaded *int64
|
||||
progressReporter ProgressReporter
|
||||
buffer []byte
|
||||
}
|
||||
|
||||
func NewFileWriterWithProgress(file *os.File, downloaded *int64) (*BufferedWriter, error) {
|
||||
func NewFileWriterWithProgress(file *os.File, downloaded *int64, progressReporter ProgressReporter) (*BufferedWriter, error) {
|
||||
return &BufferedWriter{
|
||||
file: file,
|
||||
downloaded: downloaded,
|
||||
buffer: make([]byte, bufferSize),
|
||||
file: file,
|
||||
downloaded: downloaded,
|
||||
progressReporter: progressReporter,
|
||||
buffer: make([]byte, bufferSize),
|
||||
}, 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(bufferSize, uint64(remaining))
|
||||
copy(bw.buffer, data[written:written+int(toWrite)])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue