mirror of
https://github.com/vale981/ement.el
synced 2025-03-04 17:01:39 -05:00

Squashed commit of the following: commit1f393d7dde
Author: Adam Porter <adam@alphapapa.net> Date: Thu Jul 22 10:48:19 2021 -0500 Comment: TODOs commit7e039a7b4f
Author: Adam Porter <adam@alphapapa.net> Date: Thu Jul 22 10:48:08 2021 -0500 WIP: Docstring for handler lambdas commit441c23113c
Author: Adam Porter <adam@alphapapa.net> Date: Thu Jul 22 10:40:58 2021 -0500 WIP: Don't insert reaction events as nodes This seems to work well. However, the event-processing needs some refactoring, because the logic is now spread across a few places. commit4fdf0ddf37
Author: Adam Porter <adam@alphapapa.net> Date: Thu Jul 22 10:30:28 2021 -0500 WIP: Key face, and fix help-echo Remaining issue is that reactions still insert empty events in the buffer. commit5f700ccc16
Author: Adam Porter <adam@alphapapa.net> Date: Thu Jul 22 09:30:18 2021 -0500 WIP: Fix: Use pushnew to avoid duplicating reactions commita40a6e6bc1
Author: Adam Porter <adam@alphapapa.net> Date: Wed Jul 21 20:17:32 2021 -0500 WIP: And in -retro-callback A bug now is that, every time a room's buffer is created anew, the reactions are duplicated. commitdbfec18e45
Author: Adam Porter <adam@alphapapa.net> Date: Wed Jul 21 19:49:47 2021 -0500 WIP: Call -room---process-events in -room--buffer This almost seems to work, in that reactions from old timeline events are displayed when the buffer is made...or not? It seems to work in some cases, but not in others, like when retro-loading... The big issue now is that the reaction events cause blank events to be inserted into the buffer. Fixing that will require conditionally inserting events, which probably means moving message event handling into the defevent macro, which will require some more refactoring... commit81757536f2
Author: Adam Porter <adam@alphapapa.net> Date: Wed Jul 21 17:02:29 2021 -0500 WIP: Add: Reactions It works for newly received reactions, but after initial sync, reactions that happened in the past are not displayed. I think it's because the related events aren't found in the room's timeline, but I tried to fix that, and it still doesn't work. I'm guessing there are some assumptions that I'm making wrongly, or something that I don't understand about how the server sends events. We may have to save a list of certain types of events and process them after all other events have been processed. Ugh. The good news is that EWOC makes it pretty easy and reliable to update messages in the buffer.
78 lines
1.8 KiB
EmacsLisp
78 lines
1.8 KiB
EmacsLisp
;;; ement-structs.el --- Ement structs -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 2020 Adam Porter
|
|
|
|
;; Author: Adam Porter <adam@alphapapa.net>
|
|
;; Keywords:
|
|
|
|
;; This program is free software; you can redistribute it and/or modify
|
|
;; it under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
|
|
;; This program is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU General Public License for more details.
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
;;; Commentary:
|
|
|
|
;;
|
|
|
|
;;; Code:
|
|
|
|
;;;; Debugging
|
|
|
|
(eval-and-compile
|
|
(setq-local warning-minimum-log-level nil)
|
|
(setq-local warning-minimum-log-level :debug))
|
|
|
|
;;;; Requirements
|
|
|
|
(require 'cl-lib)
|
|
|
|
;;;; Structs
|
|
|
|
(cl-defstruct ement-user
|
|
id displayname account-data room-display-names
|
|
color)
|
|
|
|
(cl-defstruct ement-event
|
|
id sender content origin-server-ts type unsigned
|
|
;; The local slot is an alist used by the local client only.
|
|
local)
|
|
|
|
(cl-defstruct ement-server
|
|
name port uri-prefix)
|
|
|
|
(cl-defstruct ement-session
|
|
user server token transaction-id rooms next-batch
|
|
device-id initial-device-display-name has-synced-p)
|
|
|
|
(cl-defstruct ement-room
|
|
id display-name prev-batch
|
|
summary state timeline timeline* ephemeral account-data unread-notifications
|
|
latest-ts topic canonical-alias
|
|
;; The local slot is an alist used by the local client only.
|
|
local)
|
|
|
|
;;;; Variables
|
|
|
|
|
|
;;;; Customization
|
|
|
|
|
|
;;;; Commands
|
|
|
|
|
|
;;;; Functions
|
|
|
|
|
|
;;;; Footer
|
|
|
|
(provide 'ement-structs)
|
|
|
|
;;; ement-structs.el ends here
|