example 'meshtastic': simplify uint32 var exchange Lisp <-> QML

This commit is contained in:
pls.153 2023-09-07 14:59:45 +02:00
parent 10677a19c9
commit 5d29353718
9 changed files with 33 additions and 34 deletions

View file

@ -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;
}

View file

@ -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))

View file

@ -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)

View file

@ -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)

View file

@ -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*))

View file

@ -24,8 +24,8 @@
(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
(parse-integer x:it :radix 16) ; uid
(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))
(qjs |addMessage| ui:*messages* 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))))

View file

@ -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 {

View file

@ -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) }

View file

@ -129,16 +129,16 @@ Item {
updateInterval: 2000
active: false
property double lat: 0
property double lon: 0
property string time: "" // no 'long' in JS
property double lat: 0
property double lon: 0
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"
}
}