forked from Silverfish/proton-bridge
feat(BRIDGE-309): Update to the bridge updater logic corresponding to the version file restructure
This commit is contained in:
@ -482,16 +482,16 @@ func (f *frontendCLI) watchEvents(eventCh <-chan events.Event) { // nolint:gocyc
|
||||
|
||||
case events.UpdateAvailable:
|
||||
if !event.Compatible {
|
||||
f.Printf("A new version (%v) is available but it cannot be installed automatically.\n", event.Version.Version)
|
||||
f.Printf("A new version (%v) is available but it cannot be installed automatically.\n", event.GetLatestVersion())
|
||||
} else if !event.Silent {
|
||||
f.Printf("A new version (%v) is available.\n", event.Version.Version)
|
||||
f.Printf("A new version (%v) is available.\n", event.GetLatestVersion())
|
||||
}
|
||||
|
||||
case events.UpdateInstalled:
|
||||
f.Printf("A new version (%v) was installed.\n", event.Version.Version)
|
||||
f.Printf("A new version (%v) was installed.\n", event.GetLatestVersion())
|
||||
|
||||
case events.UpdateFailed:
|
||||
f.Printf("A new version (%v) failed to be installed (%v).\n", event.Version.Version, event.Error)
|
||||
f.Printf("A new version (%v) failed to be installed (%v).\n", event.GetLatestVersion(), event.Error)
|
||||
|
||||
case events.UpdateForced:
|
||||
f.notifyNeedUpgrade()
|
||||
|
||||
@ -78,11 +78,13 @@ type Service struct { // nolint:structcheck
|
||||
eventCh <-chan events.Event
|
||||
quitCh <-chan struct{}
|
||||
|
||||
latest updater.VersionInfo
|
||||
latestLock safe.RWMutex
|
||||
latestLegacy updater.VersionInfoLegacy
|
||||
latest updater.Release
|
||||
latestLock safe.RWMutex
|
||||
|
||||
target updater.VersionInfo
|
||||
targetLock safe.RWMutex
|
||||
targetLegacy updater.VersionInfoLegacy
|
||||
target updater.Release
|
||||
targetLock safe.RWMutex
|
||||
|
||||
authClient *proton.Client
|
||||
auth proton.Auth
|
||||
@ -168,11 +170,13 @@ func NewService(
|
||||
eventCh: eventCh,
|
||||
quitCh: quitCh,
|
||||
|
||||
latest: updater.VersionInfo{},
|
||||
latestLock: safe.NewRWMutex(),
|
||||
latestLegacy: updater.VersionInfoLegacy{},
|
||||
latest: updater.Release{},
|
||||
latestLock: safe.NewRWMutex(),
|
||||
|
||||
target: updater.VersionInfo{},
|
||||
targetLock: safe.NewRWMutex(),
|
||||
targetLegacy: updater.VersionInfoLegacy{},
|
||||
target: updater.Release{},
|
||||
targetLock: safe.NewRWMutex(),
|
||||
|
||||
log: logrus.WithField("pkg", "grpc"),
|
||||
initializing: sync.WaitGroup{},
|
||||
@ -354,10 +358,11 @@ func (s *Service) watchEvents() {
|
||||
|
||||
case events.UpdateLatest:
|
||||
safe.RLock(func() {
|
||||
s.latest = event.Version
|
||||
s.latestLegacy = event.VersionLegacy
|
||||
s.latest = event.Release
|
||||
}, s.latestLock)
|
||||
|
||||
_ = s.SendEvent(NewUpdateVersionChangedEvent())
|
||||
_ = s.SendEvent(NewUpdateVersionChangedEvent()) // This updates the release notes page and landing page.
|
||||
|
||||
case events.UpdateAvailable:
|
||||
switch {
|
||||
@ -366,10 +371,11 @@ func (s *Service) watchEvents() {
|
||||
|
||||
case !event.Silent:
|
||||
safe.RLock(func() {
|
||||
s.target = event.Version
|
||||
s.targetLegacy = event.VersionLegacy
|
||||
s.target = event.Release
|
||||
}, s.targetLock)
|
||||
|
||||
_ = s.SendEvent(NewUpdateManualReadyEvent(event.Version.Version.String()))
|
||||
_ = s.SendEvent(NewUpdateManualReadyEvent(event.GetLatestVersion()))
|
||||
}
|
||||
|
||||
case events.UpdateInstalled:
|
||||
@ -391,8 +397,10 @@ func (s *Service) watchEvents() {
|
||||
|
||||
if s.latest.Version != nil {
|
||||
latest = s.latest.Version.String()
|
||||
} else if version, ok := s.checkLatestVersion(); ok {
|
||||
latest = version.Version.String()
|
||||
} else if s.latestLegacy.Version != nil {
|
||||
latest = s.latestLegacy.Version.String()
|
||||
} else if latestVersion, ok := s.checkLatestVersion(); ok {
|
||||
latest = latestVersion
|
||||
} else {
|
||||
latest = "unknown"
|
||||
}
|
||||
@ -517,7 +525,7 @@ func (s *Service) triggerReset() {
|
||||
s.bridge.FactoryReset(context.Background())
|
||||
}
|
||||
|
||||
func (s *Service) checkLatestVersion() (updater.VersionInfo, bool) {
|
||||
func (s *Service) checkLatestVersion() (string, bool) {
|
||||
updateCh, done := s.bridge.GetEvents(events.UpdateLatest{})
|
||||
defer done()
|
||||
|
||||
@ -526,14 +534,13 @@ func (s *Service) checkLatestVersion() (updater.VersionInfo, bool) {
|
||||
select {
|
||||
case event := <-updateCh:
|
||||
if latest, ok := event.(events.UpdateLatest); ok {
|
||||
return latest.Version, true
|
||||
return latest.GetLatestVersion(), true
|
||||
}
|
||||
|
||||
case <-time.After(5 * time.Second):
|
||||
// ...
|
||||
}
|
||||
|
||||
return updater.VersionInfo{}, false
|
||||
return "", false
|
||||
}
|
||||
|
||||
func newTLSConfig() (*tls.Config, []byte, error) {
|
||||
|
||||
@ -298,7 +298,14 @@ func (s *Service) ReleaseNotesPageLink(_ context.Context, _ *emptypb.Empty) (*wr
|
||||
s.latestLock.RUnlock()
|
||||
}()
|
||||
|
||||
return wrapperspb.String(s.latest.ReleaseNotesPage), nil
|
||||
var releaseNotesPage string
|
||||
if !s.latestLegacy.IsEmpty() {
|
||||
releaseNotesPage = s.latestLegacy.ReleaseNotesPage
|
||||
} else if !s.latest.IsEmpty() {
|
||||
releaseNotesPage = s.latest.ReleaseNotesPage
|
||||
}
|
||||
|
||||
return wrapperspb.String(releaseNotesPage), nil
|
||||
}
|
||||
|
||||
func (s *Service) LandingPageLink(_ context.Context, _ *emptypb.Empty) (*wrapperspb.StringValue, error) {
|
||||
@ -308,7 +315,14 @@ func (s *Service) LandingPageLink(_ context.Context, _ *emptypb.Empty) (*wrapper
|
||||
s.latestLock.RUnlock()
|
||||
}()
|
||||
|
||||
return wrapperspb.String(s.latest.LandingPage), nil
|
||||
var landingPage string
|
||||
if !s.latestLegacy.IsEmpty() {
|
||||
landingPage = s.latestLegacy.LandingPage
|
||||
} else if !s.latest.IsEmpty() {
|
||||
landingPage = s.latest.LandingPage
|
||||
}
|
||||
|
||||
return wrapperspb.String(landingPage), nil
|
||||
}
|
||||
|
||||
func (s *Service) SetColorSchemeName(_ context.Context, name *wrapperspb.StringValue) (*emptypb.Empty, error) {
|
||||
@ -617,7 +631,11 @@ func (s *Service) InstallUpdate(_ context.Context, _ *emptypb.Empty) (*emptypb.E
|
||||
defer async.HandlePanic(s.panicHandler)
|
||||
|
||||
safe.RLock(func() {
|
||||
s.bridge.InstallUpdate(s.target)
|
||||
if !s.targetLegacy.IsEmpty() {
|
||||
s.bridge.InstallUpdateLegacy(s.targetLegacy)
|
||||
} else if !s.target.IsEmpty() {
|
||||
s.bridge.InstallUpdate(s.target)
|
||||
}
|
||||
}, s.targetLock)
|
||||
}()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user