diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-06 09:46:10 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-06 15:55:02 +0200 |
commit | c3488b9382b08a7fde24955f6342403576847d6a (patch) | |
tree | dd08e02b053b0cf27a75ed2e428701b1799e3bf1 /ui | |
parent | ui: do tray click action when popup clicked (diff) | |
download | wireguard-windows-c3488b9382b08a7fde24955f6342403576847d6a.tar.xz wireguard-windows-c3488b9382b08a7fde24955f6342403576847d6a.zip |
updater: move into manager
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/ui.go | 45 | ||||
-rw-r--r-- | ui/updatepage.go | 118 |
2 files changed, 77 insertions, 86 deletions
@@ -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 } |