Contact the server's .well-known API before anything to get
available login flows instead of blindly assuming it will be
m.login.password, and to get the server's real URL instead of
requiring users to remember that e.g. it's "chat.privacytools.io"
and not just "privacytools.io" despite user IDs making it look like so.
The server field will also now remember the last accepted URL.
This involved a refactoring to move all the media handling functions
(downloading, opening externally, etc) out of the Event delegates and
into the EventList, which manage keybinds instead.
This should also be better for performance since all these functions are
no longer duplicated for every Event in view.
Other user-noticable change: clicking on non-image media will
always download and open them no matter if the room is encrypted or not,
instead of opening non-encrypted files in browser like before. It will
be possible to still do that with an "open externally" command later.
Left:
- Something like "Active" should be shown instead of a relative time
when the member is considered currently active by the matrix server,
but an "Active" text takes too much space
- Show a colored circle in the bottom right corner of avatars to
indicate if they're online, away, or offline
- Reduce opacity of offline members, but is there a way to know if
the server has presence disabled? For servers like matrix.org,
Riot shows the entire list of members with half opacity at all time,
we want to avoid that
- Setting our status text with a text field in AccountDelegate
context menu, similar to the DeviceDelegate's context menu
- Setting our online/away/invisible/offline status from
AccountDelegate context menu
- Replace the useless "Mirage x.y.z" button in the top left of the UI
with a control to affect all accounts's status
Use native ListModel which require a lot of changes, but should be
much faster than the old way which exponentially slowed down to a crawl.
Also fix some popup bugs (leave/forget).
Not working yet: side pane keyboard controls, proper highlight,
room & member filtering, local echo replacement
Introduce a HmenuItemPopupSpawner component that takes care of reacting
to onTriggered signals and calling the utils.makePopup() function.
The combination of this new component used in HMenu to open a HPopup
now correctly takes and restore focus to the right element when closed.