diff --git a/v3/pkg/application/application.go b/v3/pkg/application/application.go index 00e3e3f2..6ff616f2 100644 --- a/v3/pkg/application/application.go +++ b/v3/pkg/application/application.go @@ -59,7 +59,7 @@ func New(appOptions Options) *App { Middleware: assetserver.Middleware(appOptions.Assets.Middleware), } - srv, err := assetserver.NewAssetServer(opts, false, result.Logger, wailsruntime.RuntimeAssetsBundle, result.isDebugMode) + srv, err := assetserver.NewAssetServer(opts, false, result.Logger, wailsruntime.RuntimeAssetsBundle, result.isDebugMode, NewMessageProcessor()) if err != nil { result.fatal(err.Error()) } @@ -78,7 +78,6 @@ func New(appOptions Options) *App { return flags } - srv.UseRuntimeHandler(NewMessageProcessor()) result.assets = srv result.bindings, err = NewBindings(appOptions.Bind) diff --git a/v3/pkg/application/webview_window_windows.go b/v3/pkg/application/webview_window_windows.go index 9d6522f2..a0839f9d 100644 --- a/v3/pkg/application/webview_window_windows.go +++ b/v3/pkg/application/webview_window_windows.go @@ -1314,7 +1314,7 @@ func (w *windowsWebviewWindow) processRequest(req *edge.ICoreWebView2WebResource uri, _ := req.GetUri() reqUri, err := url.ParseRequestURI(uri) if err != nil { - globalApplication.error("Unable to parse request uri %s: %s", uri, err) + globalApplication.error("Unable to parse request uri", "uri", uri, "error", err) return } @@ -1337,7 +1337,7 @@ func (w *windowsWebviewWindow) processRequest(req *edge.ICoreWebView2WebResource env := w.chromium.Environment() response, err := env.CreateWebResourceResponse(rw.Body.Bytes(), rw.Code, http.StatusText(rw.Code), strings.Join(headers, "\n")) if err != nil { - globalApplication.error("CreateWebResourceResponse Error: %s", err) + globalApplication.error("CreateWebResourceResponse Error: " + err.Error()) return } defer response.Release() @@ -1345,7 +1345,7 @@ func (w *windowsWebviewWindow) processRequest(req *edge.ICoreWebView2WebResource // Send response back err = args.PutResponse(response) if err != nil { - globalApplication.error("PutResponse Error: %s", err) + globalApplication.error("PutResponse Error: " + err.Error()) return } } @@ -1358,7 +1358,7 @@ func (w *windowsWebviewWindow) setupChromium() { webview2version, err := webviewloader.GetAvailableCoreWebView2BrowserVersionString(opts.WebviewBrowserPath) if err != nil { - globalApplication.error("Error getting WebView2 version: %s", err) + globalApplication.error("Error getting WebView2 version: " + err.Error()) return } globalApplication.capabilities = capabilities.NewCapabilities(webview2version) @@ -1451,7 +1451,7 @@ func (w *windowsWebviewWindow) setupChromium() { // parse the url parsedURL, err := url.Parse(w.parent.options.URL) if err != nil { - globalApplication.fatal("Error parsing URL: %s", err) + globalApplication.fatal("Error parsing URL: " + err.Error()) } if parsedURL.Scheme == "" { startURL = path.Join(startURL, w.parent.options.URL) diff --git a/v3/pkg/assetserver/assethandler.go b/v3/pkg/assetserver/assethandler.go index 1bca1bd5..42ca815c 100644 --- a/v3/pkg/assetserver/assethandler.go +++ b/v3/pkg/assetserver/assethandler.go @@ -7,17 +7,13 @@ import ( "fmt" "io" iofs "io/fs" + "log/slog" "net/http" "os" "path" "strings" ) -type Logger interface { - Debug(message string, args ...interface{}) - Error(message string, args ...interface{}) -} - //go:embed defaultindex.html var defaultHTML []byte @@ -29,12 +25,12 @@ type assetHandler struct { fs iofs.FS handler http.Handler - logger Logger + logger *slog.Logger retryMissingFiles bool } -func NewAssetHandler(options *Options, log Logger) (http.Handler, error) { +func NewAssetHandler(options *Options, log *slog.Logger) (http.Handler, error) { vfs := options.Assets if vfs != nil { diff --git a/v3/pkg/assetserver/assethandler_external.go b/v3/pkg/assetserver/assethandler_external.go index 56d286bc..44bc79e5 100644 --- a/v3/pkg/assetserver/assethandler_external.go +++ b/v3/pkg/assetserver/assethandler_external.go @@ -6,12 +6,13 @@ package assetserver import ( "errors" "fmt" + "log/slog" "net/http" "net/http/httputil" "net/url" ) -func NewExternalAssetsHandler(logger Logger, options Options, url *url.URL) http.Handler { +func NewExternalAssetsHandler(logger *slog.Logger, options Options, url *url.URL) http.Handler { baseHandler := options.Handler errSkipProxy := fmt.Errorf("skip proxying") diff --git a/v3/pkg/assetserver/assetserver.go b/v3/pkg/assetserver/assetserver.go index 962f7f55..15088450 100644 --- a/v3/pkg/assetserver/assetserver.go +++ b/v3/pkg/assetserver/assetserver.go @@ -56,22 +56,23 @@ type AssetServer struct { assetServerWebView } -func NewAssetServer(options *Options, servingFromDisk bool, logger *slog.Logger, runtime RuntimeAssets, debug bool) (*AssetServer, error) { +func NewAssetServer(options *Options, servingFromDisk bool, logger *slog.Logger, runtime RuntimeAssets, debug bool, runtimeHandler RuntimeHandler) (*AssetServer, error) { handler, err := NewAssetHandler(options, logger) if err != nil { return nil, err } - return NewAssetServerWithHandler(handler, servingFromDisk, logger, runtime, debug) + return NewAssetServerWithHandler(handler, servingFromDisk, logger, runtime, debug, runtimeHandler) } -func NewAssetServerWithHandler(handler http.Handler, servingFromDisk bool, logger *slog.Logger, runtime RuntimeAssets, debug bool) (*AssetServer, error) { +func NewAssetServerWithHandler(handler http.Handler, servingFromDisk bool, logger *slog.Logger, runtime RuntimeAssets, debug bool, runtimeHandler RuntimeHandler) (*AssetServer, error) { var buffer bytes.Buffer buffer.Write(runtime.RuntimeDesktopJS()) result := &AssetServer{ - handler: handler, - runtimeJS: buffer.Bytes(), + handler: handler, + runtimeJS: buffer.Bytes(), + runtimeHandler: runtimeHandler, // Check if we have been given a directory to serve assets from. // If so, this means we are in dev mode and are serving assets off disk. @@ -86,10 +87,6 @@ func NewAssetServerWithHandler(handler http.Handler, servingFromDisk bool, logge return result, nil } -func (d *AssetServer) UseRuntimeHandler(handler RuntimeHandler) { - d.runtimeHandler = handler -} - func (d *AssetServer) AddPluginScript(pluginName string, script string) { if d.pluginScripts == nil { d.pluginScripts = make(map[string]string) @@ -156,11 +153,7 @@ func (d *AssetServer) ServeHTTP(rw http.ResponseWriter, req *http.Request) { d.writeBlob(rw, path, data) case runtimePath: - if d.runtimeHandler != nil { - d.runtimeHandler.HandleRuntimeCall(rw, req) - } else { - d.handler.ServeHTTP(rw, req) - } + d.runtimeHandler.HandleRuntimeCall(rw, req) case ipcJSPath: content := d.runtime.DesktopIPC() diff --git a/v3/pkg/assetserver/assetserver_dev.go b/v3/pkg/assetserver/assetserver_dev.go index 5e03386d..3326bfb8 100644 --- a/v3/pkg/assetserver/assetserver_dev.go +++ b/v3/pkg/assetserver/assetserver_dev.go @@ -13,8 +13,8 @@ The assetserver for the dev mode. Depending on the UserAgent it injects a websocket based IPC script into `index.html` or the default desktop IPC. The default desktop IPC is injected when the webview accesses the devserver. */ -func NewDevAssetServer(handler http.Handler, servingFromDisk bool, logger *slog.Logger, runtime RuntimeAssets) (*AssetServer, error) { - result, err := NewAssetServerWithHandler(handler, servingFromDisk, logger, runtime, true) +func NewDevAssetServer(handler http.Handler, servingFromDisk bool, logger *slog.Logger, runtime RuntimeAssets, runtimeHandler RuntimeHandler) (*AssetServer, error) { + result, err := NewAssetServerWithHandler(handler, servingFromDisk, logger, runtime, true, runtimeHandler) if err != nil { return nil, err }