diff --git a/internal/app/base/base.go b/internal/app/base/base.go index 17a1bb34..3d91191e 100644 --- a/internal/app/base/base.go +++ b/internal/app/base/base.go @@ -77,6 +77,8 @@ type Base struct { usage string // the app's usage description command string // the command used to launch the app (either the exe path or the launcher path) restart bool // whether the app is currently set to restart + + teardown []func() error // actions to perform when app is exiting } func New( // nolint[funlen] @@ -269,6 +271,11 @@ func (b *Base) SetToRestart() { b.restart = true } +// AddTeardownAction adds an action to perform during app teardown. +func (b *Base) AddTeardownAction(fn func() error) { + b.teardown = append(b.teardown, fn) +} + func (b *Base) run(appMainLoop func(*Base, *cli.Context) error) cli.ActionFunc { // nolint[funlen] return func(c *cli.Context) error { defer b.CrashHandler.HandlePanic() @@ -316,14 +323,24 @@ func (b *Base) run(appMainLoop func(*Base, *cli.Context) error) cli.ActionFunc { return err } - if b.restart { - return b.restartApp(false) + if err := b.doTeardown(); err != nil { + return err } - if err := b.Versioner.RemoveOldVersions(); err != nil { - return err + if b.restart { + return b.restartApp(false) } return nil } } + +func (b *Base) doTeardown() error { + for _, action := range b.teardown { + if err := action(); err != nil { + return err + } + } + + return nil +} diff --git a/internal/app/bridge/bridge.go b/internal/app/bridge/bridge.go index 87762678..00145724 100644 --- a/internal/app/bridge/bridge.go +++ b/internal/app/bridge/bridge.go @@ -108,6 +108,9 @@ func run(b *base.Base, c *cli.Context) error { // nolint[funlen] // Bridge supports no-window option which we should use for autostart. b.Autostart.Exec = append(b.Autostart.Exec, "--no-window") + // We want to remove old versions if the app exits successfully. + b.AddTeardownAction(b.Versioner.RemoveOldVersions) + f := frontend.New( constants.Version, constants.BuildVersion, diff --git a/internal/app/ie/ie.go b/internal/app/ie/ie.go index 9d38fd57..7f13e576 100644 --- a/internal/app/ie/ie.go +++ b/internal/app/ie/ie.go @@ -54,6 +54,9 @@ func run(b *base.Base, c *cli.Context) error { frontendMode = "qt" } + // We want to remove old versions if the app exits successfully. + b.AddTeardownAction(b.Versioner.RemoveOldVersions) + f := frontend.NewImportExport( constants.Version, constants.BuildVersion,