summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnav Bhatt <arnav@ghativega.in>2023-11-03 19:07:06 +0530
committerArnav Bhatt <arnav@ghativega.in>2023-11-03 19:07:06 +0530
commit9b2de972a4d710dd43c5aa20cf0d53415b4b8a53 (patch)
tree3ecc92c95b9b9e0c72fb696da4a038108def7a5f
parent6896ea9f73d542d58cfbc2406b77310fe84fbe01 (diff)
changes
-rw-r--r--FyneApp.toml (renamed from src/FyneApp.toml)0
-rwxr-xr-xassets/images/Icon.png (renamed from src/assets/images/Icon.png)bin30765 -> 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
index 0618d9f..0618d9f 100755
--- a/src/assets/images/Icon.png
+++ b/assets/images/Icon.png
Binary files differ
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
diff --git a/src/go.mod b/go.mod
index 546a013..546a013 100644
--- a/src/go.mod
+++ b/go.mod
diff --git a/src/go.sum b/go.sum
index 33ce187..33ce187 100644
--- a/src/go.sum
+++ b/go.sum
diff --git a/src/gui.go b/gui.go
index fa0b1ff..03d5b20 100644
--- a/src/gui.go
+++ b/gui.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/main.go b/main.go
index 9ba7f39..9ba7f39 100644
--- a/src/main.go
+++ b/main.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