From 7ede3ed08a0d2a2ae40b80a4cb04bbae80b6920a Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 26 Jan 2022 14:01:23 +1100 Subject: [PATCH] [linux] 404 handling --- .../frontend/desktop/linux/frontend.go | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/v2/internal/frontend/desktop/linux/frontend.go b/v2/internal/frontend/desktop/linux/frontend.go index abcfcd447..1ad3436b7 100644 --- a/v2/internal/frontend/desktop/linux/frontend.go +++ b/v2/internal/frontend/desktop/linux/frontend.go @@ -16,7 +16,7 @@ static inline void processDispatchID(gpointer id) { } static void gtkDispatch(int id) { - gdk_threads_add_idle((GSourceFunc)processDispatchID, GINT_TO_POINTER(id)); + g_idle_add((GSourceFunc)processDispatchID, GINT_TO_POINTER(id)); } */ @@ -24,6 +24,7 @@ import "C" import ( "context" "encoding/json" + "fmt" "log" "os" "strconv" @@ -304,7 +305,7 @@ func callDispatchedMethod(cid C.int) { id := int(cid) fn := dispatchCallbacks[id] if fn != nil { - go fn() + fn() dispatchCallbackLock.Lock() delete(dispatchCallbacks, id) dispatchCallbackLock.Unlock() @@ -342,11 +343,26 @@ func (f *Frontend) processRequest(request unsafe.Pointer) { // Load file from asset store content, mimeType, err := f.assets.Load(file) - if err != nil { - return - } // TODO How to return 404/500 errors to webkit? + if err != nil { + var gerr *C.GError + if os.IsNotExist(err) { + message := C.CString("not found") + defer C.free(unsafe.Pointer(message)) + gerr = C.g_error_new_literal(C.G_FILE_ERROR_NOENT, C.int(404), message) + C.webkit_uri_scheme_request_finish_error(req, gerr) + } else { + err = fmt.Errorf("Error processing request %s: %w", uri, err) + f.logger.Error(err.Error()) + message := C.CString("internal server error") + defer C.free(unsafe.Pointer(message)) + gerr = C.g_error_new_literal(C.G_FILE_ERROR_NOENT, C.int(500), message) + C.webkit_uri_scheme_request_finish_error(req, gerr) + } + C.g_error_free(gerr) + return + } cContent := C.CString(string(content)) defer C.free(unsafe.Pointer(cContent))