diff options
author | Arnav Bhatt <arnav@ghativega.in> | 2023-11-03 19:07:06 +0530 |
---|---|---|
committer | Arnav Bhatt <arnav@ghativega.in> | 2023-11-03 19:07:06 +0530 |
commit | 9b2de972a4d710dd43c5aa20cf0d53415b4b8a53 (patch) | |
tree | 3ecc92c95b9b9e0c72fb696da4a038108def7a5f | |
parent | 6896ea9f73d542d58cfbc2406b77310fe84fbe01 (diff) |
changes
-rw-r--r-- | FyneApp.toml (renamed from src/FyneApp.toml) | 0 | ||||
-rwxr-xr-x | assets/images/Icon.png (renamed from src/assets/images/Icon.png) | bin | 30765 -> 30765 bytes | |||
-rw-r--r-- | common.go (renamed from src/common.go) | 226 | ||||
-rw-r--r-- | fsctl_windows.go (renamed from src/fsctl.go) | 0 | ||||
-rw-r--r-- | go.mod (renamed from src/go.mod) | 0 | ||||
-rw-r--r-- | go.sum (renamed from src/go.sum) | 0 | ||||
-rw-r--r-- | gui.go (renamed from src/gui.go) | 20 | ||||
-rw-r--r-- | ioctl_windows.go (renamed from src/ioctl.go) | 0 | ||||
-rw-r--r-- | main.go (renamed from src/main.go) | 0 | ||||
-rw-r--r-- | util_unix.go (renamed from src/util_linux.go) | 2 | ||||
-rw-r--r-- | util_windows.go (renamed from src/util_win.go) | 0 |
11 files changed, 119 insertions, 129 deletions
diff --git a/src/FyneApp.toml b/FyneApp.toml index 9d305a7..9d305a7 100644 --- a/src/FyneApp.toml +++ b/FyneApp.toml diff --git a/src/assets/images/Icon.png b/assets/images/Icon.png Binary files differindex 0618d9f..0618d9f 100755 --- a/src/assets/images/Icon.png +++ b/assets/images/Icon.png diff --git a/src/common.go b/common.go index 19b5e16..5567172 100644 --- a/src/common.go +++ b/common.go @@ -39,12 +39,12 @@ func fmtDuration(d time.Duration) string { return fmt.Sprintf("%02d:%02d:%02d", h, m, s) } -func StartTimer(start time.Time, widgets GUI) chan bool { - ch := make(chan bool) +func StartTimer(start time.Time, widgets GUI) chan struct{} { + chQuit := make(chan struct{}) go func() { for range time.Tick(time.Second) { select { - case <-ch: + case <-chQuit: return default: elapsed := time.Since(start) @@ -53,13 +53,15 @@ func StartTimer(start time.Time, widgets GUI) chan bool { } } }() - return ch + return chQuit } func cleanUp(data *MainData, gui GUI, handles Handles) { - data.bQuitTimer <- true + data.bQuitTimer <- struct{}{} + close(data.bQuitTask) + close(data.bQuitTimer) CloseRequiredHandles(handles) - disableCancelButton(gui, *data) + DisableCancelButton(gui, *data) } func StartMainTask(data *MainData, gui GUI) { @@ -124,63 +126,60 @@ func ReadDisk(data *MainData, gui GUI, handles Handles) { lasti := int64(0) updateTimer := time.Now() - data.bQuitTask = make(chan bool) + data.bQuitTask = make(chan struct{}) go func() { + defer cleanUp(data, gui, handles) for i := int64(0); i < diskNumSectors; i += 1024 { select { case <-data.bQuitTask: return default: - { - set := determineOptimalSize(diskNumSectors, i) + set := determineOptimalSize(diskNumSectors, i) + sectorData, err := ReadSectorDataFromHandle( + handles.hDisk, + i, + set, + diskSector, + ) - sectorData, err := ReadSectorDataFromHandle( - handles.hDisk, - i, - set, - diskSector, + if err != nil { + HandleError( + gui, + data, + errors.Join( + errors.New("ReadDisk(): ReadSectorDataFromHandle failed"), + err, + ), ) - if err != nil { - cleanUp(data, gui, handles) - HandleError( - gui, - data, - errors.Join( - errors.New("ReadDisk(): ReadSectorDataFromHandle failed"), - err, - ), - ) - return - } + return + } - err = WriteSectorDataFromHandle(handles.hImage, sectorData, i, diskSector) - if err != nil { - cleanUp(data, gui, handles) - HandleError( - gui, - data, - errors.Join( - errors.New("ReadDisk(): WriteSectorDataFromHandle failed"), - err, - ), - ) - return - } + err = WriteSectorDataFromHandle(handles.hImage, sectorData, i, diskSector) + if err != nil { + HandleError( + gui, + data, + errors.Join( + errors.New("ReadDisk(): WriteSectorDataFromHandle failed"), + err, + ), + ) + return + } - gui.rwProgressBar.SetValue(float64(i)) - if time.Since(updateTimer).Milliseconds() >= 1000 { - mbPerSec := float64( - (int64(diskSector) * (i - lasti)), - ) * (1000 / float64(time.Since(updateTimer).Milliseconds())) / 1024.0 / 1024.0 - setText := fmt.Sprintf("%f MB/s", mbPerSec) - gui.speedLabel.SetText(setText) - lasti = i - updateTimer = time.Now() - } + gui.rwProgressBar.SetValue(float64(i)) + if time.Since(updateTimer).Milliseconds() >= 1000 { + mbPerSec := float64( + (int64(diskSector) * (i - lasti)), + ) * (1000 / float64(time.Since(updateTimer).Milliseconds())) / 1024.0 / 1024.0 + setText := fmt.Sprintf("%f MB/s", mbPerSec) + gui.speedLabel.SetText(setText) + lasti = i + updateTimer = time.Now() } } } - cleanUp(data, gui, handles) + gui.statusLabel.SetText("Success!") }() } @@ -220,99 +219,94 @@ func WriteVerifyDisk(data *MainData, gui GUI, handles Handles) { lasti := int64(0) updateTimer := time.Now() - data.bQuitTask = make(chan bool) + data.bQuitTask = make(chan struct{}) go func() { + defer cleanUp(data, gui, handles) for i := int64(0); i < imageNumSectors; i += 1024 { select { case <-data.bQuitTask: return default: - { - numSectors := determineOptimalSize(imageNumSectors, i) + numSectors := determineOptimalSize(imageNumSectors, i) + sectorData, err := ReadSectorDataFromHandle( + handles.hImage, + i, + numSectors, + diskSector, + ) - sectorData, err := ReadSectorDataFromHandle( - handles.hImage, - i, - numSectors, - diskSector, + if err != nil { + HandleError( + gui, + data, + errors.Join( + errors.New("WriteVerifyDisk(): ReadSectorDataFromHandle failed"), + err, + ), ) - if err != nil { - cleanUp(data, gui, handles) - HandleError( - gui, - data, - errors.Join( - errors.New("WriteVerifyDisk(): ReadSectorDataFromHandle failed"), - err, - ), - ) - return - } + return + } - if data.taskType == START_WRITE { - err = WriteSectorDataFromHandle( - handles.hDisk, - sectorData, - i, - diskSector, - ) - if err != nil { - cleanUp(data, gui, handles) - HandleError( - gui, - data, - errors.Join( - errors.New( - "WriteVerifyDisk(): WriteSectorDataFromHandle failed", - ), - err, - ), - ) - return - } - } - sectorData2, err := ReadSectorDataFromHandle( + if data.taskType == START_WRITE { + err = WriteSectorDataFromHandle( handles.hDisk, + sectorData, i, - numSectors, diskSector, ) if err != nil { - cleanUp(data, gui, handles) HandleError( gui, data, errors.Join( - errors.New("WriteVerifyDisk(): ReadSectorDataFromHandle failed"), + errors.New( + "WriteVerifyDisk(): WriteSectorDataFromHandle failed", + ), err, ), ) return } + } + sectorData2, err := ReadSectorDataFromHandle( + handles.hDisk, + i, + numSectors, + diskSector, + ) + if err != nil { + HandleError( + gui, + data, + errors.Join( + errors.New("WriteVerifyDisk(): ReadSectorDataFromHandle failed"), + err, + ), + ) + return + } - if !bytes.Equal(sectorData, sectorData2) { - cleanUp(data, gui, handles) - strError := fmt.Sprintf( - "WriteVerifyDisk(): Verification failed at sector: %d\n", - i, - ) - HandleError(gui, data, errors.New(strError)) - return - } + if !bytes.Equal(sectorData, sectorData2) { + strError := fmt.Sprintf( + "WriteVerifyDisk(): Verification failed at sector: %d\n", + i, + ) + HandleError(gui, data, errors.New(strError)) + return + } - gui.rwProgressBar.SetValue(float64(i)) - if time.Since(updateTimer).Milliseconds() >= 1000 { - mbPerSec := float64( - (int64(diskSector) * (i - lasti)), - ) * (1000 / float64(time.Since(updateTimer).Milliseconds())) / 1024.0 / 1024.0 - setText := fmt.Sprintf("%f MB/s", mbPerSec) - gui.speedLabel.SetText(setText) - lasti = i - updateTimer = time.Now() - } + gui.rwProgressBar.SetValue(float64(i)) + if time.Since(updateTimer).Milliseconds() >= 1000 { + mbPerSec := float64( + (int64(diskSector) * (i - lasti)), + ) * (1000 / float64(time.Since(updateTimer).Milliseconds())) / 1024.0 / 1024.0 + setText := fmt.Sprintf("%f MB/s", mbPerSec) + gui.speedLabel.SetText(setText) + lasti = i + updateTimer = time.Now() } } } - cleanUp(data, gui, handles) + gui.statusLabel.SetText("Success!") }() } diff --git a/src/fsctl.go b/fsctl_windows.go index 3390296..3390296 100644 --- a/src/fsctl.go +++ b/fsctl_windows.go @@ -15,8 +15,8 @@ type MainData struct { taskType TaskType selectedDrive string imagePath string - bQuitTimer chan bool - bQuitTask chan bool + bQuitTimer chan struct{} + bQuitTask chan struct{} } type GUI struct { @@ -30,7 +30,7 @@ type GUI struct { guiTabs *container.AppTabs } -func disableCancelButton(widgets GUI, data MainData) { +func DisableCancelButton(widgets GUI, data MainData) { if data.taskType == START_WRITE || data.taskType == START_VERIFY { widgets.guiTabs.EnableIndex(1) } else if data.taskType == START_READ { @@ -77,7 +77,7 @@ func enableCancelButton(widgets GUI, data MainData) { } func FileOpenDialog(myApp fyne.App, gui GUI, data *MainData) { - window := myApp.NewWindow("Open File") + window := myApp.NewWindow("Utkirna") window.CenterOnScreen() window.SetFixedSize(true) @@ -91,7 +91,6 @@ func FileOpenDialog(myApp fyne.App, gui GUI, data *MainData) { gui.inputPath.SetText(data.imagePath) } }, window) - fd.SetFilter(storage.NewExtensionFileFilter([]string{".img"})) fd.Show() fd.SetOnClosed(func() { window.Close() @@ -105,7 +104,7 @@ func FileOpenDialog(myApp fyne.App, gui GUI, data *MainData) { } func FileSaveDialog(myApp fyne.App, gui GUI, data *MainData) { - window := myApp.NewWindow("Save File") + window := myApp.NewWindow("Utkirna") window.CenterOnScreen() window.SetFixedSize(true) @@ -134,7 +133,7 @@ func FileSaveDialog(myApp fyne.App, gui GUI, data *MainData) { func HandleError(gui GUI, data *MainData, err error) { dialog.ShowError(err, gui.window) - disableCancelButton(gui, *data) + DisableCancelButton(gui, *data) } func HandleStartError() { @@ -229,13 +228,11 @@ func StartGui() { gui.cancelButton = widget.NewButton("Cancel", func() { dialog.ShowConfirm( "Cancellation", - "Cancelling the current operation may corrupt the destination drive. Are you sure to continue?", + "Cancelling the current operation may corrupt the destination drive.\nAre you sure to continue?", func(b bool) { if b { + data.bQuitTask <- struct{}{} gui.statusLabel.SetText("Cancelled") - data.bQuitTask <- true - disableCancelButton(gui, data) - data.bQuitTimer <- true } }, gui.window, @@ -335,7 +332,6 @@ func StartGui() { container.NewTabItem("Write To Disk", writeTab), container.NewTabItem("Read From Disk", readTab), ) - gui.guiTabs.SetTabLocation(container.TabLocationTop) gui.window.SetContent(gui.guiTabs) diff --git a/src/ioctl.go b/ioctl_windows.go index c2d6cbc..c2d6cbc 100644 --- a/src/ioctl.go +++ b/ioctl_windows.go diff --git a/src/util_linux.go b/util_unix.go index 1599731..5c76233 100644 --- a/src/util_linux.go +++ b/util_unix.go @@ -24,7 +24,7 @@ func isPermAvailable() bool { if err != nil { fmt.Printf("[isRoot] Unable to get current user: %s", err) } - return currentUser.Username == "root" + return currentUser.Uid == "0" } func gatherSizeInBytes(fd int) (int64, error) { diff --git a/src/util_win.go b/util_windows.go index ddd4bcc..ddd4bcc 100644 --- a/src/util_win.go +++ b/util_windows.go |