diff --git a/handler/convertor_windows.go b/handler/convertor_windows.go index 9ea6702..0f4594b 100644 --- a/handler/convertor_windows.go +++ b/handler/convertor_windows.go @@ -42,7 +42,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre MessageID: "unzipRun", }) progressMessage.Refresh() - err = unZip("ffmpeg/ffmpeg.zip", "ffmpeg") + err = unZip("ffmpeg/ffmpeg.zip", "ffmpeg", progressBar) if err != nil { return err } @@ -100,13 +100,23 @@ func downloadFile(filepath string, url string, progressBar *widget.ProgressBar) return nil } -func unZip(fileZip string, directory string) error { +func unZip(fileZip string, directory string, progressBar *widget.ProgressBar) error { + progressBar.Value = 0 + progressBar.Max = 100 + archive, err := zip.OpenReader(fileZip) if err != nil { return err } defer archive.Close() + totalBytes := int64(0) + for _, f := range archive.File { + totalBytes += int64(f.UncompressedSize64) + } + + unpackedBytes := int64(0) + for _, f := range archive.File { filePath := filepath.Join(directory, f.Name) @@ -132,10 +142,15 @@ func unZip(fileZip string, directory string) error { return err } - if _, err := io.Copy(dstFile, fileInArchive); err != nil { + bytesRead, err := io.Copy(dstFile, fileInArchive) + if err != nil { return err } + unpackedBytes += bytesRead + progressBar.Value = float64(unpackedBytes) / float64(totalBytes) * 100 + progressBar.Refresh() + dstFile.Close() fileInArchive.Close() }