mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-16 11:37:01 +02:00
99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
|
package helpers
|
||
|
|
||
|
import (
|
||
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||
|
"github.com/jesseduffield/lazygit/pkg/updates"
|
||
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
||
|
)
|
||
|
|
||
|
type UpdateHelper struct {
|
||
|
c *types.HelperCommon
|
||
|
updater *updates.Updater
|
||
|
}
|
||
|
|
||
|
func NewUpdateHelper(c *types.HelperCommon, updater *updates.Updater) *UpdateHelper {
|
||
|
return &UpdateHelper{
|
||
|
c: c,
|
||
|
updater: updater,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (self *UpdateHelper) CheckForUpdateInBackground() error {
|
||
|
self.updater.CheckForNewUpdate(func(newVersion string, err error) error {
|
||
|
if err != nil {
|
||
|
// ignoring the error for now so that I'm not annoying users
|
||
|
self.c.Log.Error(err.Error())
|
||
|
return nil
|
||
|
}
|
||
|
if newVersion == "" {
|
||
|
return nil
|
||
|
}
|
||
|
if self.c.UserConfig.Update.Method == "background" {
|
||
|
self.startUpdating(newVersion)
|
||
|
return nil
|
||
|
}
|
||
|
return self.showUpdatePrompt(newVersion)
|
||
|
}, false)
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (self *UpdateHelper) CheckForUpdateInForeground() error {
|
||
|
return self.c.WithWaitingStatus(self.c.Tr.CheckingForUpdates, func() error {
|
||
|
self.updater.CheckForNewUpdate(func(newVersion string, err error) error {
|
||
|
if err != nil {
|
||
|
return self.c.Error(err)
|
||
|
}
|
||
|
if newVersion == "" {
|
||
|
return self.c.ErrorMsg(self.c.Tr.FailedToRetrieveLatestVersionErr)
|
||
|
}
|
||
|
return self.showUpdatePrompt(newVersion)
|
||
|
}, true)
|
||
|
|
||
|
return nil
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func (self *UpdateHelper) startUpdating(newVersion string) {
|
||
|
_ = self.c.WithWaitingStatus(self.c.Tr.UpdateInProgressWaitingStatus, func() error {
|
||
|
self.c.State().SetUpdating(true)
|
||
|
err := self.updater.Update(newVersion)
|
||
|
return self.onUpdateFinish(err)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func (self *UpdateHelper) onUpdateFinish(err error) error {
|
||
|
self.c.State().SetUpdating(false)
|
||
|
self.c.OnUIThread(func() error {
|
||
|
self.c.SetViewContent(self.c.Views().AppStatus, "")
|
||
|
if err != nil {
|
||
|
errMessage := utils.ResolvePlaceholderString(
|
||
|
self.c.Tr.UpdateFailedErr, map[string]string{
|
||
|
"errMessage": err.Error(),
|
||
|
},
|
||
|
)
|
||
|
return self.c.ErrorMsg(errMessage)
|
||
|
}
|
||
|
return self.c.Alert(self.c.Tr.UpdateCompletedTitle, self.c.Tr.UpdateCompleted)
|
||
|
})
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (self *UpdateHelper) showUpdatePrompt(newVersion string) error {
|
||
|
message := utils.ResolvePlaceholderString(
|
||
|
self.c.Tr.UpdateAvailable, map[string]string{
|
||
|
"newVersion": newVersion,
|
||
|
},
|
||
|
)
|
||
|
|
||
|
return self.c.Confirm(types.ConfirmOpts{
|
||
|
Title: self.c.Tr.UpdateAvailableTitle,
|
||
|
Prompt: message,
|
||
|
HandleConfirm: func() error {
|
||
|
self.startUpdating(newVersion)
|
||
|
return nil
|
||
|
},
|
||
|
})
|
||
|
}
|