From 7b8f0cdb6f14105d768e8ad269da089d1b7696b8 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Fri, 13 Oct 2023 19:25:30 +0800 Subject: [PATCH] Fix: first double run check version --- internal/bootstrap/update.go | 72 +++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/internal/bootstrap/update.go b/internal/bootstrap/update.go index a37c0e3..d237b6f 100644 --- a/internal/bootstrap/update.go +++ b/internal/bootstrap/update.go @@ -2,7 +2,6 @@ package bootstrap import ( "context" - "sync" "time" log "github.com/sirupsen/logrus" @@ -15,55 +14,70 @@ func InitCheckUpdate(ctx context.Context) error { if err != nil { log.Fatalf("get version info error: %v", err) } + go func() { - t := time.NewTicker(time.Second) - defer t.Stop() + execFile, err := version.ExecutableFile() + if err != nil { + execFile = "synctv" + } + var ( need bool latest string url string - once sync.Once ) + need, latest, url, err = check(ctx, v) + if err != nil { + log.Errorf("check update error: %v", err) + } else { + if need { + log.Infof("new version (%s) available: %s", latest, url) + log.Infof("run '%s self-update' to auto update", execFile) + } + } + SysNotify.RegisterSysNotifyTask(0, sysnotify.NewSysNotifyTask( "check-update", sysnotify.NotifyTypeEXIT, func() error { if need { log.Infof("new version (%s) available: %s", latest, url) - log.Infof("run 'synctv self-update' to auto update") + log.Infof("run '%s self-update' to auto update", execFile) } return nil }, )) + + t := time.NewTicker(time.Hour * 6) + defer t.Stop() for range t.C { - l, err := v.CheckLatest(ctx) - if err != nil { - log.Errorf("check update error: %v", err) - continue - } - latest = l - b, err := v.NeedUpdate(ctx) + need, latest, url, err = check(ctx, v) if err != nil { log.Errorf("check update error: %v", err) - continue } - need = b - if b { - u, err := v.LatestBinaryURL(ctx) - if err != nil { - log.Errorf("check update error: %v", err) - continue - } - url = u - } - once.Do(func() { - if b { - log.Infof("new version (%s) available: %s", latest, url) - log.Infof("run 'synctv self-update' to auto update") - } - t.Reset(time.Hour * 6) - }) } }() + return nil } + +func check(ctx context.Context, v *version.VersionInfo) (need bool, latest string, url string, err error) { + l, err := v.CheckLatest(ctx) + if err != nil { + return false, "", "", err + } + latest = l + b, err := v.NeedUpdate(ctx) + if err != nil { + return false, "", "", err + } + need = b + if b { + u, err := v.LatestBinaryURL(ctx) + if err != nil { + return false, "", "", err + } + url = u + } + return need, latest, url, nil +}