- Allow using invisible mode on servers not supporting presence, to
make use of the prevention of sending typing notifications and read
marker updates
- For servers not supporting presence, display the account's presence
orb in the left pane with half opacity
- Indicate in the presence orb tooltip when the presence we set hasn't
yet been noticed by the server/the server doesn't support presence
- When reconnecting after being offline, if the server doesn't indicate
we have a status message [set from another client], restore any
previous message we had set in the current client
- Show our status message striked out when we're invisible or offline to
indicate that it isn't being broadcasted
- Some code style cleanups
- Try to handle cases where we set a presence, but receive a new
presence event for our account before the server takes notice of that
new presence we want, which probably resulted in the "account keeps
switching between online and unavailable every few sec" glitch
Use a throwaway nio client to make ourself an aiohttp session with proxy
support, that way we don't have to depend on aiohttp and aiohttp-socks
libraries
Because of course sound isn't just gonna work on linux and
especially flatpak. Make sure to not spawn an error popup every time
we try to play a notification. Maybe use mpv in the future for
SFX playback (when we'll have a media player implemented),
since it has support for all these backends out of the box.
Downloading file messages will now show a transfer control above the
composer, similar to uploads. Measuring the progress or pausing the
operation is not possible yet.
When hovering on stability percentages in the server browser, a tooltip
now shows the total downtime in the past 30 days, number of incidents,
their average length and the longest's duration.
- Cleaner design for the backend user_files classes and simplified
interaction with QML
- Config and theme files will now automatically reload when changed on
disk
- Removed manual reload keybind and button
thumbnail() and download() were remaining.
Use a direct and carefully chosen MatrixClient's methods instead to
avoid problems mentioned in the previous commit 7502c1.
Causes problem if one of the candidate client is on a server that
doesn't federate (e.g. a local one). Move the `get_profile()` function
from Backend to MatrixClient.
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.