#lang racket (require racket/gui "gui.rkt" "tray.rkt" simple-ini/class racket-audio racket-webview racket/runtime-path "utils.rkt" net/uri-codec ) (provide run) (define-runtime-path rkt-gui-dir "gui") (define log-file (build-path (find-system-path 'cache-dir) ".rktplayer.log")) (sl-log-to-file log-file) ;(sl-log-to-display) (define (my-file-getter url) (dbg-rktplayer "my-file-getter - url = ~a" url) (when (string-prefix? url "/") (set! url (substring url 1))) (if (string-prefix? url "get-image") (let* ((str (uri-decode url)) (idx (string-find str "?"))) (set! str (substring str (+ idx 1))) (set! idx (string-find str "&")) (set! str (substring str 0 idx)) (dbg-rktplayer "returning file ~a" str) (build-path str) ) (build-path rkt-gui-dir url) ) ) (define rktplayer-window #f) (define rktplayer-tray #f) (define (close-off) (send rktplayer-tray close) (send rktplayer-window close) (exit) ) (define-syntax ignore (syntax-rules () ((_ body) #t))) (define (run . no-exit) (let* ((ini (new ini% [file 'rktplayer])) (context (new wv-context% [base-path rkt-gui-dir] [ini ini] [file-getter my-file-getter] )) ) (let* ((window (new rktplayer% [wv-context context] [log-file log-file])) (tray (new rktplayer-tray% [rktplayer-gui window])) ) (set! rktplayer-window window) (set! rktplayer-tray tray) (ignore (thread (λ () (sleep 5) (let ((prg (string-append "let f_evt_info = window.rkt_event_info;\n" "window.rkt_event_info = function(e, id, evt) {\n" " if (evt.dataTransfer) {\n" " for(const item of evt.dataTransfer.items) {\n" " if (item.kind == 'file') {\n" " console.log(item.getAsFile());\n" " }\n" " }\n" " }\n" " return f_evt_info(e, id, evt);\n" "}; return 42;"))) #|(js (let* ((f_evt_info window.rkt_event_info)) (send console log "Setting new window.rkt_event_info") (set! window.rkt_event_info (λ (e id evt) (if evt.dataTransfer (let* ((items evt.dataTransfer.items) (fitems (send items filter (λ (item) (return (== item.kind "file"))))) ) (send fitems forEach (λ (item) (console.log item))) ) 42) (return (f_evt_info e id evt)))) (return 42)))))|# (displayln prg) (displayln (send window call-js prg))))) ) (when (or (null? no-exit) (not (eq? (car no-exit) #t))) (webview-wait-for-quit) (send rktplayer-tray close) (webview-exit) (exit)) ) ) ) ;(run)