mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-06 02:30:38 -08:00
example 'meshtastic': review & fix DB message storage
This commit is contained in:
parent
95c8fcd8c0
commit
4a9434d7ea
5 changed files with 27 additions and 25 deletions
|
|
@ -11,11 +11,12 @@
|
|||
(setf *file* (app:in-data-path "db"))
|
||||
(ensure-directories-exist *file*)
|
||||
(qt:ini-db qt:*cpp* (namestring *file*))
|
||||
(query "create table if not exists messages (mid integer primary key, uid integer, message text)"))
|
||||
(query "create table if not exists messages (mid integer primary key autoincrement, uid integer, message text)"))
|
||||
|
||||
(defun save-message (mid uid message)
|
||||
(query "insert into messages (mid, uid, message) values (?, ?, ?)"
|
||||
mid uid message))
|
||||
(defun save-message (uid message)
|
||||
"Inserts MESSAGE and returns the new MID."
|
||||
(first (query "insert into messages (uid, message) values (?, ?)"
|
||||
uid message)))
|
||||
|
||||
(defun load-message (mid)
|
||||
(first (query "select message from messages where mid = ?"
|
||||
|
|
@ -29,10 +30,6 @@
|
|||
(query "select message from messages where uid = ? order by mid"
|
||||
uid))
|
||||
|
||||
(defun max-message-id ()
|
||||
(let ((val (first (query "select max(mid) from messages"))))
|
||||
(if (numberp val) val 0)))
|
||||
|
||||
(defun delete-message (mid) ; see QML
|
||||
(query "delete from messages where mid = ?"
|
||||
mid)
|
||||
|
|
|
|||
|
|
@ -69,12 +69,12 @@
|
|||
(me:make-to-radio :want-config-id *config-id*))
|
||||
(q> |playing| ui:*busy* t)))
|
||||
|
||||
(defun set-ready (ready name ble-names) ; see Qt
|
||||
(defun set-ready (&optional ready name ble-names) ; see Qt
|
||||
(setf *ready* ready)
|
||||
(when ready
|
||||
(setf *ble-names* ble-names)
|
||||
(app:toast (x:cc (tr "radio") ": " name) 2)
|
||||
(qlater 'get-node-config))
|
||||
(get-node-config))
|
||||
(values))
|
||||
|
||||
(defun add-line-breaks (text)
|
||||
|
|
@ -112,7 +112,7 @@
|
|||
(t
|
||||
(msg:check-utf8-length (q< |text| ui:*edit*))
|
||||
(unless (q< |tooLong| ui:*edit*)
|
||||
(msg:message-id)
|
||||
(msg:new-message-id)
|
||||
(when (stringp *receiver*)
|
||||
(setf *receiver* (name-to-node *receiver*)))
|
||||
(send-to-radio
|
||||
|
|
@ -304,7 +304,7 @@
|
|||
(defun send-admin (admin-message)
|
||||
(send-to-radio
|
||||
(to-radio :to (me:num *my-node-info*)
|
||||
:id (msg:message-id)
|
||||
:id (msg:new-message-id)
|
||||
:hop-limit 3
|
||||
:want-ack t
|
||||
:priority :reliable
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@
|
|||
(radios:ini)
|
||||
(db:ini)
|
||||
(loc:ini)
|
||||
(setf msg:*message-id* (db:max-message-id))
|
||||
(if (setting :latest-receiver)
|
||||
(msg:show-messages)
|
||||
(qlater (lambda () (q> |currentIndex| ui:*main-view* 0)))) ; 'Group'
|
||||
|
|
|
|||
|
|
@ -1,14 +1,19 @@
|
|||
(in-package :msg)
|
||||
|
||||
(defvar *message-id* 0)
|
||||
(defvar *states* '(:not-received :sending :received))
|
||||
(defvar *states* '(:not-received :sending :received))
|
||||
(defvar *message-id* 0)
|
||||
(defvar *message-ids* nil "associate (temporary) QML :mid to (unique) DB 'mid'")
|
||||
|
||||
(defun ini ()
|
||||
(q> |fontSize| ui:*message-view* (or (app:setting :message-font-size) 18)))
|
||||
(q> |fontSize| ui:*message-view*
|
||||
(or (app:setting :message-font-size) 18)))
|
||||
|
||||
(defun message-id ()
|
||||
(defun new-message-id ()
|
||||
(mod (incf *message-id*) #.(expt 2 32)))
|
||||
|
||||
(defun db-mid (mid)
|
||||
(cdr (assoc mid *message-ids*)))
|
||||
|
||||
(defun show-message-p (message)
|
||||
(let ((user (app:setting :latest-receiver)))
|
||||
(and user (or (string= user (getf message :receiver))
|
||||
|
|
@ -24,9 +29,10 @@
|
|||
(x:when-it* (app:setting (getf message :sender) :custom-name)
|
||||
(setf (getf message :sender-name) x:it*)))
|
||||
(unless loading
|
||||
(db:save-message (getf message :mid) ; mid
|
||||
(parse-integer x:it :radix 16) ; uid
|
||||
(prin1-to-string message)))
|
||||
(let ((db-mid (db:save-message (parse-integer x:it :radix 16) ; uid
|
||||
(prin1-to-string message))))
|
||||
(push (cons (getf message :mid) db-mid)
|
||||
*message-ids*)))
|
||||
(if (or loading (show-message-p message))
|
||||
(qjs |addMessage| ui:*messages* message)
|
||||
(let* ((sender (getf message :sender))
|
||||
|
|
@ -38,12 +44,13 @@
|
|||
(q! |positionViewAtEnd| ui:*message-view*))))
|
||||
|
||||
(defun change-state (state mid)
|
||||
(let ((i-state (position state *states*))
|
||||
(message (db:load-message mid)))
|
||||
(let* ((i-state (position state *states*))
|
||||
(db-mid (db-mid mid))
|
||||
(message (db:load-message db-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 db-mid (prin1-to-string message))
|
||||
(qjs |changeState| ui:*messages*
|
||||
i-state mid))))
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,6 @@
|
|||
#:ini
|
||||
#:load-message
|
||||
#:load-messages
|
||||
#:max-message-id
|
||||
#:save-message
|
||||
#:update-message))
|
||||
|
||||
|
|
@ -103,8 +102,8 @@
|
|||
#:font-size-changed
|
||||
#:font-size-dialog
|
||||
#:ini
|
||||
#:message-id
|
||||
#:message-press-and-hold
|
||||
#:new-message-id
|
||||
#:receiver-changed
|
||||
#:show-date
|
||||
#:show-messages
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue