mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-06 02:30:38 -08:00
example 'meshtastic': simplify uint32 var exchange Lisp <-> QML
This commit is contained in:
parent
10677a19c9
commit
5d29353718
9 changed files with 33 additions and 34 deletions
|
|
@ -101,7 +101,7 @@ QVariant QT::lastPosition() {
|
|||
#ifdef Q_OS_ANDROID
|
||||
pos << getDoubleField("_position_lat_")
|
||||
<< getDoubleField("_position_lon_")
|
||||
<< QString::number(getLongField("_position_time_") / 1000); // 'QString': see QML 'lastPosition()'
|
||||
<< getLongField("_position_time_");
|
||||
#endif
|
||||
return pos;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,8 @@
|
|||
(let ((val (first (query "select max(mid) from messages"))))
|
||||
(if (numberp val) val 0)))
|
||||
|
||||
(defun delete-message (mid)
|
||||
(defun delete-message (mid) ; see QML
|
||||
(setf mid (floor mid)) ; JS double
|
||||
(query "delete from messages where mid = ?"
|
||||
mid))
|
||||
|
||||
|
|
|
|||
|
|
@ -16,9 +16,8 @@
|
|||
(let* ((pos #+android (qrun* (qt:last-position qt:*cpp*)) ; 'qrun*': return value
|
||||
#+ios (qjs |lastPosition| ui:*position-source*))
|
||||
(time (third pos)))
|
||||
(when time
|
||||
(setf (third pos)
|
||||
(if (zerop (length time)) 0 (parse-integer time))))
|
||||
(when (stringp time)
|
||||
(setf (third pos) (parse-integer time))) ; see QML
|
||||
pos))
|
||||
|
||||
#+mobile
|
||||
|
|
@ -44,8 +43,6 @@
|
|||
|
||||
(defun position* (node)
|
||||
(when node
|
||||
(when (stringp node)
|
||||
(setf node (parse-integer node))) ; for JS
|
||||
(x:when-it (getf *positions* node)
|
||||
(list (getf x:it :lat)
|
||||
(getf x:it :lon)))))
|
||||
|
|
@ -108,7 +105,7 @@
|
|||
(activate-map)
|
||||
(x:when-it (lora:my-num)
|
||||
(qjs |updatePositions| ui:*map*
|
||||
(princ-to-string x:it) ; STRING for JS
|
||||
x:it
|
||||
(lora:my-name)
|
||||
(find-quick-item ui:*group*))))
|
||||
(q> |visible| ui:*map-view* show)
|
||||
|
|
|
|||
|
|
@ -120,10 +120,10 @@
|
|||
(msg:add-message
|
||||
(list :receiver (node-to-name *receiver*)
|
||||
:sender (my-name)
|
||||
:timestamp (princ-to-string (get-universal-time)) ; STRING for JS
|
||||
:timestamp (get-universal-time)
|
||||
:hour (timestamp-to-hour)
|
||||
:text (add-line-breaks text)
|
||||
:mid (princ-to-string msg:*message-id*) ; STRING for JS
|
||||
:mid msg:*message-id*
|
||||
:ack-state (position :sending msg:*states*)
|
||||
:me t)))))))
|
||||
|
||||
|
|
@ -211,10 +211,10 @@
|
|||
(msg:add-message
|
||||
(list :receiver (my-name)
|
||||
:sender (node-to-name (me:from packet))
|
||||
:timestamp (princ-to-string timestamp) ; STRING for JS
|
||||
:timestamp timestamp
|
||||
:hour (timestamp-to-hour timestamp)
|
||||
:text (add-line-breaks text)
|
||||
:mid (princ-to-string mid))))))) ; STRING for JS
|
||||
:mid mid))))))
|
||||
;; for :ack-state (acknowledgement state)
|
||||
(:routing-app
|
||||
(let ((state (me:routing.error-reason
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
(t
|
||||
(qlog "message state changed: ~A" state)
|
||||
:not-received))
|
||||
(princ-to-string (me:request-id decoded))))) ; STRING for JS
|
||||
(me:request-id decoded))))
|
||||
;; GPS location
|
||||
(:position-app
|
||||
(unless (zerop (length payload))
|
||||
|
|
@ -254,7 +254,7 @@
|
|||
(group:add-person
|
||||
(list :radio-name name
|
||||
:custom-name (or (app:setting name :custom-name) "")
|
||||
:node-num (princ-to-string (me:num info)) ; STRING for JS
|
||||
:node-num (me:num info)
|
||||
:current (equal name (app:setting :latest-receiver)))))
|
||||
(when (find name *ble-names* :test 'string=)
|
||||
(setf radios:*found* t)
|
||||
|
|
@ -379,7 +379,8 @@
|
|||
channel))))
|
||||
|
||||
(defun change-receiver (receiver) ; see QML
|
||||
(setf *receiver* (parse-integer receiver)) ; STRING for JS
|
||||
(setf receiver (floor receiver)) ; JS double
|
||||
(setf *receiver* receiver)
|
||||
(app:change-setting :latest-receiver (node-to-name *receiver*))
|
||||
(msg:receiver-changed)
|
||||
(group:receiver-changed)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
(setf msg:*message-id* (db:max-message-id))
|
||||
(if (setting :latest-receiver)
|
||||
(msg:show-messages)
|
||||
(q> |currentIndex| ui:*main-view* 0)) ; 'Group'
|
||||
(qlater (lambda () (q> |currentIndex| ui:*main-view* 0)))) ; 'Group'
|
||||
(x:when-it (setting :recent-emojis)
|
||||
(setf *recent-emojis* (mapcar 'qfrom-utf8 x:it))
|
||||
(q> |model| ui:*recent-emojis* *recent-emojis*))
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
(x:when-it* (app:setting (getf message :sender) :custom-name)
|
||||
(setf (getf message :sender-name) x:it*)))
|
||||
(unless loading
|
||||
(db:save-message (parse-integer (getf message :mid)) ; mid
|
||||
(db:save-message (getf message :mid) ; mid
|
||||
(parse-integer x:it :radix 16) ; uid
|
||||
(prin1-to-string message)))
|
||||
(if (or loading (show-message-p message))
|
||||
|
|
@ -37,13 +37,12 @@
|
|||
(q! |positionViewAtEnd| ui:*message-view*))))
|
||||
|
||||
(defun change-state (state mid)
|
||||
(let* ((i-state (position state *states*))
|
||||
(mid* (parse-integer mid))
|
||||
(message (db:load-message mid*)))
|
||||
(let ((i-state (position state *states*))
|
||||
(message (db:load-message mid)))
|
||||
(when message
|
||||
(setf message (read-from-string message))
|
||||
(setf (getf message :ack-state) i-state)
|
||||
(db:update-message mid* (prin1-to-string message))
|
||||
(db:update-message mid (prin1-to-string message))
|
||||
(qjs |changeState| ui:*messages*
|
||||
i-state mid))))
|
||||
|
||||
|
|
@ -80,8 +79,9 @@
|
|||
(values))
|
||||
|
||||
(defun show-date (timestamp) ; see QML
|
||||
(setf timestamp (floor timestamp)) ; JS double
|
||||
(multiple-value-bind (sec min hour day month year)
|
||||
(decode-universal-time (parse-integer timestamp))
|
||||
(decode-universal-time timestamp)
|
||||
(app:toast (format nil "~D-~2,'0D-~2,'0D ~2,'0D:~2,'0D:~2,'0D"
|
||||
year month day hour min sec))))
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ Rectangle {
|
|||
|
||||
// hack to define all model key _types_
|
||||
ListElement {
|
||||
radioName: ""; customName: ""; nodeNum: ""; unread: 0; current: false
|
||||
radioName: ""; customName: ""; nodeNum: 0; unread: 0; current: false
|
||||
}
|
||||
|
||||
function addPerson(person) {
|
||||
|
|
@ -75,7 +75,7 @@ Rectangle {
|
|||
var to = -1
|
||||
if (name < get(0).customName) {
|
||||
to = 0
|
||||
} else if (name > get(count - 1).customName) {
|
||||
} else if (name >= get(count - 1).customName) {
|
||||
to = count - 1
|
||||
} else {
|
||||
for (var i = 1; i < count; i++) {
|
||||
|
|
@ -143,7 +143,7 @@ Rectangle {
|
|||
|
||||
function selected() {
|
||||
view.currentIndex = index
|
||||
Lisp.call("lora:change-receiver", model.nodeNum)
|
||||
Lisp.call("lora:change-receiver", model.nodeNum>>>0)
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ Rectangle {
|
|||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: Lisp.call("msg:show-date", model.timestamp)
|
||||
onClicked: Lisp.call("msg:show-date", model.timestamp>>>0)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ Rectangle {
|
|||
onClicked: {
|
||||
var mid = model.mid
|
||||
view.model.remove(index)
|
||||
Lisp.call("db:delete-message", mid)
|
||||
Lisp.call("db:delete-message", mid>>>0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -149,8 +149,8 @@ Rectangle {
|
|||
|
||||
// hack to define all model key _types_
|
||||
ListElement {
|
||||
receiver: ""; sender: ""; senderName: ""; timestamp: ""; hour: "";
|
||||
text: ""; text2: ""; mid: ""; ackState: 0; me: true; hidden: false
|
||||
receiver: ""; sender: ""; senderName: ""; timestamp: 0; hour: "";
|
||||
text: ""; text2: ""; mid: 0; ackState: 0; me: true; hidden: false
|
||||
}
|
||||
|
||||
function addMessage(message) { append(message) }
|
||||
|
|
|
|||
|
|
@ -131,14 +131,14 @@ Item {
|
|||
|
||||
property double lat: 0
|
||||
property double lon: 0
|
||||
property string time: "" // no 'long' in JS
|
||||
property string time: "0" // no 'long' in JS
|
||||
|
||||
onPositionChanged: {
|
||||
if (position.latitudeValid && position.longitudeValid) {
|
||||
var coor = position.coordinate;
|
||||
lat = coor.latitude
|
||||
lon = coor.longitude
|
||||
time = coor.timestamp ? String(coor.timestamp) : ""
|
||||
time = coor.timestamp ? String(coor.timestamp.getTime()) : "0"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue