5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 06:01:52 +08:00

[linux] 404 handling

This commit is contained in:
Lea Anthony 2022-01-26 14:01:23 +11:00
parent 5c24f8bf83
commit 7ede3ed08a
No known key found for this signature in database
GPG Key ID: 33DAF7BB90A58405

View File

@ -16,7 +16,7 @@ static inline void processDispatchID(gpointer id) {
} }
static void gtkDispatch(int 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 ( import (
"context" "context"
"encoding/json" "encoding/json"
"fmt"
"log" "log"
"os" "os"
"strconv" "strconv"
@ -304,7 +305,7 @@ func callDispatchedMethod(cid C.int) {
id := int(cid) id := int(cid)
fn := dispatchCallbacks[id] fn := dispatchCallbacks[id]
if fn != nil { if fn != nil {
go fn() fn()
dispatchCallbackLock.Lock() dispatchCallbackLock.Lock()
delete(dispatchCallbacks, id) delete(dispatchCallbacks, id)
dispatchCallbackLock.Unlock() dispatchCallbackLock.Unlock()
@ -342,11 +343,26 @@ func (f *Frontend) processRequest(request unsafe.Pointer) {
// Load file from asset store // Load file from asset store
content, mimeType, err := f.assets.Load(file) content, mimeType, err := f.assets.Load(file)
if err != nil {
return
}
// TODO How to return 404/500 errors to webkit? // 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)) cContent := C.CString(string(content))
defer C.free(unsafe.Pointer(cContent)) defer C.free(unsafe.Pointer(cContent))