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.
While a user file write operation #1 was queued in the _write_loop,
it was possible meanwhile for another function to read the file
(the current old version on disk), add some data to it,
add submit the write (operation #2).
The modifications from operatio #1 were then completly lost at best.
Compression with Pillow can take long, especially with large
clipboard PNG images.
Doing this in a separate process prevents the async event loop from
getting blocked, and allows multiple compression operations to run in
parallel.
It's possible to get a MatrixForbidden error when trying to retrieve a
offline room member's presence, if that member actually left the room
but the server hasn't yet sent the update.
This required us to set the media downloaded local path on events
entirely from python instead of simply lazy-fetching them when needed
from QML, due to pyotherside's async nature and files that must be open
in a certain order.
A healthy client must not only have a sync task running, but also have
finished its initial sync and have been succesful in its last sync
attempt.
The previous weak requirement caused this issue:
Have two clients, one on a failing server, and try to fetch a media,
thumbnail or profile: since these functions don't need auth, any
healthy client is picked to do the request, but the previous
requirement made it possible to pick the failing client.
Replace the poorly implemented 2-in-1 "copy address" media event
menu option with:
- Copy <mediaType> address: visible for non-encrypted media, always
copies the http URL
- Copy local path: always visible for already downloaded media, even if
they were downloaded before mirage was started
Fix bug introduced in 11fb32:
When loading an encrypted thumbnail, QML lacks the decryption dict for
half a second at first.
When calling python like this, python calls the wrong matrix API
for fetching the encrypted thumbnail, and the added retry code
would be forever stuck.
The retry code has been moved to QML, and now works for all HImage.
The attributes by mistake used nio.AsyncClient.user instead of the
proper user_id. If the user logged in with a partial username instead of
typing their full ID, the can_ attributes (e.g. can_kick) would always
be False.
If the account passed to `saved_accounts.update()` doesn't exist in the
config file, return instead of failing with a KeyError.
An account can be absent from the file if "Remember my account" was
unchecked on login, or if the file hasn't been updated yet on disk after
login (race condition).
- Fix code formatting issues.
- Document `Presence`.
- Improve `Presence.__lt__()` performance by
defining a dict outside the method.
- Make presence ball radius relative to uiScale
and configurable from theme.
Improvements:
- Add instant feedback upon setting a different
presence for account (local echo)
- Sort room members by power level and then
presence
- Periodically update members' `last_acitve_at`
field on the room pane
- Move status message field up on account context
menu, and put invisible before offline again
Bug fix:
- Do not try to override presence set from
another client, accept it
Setting the presence of an account to offline
will make the client to end sync task and will
prevent messages from being sent.
Setting it to online again or any other presence
will start sync task again.
Left:
- Local echo to presence change
- UI Control to affect all members presence
- Block more requests to be sent (e.g. member
actions)
Bug fixes:
- Do not send typing notice and set room read
markers when the account is invisible
- Fix typing on set_presence
- Allow users to unset status message by setting
it to blank
- Escape html tags of status message on
SubtitleLabel of MemberDelegate
Improvements:
- Display user ID and status message on a tooltip
by hovering account or room member name
Enter/Return/Menu: open device menu
Space: toggle check device
Escape: uncheck all
Alt+R/F5: refresh device list
Alt+S/Delete: sign out checked or all sessions
<img> tags that either have a width and height (needed for QML to render
correctly) or the data-mx-emote attribute (if they have no width/height,
we assume 32x32) will be rendered inline.
QML's support for img tags with remote src URLs seems buggy on Qt 5.15
especially, not working sometimes. We need to download and cache these
images (like done for matrix media events), and use the local path in
the img's src.