From c383a61036d2f316310b27595295a1c168277f70 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 16 Aug 2021 21:35:25 +1000 Subject: [PATCH] [windows-x] Support webview2 runtime checker on startup --- v2/internal/appng/app.go | 9 ++++++++- v2/internal/appng/app_default.go | 12 ++++++++++++ v2/internal/appng/app_windows.go | 19 +++++++++++++++++++ .../windows/wv2runtime/wv2runtime.go | 7 ++++--- 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 v2/internal/appng/app_default.go diff --git a/v2/internal/appng/app.go b/v2/internal/appng/app.go index b9e310c1..a8afdbb3 100644 --- a/v2/internal/appng/app.go +++ b/v2/internal/appng/app.go @@ -40,6 +40,7 @@ func (a *App) Run() error { // CreateApp creates the app! func CreateApp(appoptions *options.App) (*App, error) { + var err error ctx := context.Background() @@ -50,12 +51,18 @@ func CreateApp(appoptions *options.App) (*App, error) { myLogger := logger.New(appoptions.Logger) myLogger.SetLogLevel(appoptions.LogLevel) + // Preflight Checks + err = PreflightChecks(appoptions, myLogger) + if err != nil { + return nil, err + } + // Create the menu manager menuManager := menumanager.NewManager() // Process the application menu appMenu := options.GetApplicationMenu(appoptions) - err := menuManager.SetApplicationMenu(appMenu) + err = menuManager.SetApplicationMenu(appMenu) if err != nil { return nil, err } diff --git a/v2/internal/appng/app_default.go b/v2/internal/appng/app_default.go new file mode 100644 index 00000000..f59541d7 --- /dev/null +++ b/v2/internal/appng/app_default.go @@ -0,0 +1,12 @@ +// +build !windows + +package appng + +import ( + "github.com/wailsapp/wails/v2/internal/logger" + "github.com/wailsapp/wails/v2/pkg/options" +) + +func PreflightChecks(_ *options.App, _ *logger.Logger) error { + return nil +} diff --git a/v2/internal/appng/app_windows.go b/v2/internal/appng/app_windows.go index 80fa68af..a6978a7b 100644 --- a/v2/internal/appng/app_windows.go +++ b/v2/internal/appng/app_windows.go @@ -2,6 +2,7 @@ package appng import ( "github.com/wailsapp/wails/v2/internal/binding" + "github.com/wailsapp/wails/v2/internal/ffenestri/windows/wv2runtime" "github.com/wailsapp/wails/v2/internal/frontend" "github.com/wailsapp/wails/v2/internal/frontend/windows" "github.com/wailsapp/wails/v2/internal/logger" @@ -11,3 +12,21 @@ import ( func NewFrontend(appoptions *options.App, myLogger *logger.Logger, bindings *binding.Bindings, dispatcher frontend.Dispatcher) frontend.Frontend { return windows.NewFrontend(appoptions, myLogger, bindings, dispatcher) } + +func PreflightChecks(options *options.App, logger *logger.Logger) error { + + _ = options + + // Process the webview2 runtime situation. We can pass a strategy in via the `webview2` flag for `wails build`. + // This will determine how wv2runtime.Process will handle a lack of valid runtime. + installedVersion, err := wv2runtime.Process() + if installedVersion != nil { + logger.Debug("WebView2 Runtime installed: Name: '%s' Version:'%s' Location:'%s'. Minimum version required: %s.", + installedVersion.Name, installedVersion.Version, installedVersion.Location, wv2runtime.MinimumRuntimeVersion) + } + if err != nil { + return err + } + + return nil +} diff --git a/v2/internal/ffenestri/windows/wv2runtime/wv2runtime.go b/v2/internal/ffenestri/windows/wv2runtime/wv2runtime.go index 992993a4..1805e82c 100644 --- a/v2/internal/ffenestri/windows/wv2runtime/wv2runtime.go +++ b/v2/internal/ffenestri/windows/wv2runtime/wv2runtime.go @@ -1,6 +1,7 @@ package wv2runtime import ( + "github.com/jchv/go-webview2/webviewloader" "github.com/leaanthony/webview2runtime" ) @@ -19,11 +20,11 @@ func Process() (*webview2runtime.Info, error) { installedVersion := webview2runtime.GetInstalledVersion() if installedVersion != nil { installStatus = installed - updateRequired, err := installedVersion.IsOlderThan(MinimumRuntimeVersion) + compareResult, err := webviewloader.CompareBrowserVersions(installedVersion.Version, MinimumRuntimeVersion) if err != nil { - _ = webview2runtime.Error(err.Error(), "Error") - return installedVersion, err + return nil, err } + updateRequired := compareResult == -1 // Installed and does not require updating if !updateRequired { return installedVersion, nil