mirror of
https://github.com/vale981/ement.el
synced 2025-03-05 09:21:37 -05:00

WIP: This may currently cause some displaynames to not be shown correctly when loading older messages, so not merging yet. This gets complicated... When a room has many events (e.g. over 1,000), searching the events for "displayname" events can take a long time. If we only cache displaynames from such events, then users without an explicitly set displayname will cause this search to happen every time this function is called, e.g. every time a message from such a user is formatted. So rather than only caching a name from a "displayname" event, we cache whatever we calculate, and we clear that cache whenever a new "displayname" event is handled
83 lines
2 KiB
EmacsLisp
83 lines
2 KiB
EmacsLisp
;;; ement-structs.el --- Ement structs -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 2020 Adam Porter
|
|
|
|
;; Author: Adam Porter <adam@alphapapa.net>
|
|
;; Keywords: comm
|
|
|
|
;; 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
|
|
username ;; NOTE: Not exactly according to spec, I guess, but useful for now.
|
|
displayname-event)
|
|
|
|
(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 uri-prefix)
|
|
|
|
(cl-defstruct ement-session
|
|
user server token transaction-id rooms next-batch
|
|
device-id initial-device-display-name has-synced-p
|
|
account-data
|
|
;; Hash table of all seen events, keyed on event ID.
|
|
events)
|
|
|
|
(cl-defstruct ement-room
|
|
id display-name prev-batch
|
|
summary state timeline ephemeral account-data unread-notifications
|
|
latest-ts topic canonical-alias avatar
|
|
;; 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
|