aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-05-06 09:46:10 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-05-06 15:55:02 +0200
commit568528c747afe3ae991b0340d15cd6a897fd5c9d (patch)
treedd08e02b053b0cf27a75ed2e428701b1799e3bf1 /ui
parentui: do tray click action when popup clicked (diff)
downloadwireguard-windows-568528c747afe3ae991b0340d15cd6a897fd5c9d.tar.xz
wireguard-windows-568528c747afe3ae991b0340d15cd6a897fd5c9d.zip
updater: move into manager
Diffstat (limited to 'ui')
-rw-r--r--ui/ui.go45
-rw-r--r--ui/updatepage.go118
2 files changed, 77 insertions, 86 deletions
diff --git a/ui/ui.go b/ui/ui.go
index f9519282..2e2b56ec 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -9,9 +9,6 @@ import (
"fmt"
"github.com/lxn/walk"
"golang.zx2c4.com/wireguard/windows/service"
- "golang.zx2c4.com/wireguard/windows/updater"
- "golang.zx2c4.com/wireguard/windows/version"
- "log"
"runtime"
"runtime/debug"
"time"
@@ -58,35 +55,25 @@ func RunUI() {
})
})
- go func() {
- if !version.IsRunningOfficialVersion() {
- mtw.Synchronize(func() {
- mtw.SetTitle(mtw.Title() + " (unsigned build)")
- })
+ onUpdateNotification := func(updateState service.UpdateState) {
+ if updateState == service.UpdateStateUnknown {
return
}
-
- first := true
- for {
- update, err := updater.CheckForUpdate()
- if err == nil && update != nil {
- mtw.Synchronize(func() {
- mtw.UpdateFound()
- tray.UpdateFound()
- })
- return
- }
- if err != nil {
- log.Printf("Update checker: %v", err)
- if first {
- time.Sleep(time.Minute * 4)
- first = false
- } else {
- time.Sleep(time.Minute * 25)
- }
- } else {
- time.Sleep(time.Hour)
+ mtw.Synchronize(func() {
+ switch updateState {
+ case service.UpdateStateFoundUpdate:
+ mtw.UpdateFound()
+ tray.UpdateFound()
+ case service.UpdateStateUpdatesDisabledUnofficialBuild:
+ mtw.SetTitle(mtw.Title() + " (unsigned build, no updates)")
}
+ })
+ }
+ service.IPCClientRegisterUpdateFound(onUpdateNotification)
+ go func() {
+ updateState, err := service.IPCClientUpdateState()
+ if err == nil {
+ onUpdateNotification(updateState)
}
}()
diff --git a/ui/updatepage.go b/ui/updatepage.go
index 04cc39ca..b5226017 100644
--- a/ui/updatepage.go
+++ b/ui/updatepage.go
@@ -7,9 +7,9 @@ package ui
import (
"fmt"
- "golang.zx2c4.com/wireguard/windows/updater"
-
"github.com/lxn/walk"
+ "golang.zx2c4.com/wireguard/windows/service"
+ "golang.zx2c4.com/wireguard/windows/updater"
)
type UpdatePage struct {
@@ -52,63 +52,67 @@ func NewUpdatePage() (*UpdatePage, error) {
walk.NewVSpacer(up)
+ switchToUpdatingState := func() {
+ if !bar.Visible() {
+ up.SetSuspended(true)
+ button.SetEnabled(false)
+ button.SetVisible(false)
+ bar.SetVisible(true)
+ bar.SetMarqueeMode(true)
+ up.SetSuspended(false)
+ status.SetText("Status: Waiting for updater service")
+ }
+ }
+
+ switchToReadyState := func() {
+ if bar.Visible() {
+ up.SetSuspended(true)
+ bar.SetVisible(false)
+ bar.SetValue(0)
+ bar.SetRange(0, 1)
+ bar.SetMarqueeMode(false)
+ button.SetVisible(true)
+ button.SetEnabled(true)
+ up.SetSuspended(false)
+ }
+ }
+
button.Clicked().Attach(func() {
- up.SetSuspended(true)
- button.SetEnabled(false)
- button.SetVisible(false)
- bar.SetVisible(true)
- bar.SetMarqueeMode(true)
- up.SetSuspended(false)
- progress := updater.DownloadVerifyAndExecute()
- go func() {
- for {
- dp := <-progress
- retNow := false
- up.Synchronize(func() {
- if dp.Error != nil {
- up.SetSuspended(true)
- bar.SetVisible(false)
- bar.SetValue(0)
- bar.SetRange(0, 1)
- bar.SetMarqueeMode(false)
- button.SetVisible(true)
- button.SetEnabled(true)
- status.SetText(fmt.Sprintf("Error: %v. Please try again.", dp.Error))
- up.SetSuspended(false)
- retNow = true
- return
- }
- if len(dp.Activity) > 0 {
- status.SetText(fmt.Sprintf("Status: %s", dp.Activity))
- }
- if dp.BytesTotal > 0 {
- bar.SetMarqueeMode(false)
- bar.SetRange(0, int(dp.BytesTotal))
- bar.SetValue(int(dp.BytesDownloaded))
- } else {
- bar.SetMarqueeMode(true)
- bar.SetValue(0)
- bar.SetRange(0, 1)
- }
- if dp.Complete {
- up.SetSuspended(true)
- bar.SetVisible(false)
- bar.SetValue(0)
- bar.SetRange(0, 0)
- bar.SetMarqueeMode(false)
- button.SetVisible(true)
- button.SetEnabled(true)
- status.SetText("Status: Complete!")
- up.SetSuspended(false)
- retNow = true
- return
- }
- })
- if retNow {
- return
- }
+ switchToUpdatingState()
+ err := service.IPCClientUpdate()
+ if err != nil {
+ switchToReadyState()
+ status.SetText(fmt.Sprintf("Error: %v. Please try again.", err))
+ }
+ })
+
+ service.IPCClientRegisterUpdateProgress(func(dp updater.DownloadProgress) {
+ up.Synchronize(func() {
+ switchToUpdatingState()
+ if dp.Error != nil {
+ switchToReadyState()
+ status.SetText(fmt.Sprintf("Error: %v. Please try again.", dp.Error))
+ return
+ }
+ if len(dp.Activity) > 0 {
+ status.SetText(fmt.Sprintf("Status: %s", dp.Activity))
}
- }()
+ if dp.BytesTotal > 0 {
+ bar.SetMarqueeMode(false)
+ bar.SetRange(0, int(dp.BytesTotal))
+ bar.SetValue(int(dp.BytesDownloaded))
+ } else {
+ bar.SetMarqueeMode(true)
+ bar.SetValue(0)
+ bar.SetRange(0, 1)
+ }
+ if dp.Complete {
+ switchToReadyState()
+ status.SetText("Status: Complete!")
+ return
+ }
+ })
})
+
return up, nil
}