This feature involved a lot of refactoring in order to get working
correctly. I wanted to continue using the timeline view for chats thus I
used alternative styling & structure for DM event kinds. This worked
create since the elements map does not care.
There is some queing that has to be done to decrypt message content thus
I allow viewing messages even if they haven't been decrypted yet. I
think this is good for transparency since you understand what is and is
not decrypted. I do think that the UX could improve, because even tho it
is fast, it's flashes on new messages.
I did not implement saving of latest messages. I will do this later, but
this feature is big enough to merge as is: an alpha state that works.
I further abstracted profile & name updating to work in a more global
manner. Additionally I rewrote code that had attribute scripts to use
addEventListener instead. This is needed to happen anyways for security
and made the codebase easier to manage.
Improved recognization of replying to thread and being able to open it.
Rewrote profile storing on the model. Additionally fixed issues where
the profile was not getting loaded for referenced pubkeys on an event.
I am disabling saving events as it seems quite stressful on IndexedDB as
well as having to parse everything. We need some smart saving where we
only save data relative to the user. Such as profiles last seen within
the day or so. Anything else can simply be refetched. Storing 50,000 events
does not really help the app that much, but does give it a better
loading start.