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 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.
- 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.
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
Previously, events for which the sender, target (state_key) or remover
was missing from the room members would have their profile fetched
from network when registering the event into models.
This could cause very slow past events loading times for rooms, since
the event registering function (which contained the profile retrieval
directives) is run sequentially event-by-event.
Missing profiles are now lazy-loaded when events come into the
user's view in the QML timeline.