Add break/work functionality
This commit is contained in:
77
main.go
77
main.go
@@ -3,31 +3,39 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/app"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/dialog"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var timer time.Duration
|
||||
var ticking bool = false
|
||||
var status string = "WORK TIME"
|
||||
|
||||
// TODO: GET DEFAULT WORK AND BREAK TIMES FROM FILESYSTEM
|
||||
var defaultWorkTime string = "25m"
|
||||
var defaultBreakTime string = "5m"
|
||||
|
||||
a := app.New()
|
||||
w := a.NewWindow("matocock")
|
||||
w := a.NewWindow(status)
|
||||
w.SetFixedSize(true)
|
||||
w.Resize(fyne.NewSize(400, 50))
|
||||
|
||||
workEntry := widget.NewEntry()
|
||||
workEntry.SetText("3s")
|
||||
workEntry.SetText(defaultWorkTime)
|
||||
workEntry.TextStyle.Monospace = true
|
||||
workEntry.Refresh()
|
||||
|
||||
breakEntry := widget.NewEntry()
|
||||
breakEntry.SetText("5m")
|
||||
breakEntry.SetText(defaultBreakTime)
|
||||
breakEntry.TextStyle.Monospace = true
|
||||
|
||||
breakEntry.Refresh()
|
||||
|
||||
var beginButton *widget.Button
|
||||
@@ -35,7 +43,13 @@ func main() {
|
||||
go func() {
|
||||
if !ticking {
|
||||
ticking = true
|
||||
duration, err := time.ParseDuration(workEntry.Text)
|
||||
var duration time.Duration
|
||||
var err error
|
||||
if status == "WORK TIME" {
|
||||
duration, err = time.ParseDuration(workEntry.Text)
|
||||
} else {
|
||||
duration, err = time.ParseDuration(breakEntry.Text)
|
||||
}
|
||||
if err != nil {
|
||||
neww := fyne.CurrentApp().NewWindow("Error")
|
||||
neww.Resize(fyne.NewSize(500, 500))
|
||||
@@ -61,31 +75,47 @@ func main() {
|
||||
})
|
||||
timer = duration
|
||||
timeStarted := time.Now()
|
||||
workEntry.Disable()
|
||||
|
||||
for ticking {
|
||||
cur := time.Since(timeStarted)
|
||||
workEntry.SetText((cur.Round(time.Second) - timer.Round(time.Second)).Abs().String())
|
||||
if status == "WORK TIME" {
|
||||
workEntry.Disable()
|
||||
workEntry.SetText((cur.Round(time.Second) - timer.Round(time.Second)).Abs().String())
|
||||
} else {
|
||||
breakEntry.Disable()
|
||||
breakEntry.SetText((cur.Round(time.Second) - timer.Round(time.Second)).Abs().String())
|
||||
}
|
||||
|
||||
if cur >= timer {
|
||||
ticking = false
|
||||
a.SendNotification(fyne.NewNotification("matocock", "timer is done"))
|
||||
workEntry.Enable()
|
||||
beginButton.Icon = theme.Icon(theme.IconNameMediaPlay)
|
||||
fyne.Do(func() {
|
||||
beginButton.SetText("Start")
|
||||
})
|
||||
beginButton.Importance = widget.HighImportance
|
||||
fyne.Do(func() {
|
||||
beginButton.Refresh()
|
||||
})
|
||||
if status == "WORK TIME" {
|
||||
status = "BREAK TIME"
|
||||
workEntry.SetText(defaultWorkTime)
|
||||
workEntry.Enable()
|
||||
timer, err = time.ParseDuration(breakEntry.Text)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
timer = timer + cur
|
||||
w.SetTitle(status)
|
||||
} else {
|
||||
status = "WORK TIME"
|
||||
breakEntry.SetText(defaultBreakTime)
|
||||
breakEntry.Enable()
|
||||
timer, err = time.ParseDuration(workEntry.Text)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
timer = timer + cur
|
||||
w.SetTitle(status)
|
||||
}
|
||||
} else {
|
||||
time.Sleep(time.Second * 1)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ticking = false
|
||||
|
||||
workEntry.Enable()
|
||||
breakEntry.Enable()
|
||||
beginButton.Icon = theme.Icon(theme.IconNameMediaPlay)
|
||||
fyne.Do(func() {
|
||||
beginButton.SetText("Start")
|
||||
@@ -100,7 +130,14 @@ func main() {
|
||||
|
||||
beginButton.Importance = widget.HighImportance
|
||||
|
||||
w.SetContent(container.NewGridWithColumns(3, workEntry, breakEntry, beginButton))
|
||||
w.SetContent(container.NewGridWithColumns(3, workEntry, breakEntry, container.NewVBox(beginButton, widget.NewButtonWithIcon("Skip", theme.Icon(theme.IconNameMediaSkipNext), func() {
|
||||
if status == "WORK TIME" {
|
||||
status = "BREAK TIME"
|
||||
} else {
|
||||
status = "WORK TIME"
|
||||
}
|
||||
w.SetTitle(status)
|
||||
}))))
|
||||
menu := fyne.NewMainMenu(fyne.NewMenu("root"), fyne.NewMenu("help", fyne.NewMenuItem("valid time arguments", func() {
|
||||
neww := fyne.CurrentApp().NewWindow("Help")
|
||||
neww.Resize(fyne.NewSize(500, 500))
|
||||
|
Reference in New Issue
Block a user