example 'meshtastic': review & fix DB message storage

This commit is contained in:
pls.153 2024-02-24 22:23:34 +01:00
parent 95c8fcd8c0
commit 4a9434d7ea
5 changed files with 27 additions and 25 deletions

View file

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

View file

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

View file

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

View file

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

View file

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