mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-07 11:01:01 -08:00
add new example 'advanced-qml-auto-reload' (single file reload); revisions
This commit is contained in:
parent
5f3b251a69
commit
1473ec8271
28 changed files with 1144 additions and 2 deletions
|
|
@ -0,0 +1,66 @@
|
|||
;;; trivial QML auto reload during development for mobile
|
||||
|
||||
(in-package :qml)
|
||||
|
||||
#+(or android ios)
|
||||
(defvar *reload-all* nil)
|
||||
(defvar *edited-file* nil)
|
||||
|
||||
#+(or android ios)
|
||||
(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))))
|
||||
|
||||
#+(or android ios)
|
||||
(defvar *remote-ip* #+interpreter nil
|
||||
#-interpreter #.(remote-ip))
|
||||
|
||||
#+(or android ios)
|
||||
(defun qml:view-status-changed (status)
|
||||
(when (and (= 1 status)
|
||||
(reload-main-p))
|
||||
(load (make-string-input-stream
|
||||
(funcall (%sym 'curl :qml)
|
||||
(x:cc *remote-ip* "lisp/qml-reload/on-reloaded.lisp"))))))
|
||||
|
||||
#+(or android ios)
|
||||
(defun reload-main-p ()
|
||||
(or *reload-all*
|
||||
(string= "main.qml" *edited-file*)))
|
||||
|
||||
#+(or android ios)
|
||||
(let ((load t)
|
||||
(secs 0)
|
||||
(ini t))
|
||||
(defun auto-reload-qml ()
|
||||
(when load
|
||||
(setf load nil)
|
||||
(require :ecl-curl)
|
||||
(load "curl"))
|
||||
(let ((curr/file (x:split (funcall (%sym 'curl :qml)
|
||||
(x:cc *remote-ip* "cgi-bin/qml-last-modified.py"))
|
||||
#.(coerce (list #\Return #\Newline) 'string))))
|
||||
(when (= 2 (length curr/file))
|
||||
(destructuring-bind (curr file)
|
||||
curr/file
|
||||
(setf curr (parse-integer curr)
|
||||
*edited-file* (string-right-trim '(#\Return #\Newline) file))
|
||||
(when (/= secs curr)
|
||||
(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:///")))))
|
||||
(if (reload-main-p)
|
||||
(qml:reload)
|
||||
(qjs |reload| *edited-file*)))
|
||||
(setf secs curr)))))
|
||||
(qsingle-shot 250 'auto-reload-qml)))
|
||||
|
||||
#+(or android ios)
|
||||
(export 'auto-reload-qml)
|
||||
Loading…
Add table
Add a link
Reference in a new issue