1
0
Fork 0

- basics chats works.

This commit is contained in:
cage 2020-09-06 17:28:16 +02:00
parent 49880b986d
commit f135292e53
9 changed files with 53 additions and 9 deletions

View File

@ -373,6 +373,28 @@
(define-key "C-J" #'show-chat-to-screen *chats-list-keymap*)
;; chats
(defun write-to-chat ()
(chat-loop (message-window:metadata specials:*message-window*)))
(define-key "M-c" #'write-to-chat *chat-message-keymap*)
(define-key "up" #'message-scroll-up *chat-message-keymap*)
(define-key "down" #'message-scroll-down *chat-message-keymap*)
(define-key "home" #'message-scroll-begin *chat-message-keymap*)
(define-key "end" #'message-scroll-end *chat-message-keymap*)
(define-key "/" #'message-search-regex *chat-message-keymap*)
(define-key "npage" #'message-scroll-next-page *chat-message-keymap*)
(define-key "ppage" #'message-scroll-previous-page *chat-message-keymap*)
;;;; hooks
;;; this hooks will skips toots with contain less than 20 words

View File

@ -64,7 +64,7 @@
(_ "~a ~a wrote:~%~a ~a~2%")
formatted-created-date
username
content
(html-utils:html->text content)
attachment-type))))))
(defmethod resync-rows-db ((object chats-list-window)

View File

@ -258,6 +258,9 @@ produces a tree and graft the latter on `existing-tree'"
(defparameter *chats-list-keymap* (make-starting-comand-tree)
"The keymap for window that shows all the chats.")
(defparameter *chat-message-keymap* (make-starting-comand-tree)
"The keymap for message-window when shows chat.")
(defun define-key (key-sequence function &optional (existing-keymap *global-keymap*))
"Define a key sequence that trigger a function:

View File

@ -56,7 +56,7 @@ etc.) happened"
(declare (ignore w e))
(incf-dt)
(incf-ticks)
;(scheduled-events:run-scheduled-events *ticks*)
(scheduled-events:run-scheduled-events *ticks*)
(program-events:dispatch-program-events)
(windows:calculate-all +dt+)))))

View File

@ -37,6 +37,10 @@
(eq (keybindings window)
keybindings:*gemini-message-keymap*))
(defun display-chat-p (window)
(eq (keybindings window)
keybindings:*chat-message-keymap*))
(defun prepare-for-display-status-mode (window)
(setf (keybindings window)
keybindings:*message-keymap*))

View File

@ -1388,6 +1388,7 @@
:*open-gemini-link-keymap*
:*gemini-downloads-keymap*
:*chats-list-keymap*
:*chat-message-keymap*
:define-key
:init-keyboard-mapping
:find-keymap-node
@ -1761,6 +1762,7 @@
:source-text
:metadata
:display-gemini-text-p
:display-chat-p
:prepare-for-display-status-mode
:append-source-text
:scroll-down

View File

@ -68,6 +68,10 @@
(defgeneric process-event (object))
#+debug
(defmethod process-event :before (object)
(misc:dbg "processing event ~a" object))
(defgeneric reinitialize-id (object))
(defmacro wrapped-in-lock ((queue) &body body)
@ -1016,9 +1020,9 @@
(dolist (chat all-chats)
(let* ((chat-id (db:row-id chat))
(min-id (db:last-chat-message-id chat-id)))
(program-events:push-event (make-instance 'program-events:get-chat-messages-event
:chat-id chat-id
:min-message-id min-id))))))
(process-event (make-instance 'program-events:get-chat-messages-event
:chat-id chat-id
:min-message-id min-id))))))
(defclass chat-show-event (program-event)
((chat
@ -1030,9 +1034,13 @@
(with-accessors ((chat chat)) object
(let* ((chat-id (db:row-id chat)))
(db:mark-all-chat-messages-read chat-id)
(setf (windows:keybindings specials:*message-window*)
keybindings:*chat-message-keymap*)
(setf (message-window:source-text specials:*message-window*)
(chats-list-window:chat->text chat))
(message-window:scroll-end specials:*message-window*)
(setf (message-window:metadata specials:*message-window*)
chat)
(windows:draw specials:*message-window*))))
(defclass chat-post-message-event (program-event)

View File

@ -19,7 +19,7 @@
(define-constant +refresh-all-chats-data-frequency+ 10000 :test #'=)
(define-constant +refresh-all-chats-messages-frequency+ 1000 :test #'=)
(define-constant +refresh-all-chats-messages-frequency+ 50 :test #'=)
(defun triggedp (ticks frequency)
(= (rem ticks frequency)
@ -37,7 +37,11 @@
(gen-scheduler-function (refresh-refresh-all-chats-messages
+refresh-all-chats-messages-frequency+)
(ui:update-all-chats-messages))
(ui:update-all-chats-messages)
(when (message-window:display-chat-p *message-window*)
(let ((show-event (make-instance 'program-events:chat-show-event
:chat (message-window:metadata *message-window*))))
(program-events:push-event show-event))))
(defun run-scheduled-events (ticks)
(refresh-refresh-all-chats-messages ticks)

View File

@ -1444,6 +1444,7 @@ mot recent updated to least recent"
(chat-loop chat)))
(defun chat-loop (chat)
"Start writing to chat"
(labels ((post-message (message)
(let ((event (make-instance 'program-events:chat-post-message-event
:priority +maximum-event-priority+
@ -1456,8 +1457,8 @@ mot recent updated to least recent"
(post-message message)
(update-all-chats-messages)
(let ((show-event (make-instance 'program-events:chat-show-event
:priority +minimum-event-priority+
:chat chat)))
:priority +minimum-event-priority+
:chat chat)))
(push-event show-event)
(%loop))))
(ask-fn ()