mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-06 10:31:34 -08:00
46 lines
1.3 KiB
Common Lisp
46 lines
1.3 KiB
Common Lisp
;;; trivial QML auto reload during development for mobile
|
|
|
|
(in-package :qml)
|
|
|
|
(defun remote-ip ()
|
|
(terpri *query-io*)
|
|
(princ "Please enter WiFi IP of desktop computer (hit RET to skip): "
|
|
*query-io*)
|
|
(let ((ip (read-line *query-io*)))
|
|
(unless (x:empty-string ip)
|
|
(format nil "http://~A:8080/" ip))))
|
|
|
|
(defvar *remote-ip* #+interpreter nil
|
|
#-interpreter #.(remote-ip))
|
|
|
|
(defun load* (file)
|
|
(load (make-string-input-stream (curl (x:cc *remote-ip* file)))))
|
|
|
|
(defun qml:view-status-changed (status)
|
|
(when (= 1 status)
|
|
(load* "lisp/qml-reload/on-reloaded.lisp")))
|
|
|
|
(let ((secs 0)
|
|
(ini t))
|
|
(defun auto-reload-qml ()
|
|
(multiple-value-bind (curr error)
|
|
(ignore-errors
|
|
(parse-integer
|
|
(curl (x:cc *remote-ip* "cgi-bin/qml-last-modified.py"))))
|
|
(when error
|
|
(qlog :auto-reload-qml :error error))
|
|
(when (and curr (/= secs curr))
|
|
(when (plusp secs)
|
|
(if ini
|
|
(progn
|
|
(setf ini nil)
|
|
(qset *engine* |baseUrl| *remote-ip*)
|
|
(let ((src (qget *quick-view* |source|)))
|
|
(qset *quick-view* |source| (subseq src #.(length "qrc:///")))))
|
|
(qml:reload)))
|
|
(setf secs curr)))
|
|
(qsingle-shot 500 'auto-reload-qml)))
|
|
|
|
(export
|
|
(list 'load*
|
|
'auto-reload-qml))
|