ement.el/ement-structs.el
Adam Porter af2eee6f97 WIP: Fix: (ement-room--user-display-name) Cache other name types
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
2021-08-10 22:03:22 -05:00

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