-
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#lang racket/base
|
||||
|
||||
(require "racket-webview-ffi.rkt"
|
||||
(require "racket-webview-qt.rkt"
|
||||
"utils.rkt"
|
||||
web-server/servlet
|
||||
web-server/servlet-env
|
||||
@@ -16,16 +16,17 @@
|
||||
|
||||
(provide webview-create
|
||||
webview-devtools
|
||||
webview-has-events?
|
||||
webview-event-count
|
||||
webview-get-event
|
||||
webview-set-event-callback!
|
||||
webview-clear-event-callback!
|
||||
webview-bind
|
||||
webview-close
|
||||
webview-run-js
|
||||
;webview-call-js
|
||||
webview-move
|
||||
webview-resize
|
||||
webview-bind!
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Web server
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define current-servlet-port 8083)
|
||||
(define current-window-nr 1)
|
||||
|
||||
@@ -36,10 +37,12 @@
|
||||
(file->string file)))
|
||||
|
||||
(define-struct wv
|
||||
(handle port window-nr
|
||||
[file-getter #:mutable]
|
||||
[boilerplate-js #:mutable]
|
||||
[webserver-thread #:mutable]))
|
||||
([handle #:mutable]
|
||||
port
|
||||
[window-nr #:mutable]
|
||||
[file-getter #:mutable]
|
||||
[boilerplate-js #:mutable]
|
||||
[webserver-thread #:mutable]))
|
||||
|
||||
(define (process-html wv-handle path out)
|
||||
(let ((html (file->string path))
|
||||
@@ -90,79 +93,65 @@
|
||||
#:stateless? #t
|
||||
;#:launch-browser #f
|
||||
#:servlet-regexp #rx""))))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Utilities
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define (util-parse-event evt)
|
||||
(let ((wv-d0 (with-input-from-string evt read-json)))
|
||||
wv-d0))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Webview functions
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define (webview-create file-getter #:boilerplate-js [bj (default-boilerplate-js)])
|
||||
(let* ((wv (rkt_create_webview))
|
||||
(h (make-wv wv current-servlet-port current-window-nr file-getter bj #f))
|
||||
(define (webview-create file-getter event-callback
|
||||
#:boilerplate-js [bj (default-boilerplate-js)]
|
||||
#:parent [p 0])
|
||||
(let* ((h (make-wv #f current-servlet-port -1 file-getter bj #f))
|
||||
(server (let ((s (start-web-server h)))
|
||||
(sleep 1)
|
||||
s))
|
||||
(event-processor (λ (wv evt)
|
||||
(event-callback h (util-parse-event evt))))
|
||||
(wv (rkt-webview-create p event-processor))
|
||||
(base-req (format "http://127.0.0.1:~a"
|
||||
(wv-port h)))
|
||||
)
|
||||
(set-wv-webserver-thread! h (start-web-server h))
|
||||
(rkt_webview_navigate (wv-handle h) base-req)
|
||||
(set-wv-handle! h wv)
|
||||
(set-wv-window-nr! h (rkt-wv-win wv))
|
||||
(set-wv-webserver-thread! h server)
|
||||
(rkt-webview-set-url! (wv-handle h) base-req)
|
||||
(set! current-servlet-port (+ current-servlet-port 1))
|
||||
(set! current-window-nr (+ current-window-nr 1))
|
||||
h))
|
||||
|
||||
(define (webview-devtools wv)
|
||||
(rkt_webview_devtools (wv-handle wv)))
|
||||
(rkt-webview-open-devtools (wv-handle wv)))
|
||||
|
||||
(define (webview-parse-event evt)
|
||||
(let ((wv-d0 (with-input-from-string evt read-json)))
|
||||
;(displayln wv-d0)
|
||||
(let ((wv-d1 (with-input-from-string (hash-ref wv-d0 'data) read-json)))
|
||||
;(displayln wv-d1)
|
||||
(let ((wv-d2 (with-input-from-string (car wv-d1) read-json)))
|
||||
;(displayln wv-d2)
|
||||
wv-d2))))
|
||||
(define (webview-move wv x y)
|
||||
(rkt-webview-move (wv-handle wv) x y))
|
||||
|
||||
(define (webview-set-event-callback! wv cb)
|
||||
(rkt_webview_set_event_callback! (wv-handle wv) (wv-window-nr wv)
|
||||
(λ (context data)
|
||||
(let ((e (webview-parse-event data)))
|
||||
(cb context e)))))
|
||||
(define (webview-resize wv w h)
|
||||
(rkt-webview-resize (wv-handle wv) w h))
|
||||
|
||||
(define (webview-clear-event-callback! wv)
|
||||
(rkt_webview_clear_event_callback! (wv-handle wv) (wv-window-nr wv)))
|
||||
|
||||
|
||||
(define (webview-get-event wv)
|
||||
(if (> (rkt_webview_pending_events (wv-handle wv)) 0)
|
||||
(let ((item (rkt_webview_get_event (wv-handle wv))))
|
||||
(let ((data (rkt_webview_item_data item)))
|
||||
(rkt_webview_destroy_item item)
|
||||
(let ((wv-d0 (with-input-from-string data read-json)))
|
||||
;(displayln wv-d0)
|
||||
(let ((wv-d1 (with-input-from-string (hash-ref wv-d0 'data) read-json)))
|
||||
;(displayln wv-d1)
|
||||
(let ((wv-d2 (with-input-from-string (car wv-d1) read-json)))
|
||||
;(displayln wv-d2)
|
||||
wv-d2
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
#f)
|
||||
(define (webview-close wv)
|
||||
(rkt-webview-close (wv-handle wv))
|
||||
(kill-thread (wv-webserver-thread wv))
|
||||
)
|
||||
|
||||
(define (webview-has-events? wv)
|
||||
(>= (rkt_webview_pending_events (wv-handle wv)) 1)
|
||||
)
|
||||
|
||||
(define (webview-event-count wv)
|
||||
(rkt_webview_pending_events (wv-handle wv)))
|
||||
|
||||
(define (webview-bind wv selector event)
|
||||
(define (webview-bind! wv selector event)
|
||||
(let ((sel (if (symbol? selector)
|
||||
(format "#~a" selector)
|
||||
selector))
|
||||
(evt (format "~a" event)))
|
||||
(rkt_webview_run_js (wv-handle wv)
|
||||
(format "window._web_wire_bind_evt_ids(~a, '~a', '~a')"
|
||||
(webview-run-js wv
|
||||
(format "window.rkt_bind_evt_ids(~a, '~a', '~a')"
|
||||
(wv-window-nr wv) sel evt))))
|
||||
|
||||
(define (webview-run-js wv js)
|
||||
(rkt_webview_run_js (wv-handle wv) js))
|
||||
(rkt-webview-run-js (wv-handle wv) js))
|
||||
|
||||
;(define (webview-call-js wv js)
|
||||
; (let ((result (rkt_webview_call_js (wv-handle wv) js)))
|
||||
@@ -184,13 +173,16 @@
|
||||
p)))
|
||||
|
||||
(define (test)
|
||||
(let ((h (webview-create file-getter)))
|
||||
(displayln (webview-has-events? h))
|
||||
(let* ((cb (λ (handle evt)
|
||||
(displayln evt)))
|
||||
(h (webview-create file-getter cb)))
|
||||
h))
|
||||
|
||||
|
||||
(while (not (webview-has-events? h))
|
||||
(displayln "Waiting...")
|
||||
(sleep 1))
|
||||
(let ((evt (webview-get-event h)))
|
||||
(when (string=? (hash-ref evt 'evt) "html-loaded")
|
||||
(webview-bind h "button" "click")))
|
||||
h))
|
||||
; (while (not (webview-has-events? h))
|
||||
; (displayln "Waiting...")
|
||||
; (sleep 1))
|
||||
; (let ((evt (webview-get-event h)))
|
||||
; (when (string=? (hash-ref evt 'evt) "html-loaded")
|
||||
; (webview-bind h "button" "click")))
|
||||
; h))
|
||||
Reference in New Issue
Block a user