diff --git a/v3/pkg/application/application.go b/v3/pkg/application/application.go index c2703dda..81aa23d5 100644 --- a/v3/pkg/application/application.go +++ b/v3/pkg/application/application.go @@ -130,9 +130,12 @@ func New(appOptions Options) *App { } result.plugins = NewPluginManager(appOptions.Plugins, srv) - err = result.plugins.Init() - if err != nil { - globalApplication.fatal("Fatal error in plugins initialisation: " + err.Error()) + errors := result.plugins.Init() + if len(errors) > 0 { + for _, err := range errors { + globalApplication.error("Error initialising plugin: " + err.Error()) + } + globalApplication.fatal("Fatal error in plugins initialisation") } err = result.bindings.AddPlugins(appOptions.Plugins) @@ -541,7 +544,12 @@ func (a *App) Run() error { return err } - a.plugins.Shutdown() + errors := a.plugins.Shutdown() + if len(errors) > 0 { + for _, err := range errors { + a.error("Error shutting down plugin: " + err.Error()) + } + } return nil } diff --git a/v3/pkg/application/plugins.go b/v3/pkg/application/plugins.go index 915c4ee7..e15cbac3 100644 --- a/v3/pkg/application/plugins.go +++ b/v3/pkg/application/plugins.go @@ -1,13 +1,17 @@ package application import ( + "github.com/pkg/errors" "github.com/wailsapp/wails/v3/internal/assetserver" ) +type PluginAPI interface { +} + type Plugin interface { Name() string - Init() error - Shutdown() + Init(api PluginAPI) error + Shutdown() error CallableByJS() []string InjectJS() string } @@ -26,13 +30,14 @@ func NewPluginManager(plugins map[string]Plugin, assetServer *assetserver.AssetS return result } -func (p *PluginManager) Init() error { +func (p *PluginManager) Init() []error { + + api := newPluginAPI() for _, plugin := range p.plugins { - err := plugin.Init() + err := plugin.Init(api) if err != nil { globalApplication.error("Plugin failed to initialise:", "plugin", plugin.Name(), "error", err.Error()) - p.Shutdown() - return err + return p.Shutdown() } p.initialisedPlugins = append(p.initialisedPlugins, plugin) injectJS := plugin.InjectJS() @@ -44,9 +49,15 @@ func (p *PluginManager) Init() error { return nil } -func (p *PluginManager) Shutdown() { +func (p *PluginManager) Shutdown() []error { + var errs []error for _, plugin := range p.initialisedPlugins { - plugin.Shutdown() + err := plugin.Shutdown() globalApplication.debug("Plugin shutdown: " + plugin.Name()) + if err != nil { + err = errors.Wrap(err, "Plugin failed to shutdown: "+plugin.Name()) + errs = append(errs, err) + } } + return errs } diff --git a/v3/pkg/application/plugins_api.go b/v3/pkg/application/plugins_api.go new file mode 100644 index 00000000..36d235cb --- /dev/null +++ b/v3/pkg/application/plugins_api.go @@ -0,0 +1,7 @@ +package application + +type pluginAPI struct{} + +func newPluginAPI() *pluginAPI { + return &pluginAPI{} +} diff --git a/v3/plugins/kvstore/kvstore.go b/v3/plugins/kvstore/kvstore.go index 50370ffb..c5df22ed 100644 --- a/v3/plugins/kvstore/kvstore.go +++ b/v3/plugins/kvstore/kvstore.go @@ -2,6 +2,7 @@ package kvstore import ( "encoding/json" + "github.com/pkg/errors" "github.com/wailsapp/wails/v3/pkg/application" "io" "os" @@ -35,13 +36,14 @@ func NewPlugin(config *Config) *KeyValueStore { } // Shutdown will save the store to disk if there are unsaved changes. -func (kvs *KeyValueStore) Shutdown() { +func (kvs *KeyValueStore) Shutdown() error { if kvs.unsaved { err := kvs.Save() if err != nil { - application.Get().Logger.Error("Error saving store: " + err.Error()) + return errors.Wrap(err, "Error saving store") } } + return nil } // Name returns the name of the plugin. diff --git a/v3/plugins/log/plugin.go b/v3/plugins/log/plugin.go index f9e180c3..1cb59b86 100644 --- a/v3/plugins/log/plugin.go +++ b/v3/plugins/log/plugin.go @@ -49,7 +49,7 @@ func NewPlugin() *Plugin { // Shutdown is called when the app is shutting down // You can use this to clean up any resources you have allocated -func (p *Plugin) Shutdown() {} +func (p *Plugin) Shutdown() error { return nil } // Name returns the name of the plugin. // You should use the go module format e.g. github.com/myuser/myplugin diff --git a/v3/plugins/oauth/plugin.go b/v3/plugins/oauth/plugin.go index d8ad1e5f..2f2a1dd8 100644 --- a/v3/plugins/oauth/plugin.go +++ b/v3/plugins/oauth/plugin.go @@ -26,6 +26,7 @@ type Plugin struct { config Config server *http.Server router *pat.Router + api application.PluginAPI } type Config struct { @@ -69,18 +70,19 @@ func NewPlugin(config Config) *Plugin { return result } -func (p *Plugin) Shutdown() { +func (p *Plugin) Shutdown() error { if p.server != nil { - p.server.Close() + return p.server.Close() } + return nil } func (p *Plugin) Name() string { return "github.com/wailsapp/wails/v3/plugins/oauth" } -func (p *Plugin) Init() error { - +func (p *Plugin) Init(api application.PluginAPI) error { + p.api = api store := sessions.NewCookieStore([]byte(p.config.SessionSecret)) store.MaxAge(p.config.MaxAge) store.Options.Path = "/" diff --git a/v3/plugins/oauth/plugin.js b/v3/plugins/oauth/plugin.js index 4ca97e97..9bdf307c 100644 --- a/v3/plugins/oauth/plugin.js +++ b/v3/plugins/oauth/plugin.js @@ -2,485 +2,486 @@ // https://www.fileformat.info/tool/hash.htm?text=auth.Github // 4111675027 +import wails from '@wailsapp/runtime'; function Amazon() { - return wails.CallByID(2331828509); + return wails.Call.ByID(2331828509); } function Apple() { - return wails.CallByID(3176757999); + return wails.Call.ByID(3176757999); } function Auth0() { - return wails.CallByID(2541844605); + return wails.Call.ByID(2541844605); } function AzureAD() { - return wails.CallByID(4136596197); + return wails.Call.ByID(4136596197); } function BattleNet() { - return wails.CallByID(1768856346); + return wails.Call.ByID(1768856346); } function Bitbucket() { - return wails.CallByID(526693694); + return wails.Call.ByID(526693694); } function Box() { - return wails.CallByID(2583659906); + return wails.Call.ByID(2583659906); } function Dailymotion() { - return wails.CallByID(1431387676); + return wails.Call.ByID(1431387676); } function Deezer() { - return wails.CallByID(828114094); + return wails.Call.ByID(828114094); } function DigitalOcean() { - return wails.CallByID(3019360447); + return wails.Call.ByID(3019360447); } function Discord() { - return wails.CallByID(655199039); + return wails.Call.ByID(655199039); } function Dropbox() { - return wails.CallByID(3446570357); + return wails.Call.ByID(3446570357); } function EveOnline() { - return wails.CallByID(1615270010); + return wails.Call.ByID(1615270010); } function Facebook() { - return wails.CallByID(825207297); + return wails.Call.ByID(825207297); } function Fitbit() { - return wails.CallByID(1290725671); + return wails.Call.ByID(1290725671); } function Gitea() { - return wails.CallByID(3921640321); + return wails.Call.ByID(3921640321); } function Github() { - return wails.CallByID(1424971906); + return wails.Call.ByID(1424971906); } function Gitlab() { - return wails.CallByID(387644474); + return wails.Call.ByID(387644474); } function Google() { - return wails.CallByID(1712198358); + return wails.Call.ByID(1712198358); } function GooglePlus() { - return wails.CallByID(2550604010); + return wails.Call.ByID(2550604010); } function Heroku() { - return wails.CallByID(3655952201); + return wails.Call.ByID(3655952201); } function Instagram() { - return wails.CallByID(65944971); + return wails.Call.ByID(65944971); } function Intercom() { - return wails.CallByID(10529210); + return wails.Call.ByID(10529210); } function Kakao() { - return wails.CallByID(3034570310); + return wails.Call.ByID(3034570310); } function LastFM() { - return wails.CallByID(1802166992); + return wails.Call.ByID(1802166992); } function Line() { - return wails.CallByID(2789106871); + return wails.Call.ByID(2789106871); } function LinkedIn() { - return wails.CallByID(1277552879); + return wails.Call.ByID(1277552879); } function LogoutAmazon() { - return wails.CallByID(469077327); + return wails.Call.ByID(469077327); } function LogoutApple() { - return wails.CallByID(3655868585); + return wails.Call.ByID(3655868585); } function LogoutAuth0() { - return wails.CallByID(18151695); + return wails.Call.ByID(18151695); } function LogoutAzureAD() { - return wails.CallByID(2138080511); + return wails.Call.ByID(2138080511); } function LogoutBattleNet() { - return wails.CallByID(4280940652); + return wails.Call.ByID(4280940652); } function LogoutBitbucket() { - return wails.CallByID(3756772960); + return wails.Call.ByID(3756772960); } function LogoutBox() { - return wails.CallByID(2810174732); + return wails.Call.ByID(2810174732); } function LogoutDailymotion() { - return wails.CallByID(2060789018); + return wails.Call.ByID(2060789018); } function LogoutDeezer() { - return wails.CallByID(1779336988); + return wails.Call.ByID(1779336988); } function LogoutDigitalOcean() { - return wails.CallByID(2745195285); + return wails.Call.ByID(2745195285); } function LogoutDiscord() { - return wails.CallByID(1756238441); + return wails.Call.ByID(1756238441); } function LogoutDropbox() { - return wails.CallByID(1276092991); + return wails.Call.ByID(1276092991); } function LogoutEveOnline() { - return wails.CallByID(3427696132); + return wails.Call.ByID(3427696132); } function LogoutFacebook() { - return wails.CallByID(3289650391); + return wails.Call.ByID(3289650391); } function LogoutFitbit() { - return wails.CallByID(4026910725); + return wails.Call.ByID(4026910725); } function LogoutGitea() { - return wails.CallByID(289654943); + return wails.Call.ByID(289654943); } function LogoutGithub() { - return wails.CallByID(1644797072); + return wails.Call.ByID(1644797072); } function LogoutGitlab() { - return wails.CallByID(654269224); + return wails.Call.ByID(654269224); } function LogoutGoogle() { - return wails.CallByID(4020864940); + return wails.Call.ByID(4020864940); } function LogoutGooglePlus() { - return wails.CallByID(3868989020); + return wails.Call.ByID(3868989020); } function LogoutHeroku() { - return wails.CallByID(2618955859); + return wails.Call.ByID(2618955859); } function LogoutInstagram() { - return wails.CallByID(931376085); + return wails.Call.ByID(931376085); } function LogoutIntercom() { - return wails.CallByID(4092924400); + return wails.Call.ByID(4092924400); } function LogoutKakao() { - return wails.CallByID(3794403964); + return wails.Call.ByID(3794403964); } function LogoutLastFM() { - return wails.CallByID(1376498158); + return wails.Call.ByID(1376498158); } function LogoutLine() { - return wails.CallByID(3582304913); + return wails.Call.ByID(3582304913); } function LogoutLinkedIn() { - return wails.CallByID(1607790273); + return wails.Call.ByID(1607790273); } function LogoutMastodon() { - return wails.CallByID(4210982224); + return wails.Call.ByID(4210982224); } function LogoutMeetup() { - return wails.CallByID(3715047585); + return wails.Call.ByID(3715047585); } function LogoutMicrosoftOnline() { - return wails.CallByID(97532862); + return wails.Call.ByID(97532862); } function LogoutNaver() { - return wails.CallByID(2633825507); + return wails.Call.ByID(2633825507); } function LogoutNextCloud() { - return wails.CallByID(3261782247); + return wails.Call.ByID(3261782247); } function LogoutOkta() { - return wails.CallByID(624232214); + return wails.Call.ByID(624232214); } function LogoutOnedrive() { - return wails.CallByID(814508603); + return wails.Call.ByID(814508603); } function LogoutOpenIDConnect() { - return wails.CallByID(1020114184); + return wails.Call.ByID(1020114184); } function LogoutPatreon() { - return wails.CallByID(202386648); + return wails.Call.ByID(202386648); } function LogoutPayPal() { - return wails.CallByID(1094363076); + return wails.Call.ByID(1094363076); } function LogoutSalesForce() { - return wails.CallByID(186208216); + return wails.Call.ByID(186208216); } function LogoutSeaTalk() { - return wails.CallByID(967155452); + return wails.Call.ByID(967155452); } function LogoutShopify() { - return wails.CallByID(710746663); + return wails.Call.ByID(710746663); } function LogoutSlack() { - return wails.CallByID(2829130917); + return wails.Call.ByID(2829130917); } function LogoutSoundCloud() { - return wails.CallByID(1958837967); + return wails.Call.ByID(1958837967); } function LogoutSpotify() { - return wails.CallByID(3505564851); + return wails.Call.ByID(3505564851); } function LogoutSteam() { - return wails.CallByID(1111934849); + return wails.Call.ByID(1111934849); } function LogoutStrava() { - return wails.CallByID(1393113524); + return wails.Call.ByID(1393113524); } function LogoutStripe() { - return wails.CallByID(2886428130); + return wails.Call.ByID(2886428130); } function LogoutTikTok() { - return wails.CallByID(3971249709); + return wails.Call.ByID(3971249709); } function LogoutTwitch() { - return wails.CallByID(88308904); + return wails.Call.ByID(88308904); } function LogoutTwitter() { - return wails.CallByID(1067400118); + return wails.Call.ByID(1067400118); } function LogoutTwitterV2() { - return wails.CallByID(2761439446); + return wails.Call.ByID(2761439446); } function LogoutTypetalk() { - return wails.CallByID(128226145); + return wails.Call.ByID(128226145); } function LogoutUber() { - return wails.CallByID(3429923567); + return wails.Call.ByID(3429923567); } function LogoutVK() { - return wails.CallByID(1951646996); + return wails.Call.ByID(1951646996); } function LogoutWeCom() { - return wails.CallByID(1686099456); + return wails.Call.ByID(1686099456); } function LogoutWepay() { - return wails.CallByID(1261265379); + return wails.Call.ByID(1261265379); } function LogoutXero() { - return wails.CallByID(2890165735); + return wails.Call.ByID(2890165735); } function LogoutYahoo() { - return wails.CallByID(2054451877); + return wails.Call.ByID(2054451877); } function LogoutYammer() { - return wails.CallByID(407239716); + return wails.Call.ByID(407239716); } function LogoutYandex() { - return wails.CallByID(2947524466); + return wails.Call.ByID(2947524466); } function LogoutZoom() { - return wails.CallByID(4146090020); + return wails.Call.ByID(4146090020); } function Mastodon() { - return wails.CallByID(3603981882); + return wails.Call.ByID(3603981882); } function Meetup() { - return wails.CallByID(1147762171); + return wails.Call.ByID(1147762171); } function MicrosoftOnline() { - return wails.CallByID(1805946880); + return wails.Call.ByID(1805946880); } function Naver() { - return wails.CallByID(749569909); + return wails.Call.ByID(749569909); } function NextCloud() { - return wails.CallByID(1924196249); + return wails.Call.ByID(1924196249); } function Okta() { - return wails.CallByID(412847760); + return wails.Call.ByID(412847760); } function Onedrive() { - return wails.CallByID(3973355685); + return wails.Call.ByID(3973355685); } function OpenIDConnect() { - return wails.CallByID(2729309874); + return wails.Call.ByID(2729309874); } function Patreon() { - return wails.CallByID(3723931538); + return wails.Call.ByID(3723931538); } function PayPal() { - return wails.CallByID(3284153782); + return wails.Call.ByID(3284153782); } function SalesForce() { - return wails.CallByID(1734014770); + return wails.Call.ByID(1734014770); } function SeaTalk() { - return wails.CallByID(3129463546); + return wails.Call.ByID(3129463546); } function Shopify() { - return wails.CallByID(1877652737); + return wails.Call.ByID(1877652737); } function Slack() { - return wails.CallByID(812719543); + return wails.Call.ByID(812719543); } function SoundCloud() { - return wails.CallByID(3726943661); + return wails.Call.ByID(3726943661); } function Spotify() { - return wails.CallByID(256059429); + return wails.Call.ByID(256059429); } function Steam() { - return wails.CallByID(4258843427); + return wails.Call.ByID(4258843427); } function Strava() { - return wails.CallByID(1874925690); + return wails.Call.ByID(1874925690); } function Stripe() { - return wails.CallByID(2661473260); + return wails.Call.ByID(2661473260); } function TikTok() { - return wails.CallByID(1284732707); + return wails.Call.ByID(1284732707); } function Twitch() { - return wails.CallByID(487656954); + return wails.Call.ByID(487656954); } function Twitter() { - return wails.CallByID(3389126356); + return wails.Call.ByID(3389126356); } function TwitterV2() { - return wails.CallByID(4048286460); + return wails.Call.ByID(4048286460); } function Typetalk() { - return wails.CallByID(1880294983); + return wails.Call.ByID(1880294983); } function Uber() { - return wails.CallByID(2810476945); + return wails.Call.ByID(2810476945); } function VK() { - return wails.CallByID(1043499094); + return wails.Call.ByID(1043499094); } function WeCom() { - return wails.CallByID(2495227034); + return wails.Call.ByID(2495227034); } function Wepay() { - return wails.CallByID(3921566885); + return wails.Call.ByID(3921566885); } function Xero() { - return wails.CallByID(1174147097); + return wails.Call.ByID(1174147097); } function Yahoo() { - return wails.CallByID(4227069139); + return wails.Call.ByID(4227069139); } function Yammer() { - return wails.CallByID(2053813786); + return wails.Call.ByID(2053813786); } function Yandex() { - return wails.CallByID(1095025512); + return wails.Call.ByID(1095025512); } function Zoom() { - return wails.CallByID(391053986); + return wails.Call.ByID(391053986); } diff --git a/v3/plugins/sqlite/plugin.go b/v3/plugins/sqlite/plugin.go index e9feadc1..0e2b2028 100644 --- a/v3/plugins/sqlite/plugin.go +++ b/v3/plugins/sqlite/plugin.go @@ -45,10 +45,11 @@ func NewPlugin(config *Config) *Plugin { // Shutdown is called when the app is shutting down // You can use this to clean up any resources you have allocated -func (p *Plugin) Shutdown() { +func (p *Plugin) Shutdown() error { if p.conn != nil { - p.conn.Close() + return p.conn.Close() } + return nil } // Name returns the name of the plugin. diff --git a/v3/plugins/start_at_login/plugin.go b/v3/plugins/start_at_login/plugin.go index 4f6a69d8..313a7a05 100644 --- a/v3/plugins/start_at_login/plugin.go +++ b/v3/plugins/start_at_login/plugin.go @@ -19,7 +19,7 @@ func NewPlugin(options Config) *Plugin { // Shutdown is called when the app is shutting down // You can use this to clean up any resources you have allocated -func (p *Plugin) Shutdown() {} +func (p *Plugin) Shutdown() error { return nil } // Name returns the name of the plugin. // You should use the go module format e.g. github.com/myuser/myplugin diff --git a/v3/plugins/start_at_login/plugin_linux.go b/v3/plugins/start_at_login/plugin_linux.go index 341ef07a..cd36172d 100644 --- a/v3/plugins/start_at_login/plugin_linux.go +++ b/v3/plugins/start_at_login/plugin_linux.go @@ -55,7 +55,7 @@ func (p *Plugin) IsStartAtLogin() (bool, error) { return result, nil } -func (p Plugin) autostartFile() string { +func (p *Plugin) autostartFile() string { homedir, _ := os.UserHomeDir() exe, _ := os.Executable() name := filepath.Base(exe) @@ -63,7 +63,7 @@ func (p Plugin) autostartFile() string { return strings.Join([]string{homedir, ".config", "autostart", autostartFile}, "/") } -func (p Plugin) createAutoStartFile(filename string, enabled bool) { +func (p *Plugin) createAutoStartFile(filename string, enabled bool) { file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0600) defer file.Close() @@ -73,7 +73,7 @@ func (p Plugin) createAutoStartFile(filename string, enabled bool) { } exe, _ := os.Executable() input := startTpl{ - Name: filepath.Base(exe) , + Name: filepath.Base(exe), Cmd: exe, Enabled: enabled, }