mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-08-24 10:13:41 -05:00
I copied all files except dot files (.github and .gitignore), the _examples folder, and go.mod/go.sum. At some point we may want to copy the files back to the gocui repo when other clients (e.g. lazydocker) want to use the newer versions of them.
103 lines
2.5 KiB
Go
103 lines
2.5 KiB
Go
package helpers
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/gocui"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
"github.com/jesseduffield/lazygit/pkg/updates"
|
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
|
)
|
|
|
|
type UpdateHelper struct {
|
|
c *HelperCommon
|
|
updater *updates.Updater
|
|
}
|
|
|
|
func NewUpdateHelper(c *HelperCommon, updater *updates.Updater) *UpdateHelper {
|
|
return &UpdateHelper{
|
|
c: c,
|
|
updater: updater,
|
|
}
|
|
}
|
|
|
|
func (self *UpdateHelper) CheckForUpdateInBackground() {
|
|
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)
|
|
}
|
|
|
|
func (self *UpdateHelper) CheckForUpdateInForeground() error {
|
|
return self.c.WithWaitingStatus(self.c.Tr.CheckingForUpdates, func(gocui.Task) error {
|
|
self.updater.CheckForNewUpdate(func(newVersion string, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if newVersion == "" {
|
|
return errors.New(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(gocui.Task) 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 errors.New(errMessage)
|
|
}
|
|
self.c.Alert(self.c.Tr.UpdateCompletedTitle, self.c.Tr.UpdateCompleted)
|
|
return nil
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
func (self *UpdateHelper) showUpdatePrompt(newVersion string) error {
|
|
message := utils.ResolvePlaceholderString(
|
|
self.c.Tr.UpdateAvailable, map[string]string{
|
|
"newVersion": newVersion,
|
|
},
|
|
)
|
|
|
|
self.c.Confirm(types.ConfirmOpts{
|
|
Title: self.c.Tr.UpdateAvailableTitle,
|
|
Prompt: message,
|
|
HandleConfirm: func() error {
|
|
self.startUpdating(newVersion)
|
|
return nil
|
|
},
|
|
})
|
|
|
|
return nil
|
|
}
|