ement.el/ement-structs.el
Adam Porter 9234dfe9be Merge: Add: Show reactions
Squashed commit of the following:

commit 1f393d7dde
Author: Adam Porter <adam@alphapapa.net>
Date:   Thu Jul 22 10:48:19 2021 -0500

    Comment: TODOs

commit 7e039a7b4f
Author: Adam Porter <adam@alphapapa.net>
Date:   Thu Jul 22 10:48:08 2021 -0500

    WIP: Docstring for handler lambdas

commit 441c23113c
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.

commit 4fdf0ddf37
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.

commit 5f700ccc16
Author: Adam Porter <adam@alphapapa.net>
Date:   Thu Jul 22 09:30:18 2021 -0500

    WIP: Fix: Use pushnew to avoid duplicating reactions

commit a40a6e6bc1
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.

commit dbfec18e45
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...

commit 81757536f2
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.
2021-07-22 10:48:41 -05:00

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