Commit Graph

40 Commits

Author SHA1 Message Date
miruka
9da0b12e45 Resume accounts faster on client startup 2019-12-16 05:14:26 -04:00
miruka
438b0d26a4 Don't share room members models between accounts
Is unsafe and creates subtile bugs, like "invite member → member
declines → member disappears from the member list, then reappears a
second after" (race condition)
2019-12-12 10:11:24 -04:00
miruka
888df282a8 Rename side pane stuff to main pane 2019-12-10 15:17:41 -04:00
miruka
37d8d5c68d History persistence for DebugConsole 2019-12-09 13:21:12 -04:00
miruka
455801a641 Use new way to cancel current login for signin btn 2019-12-07 18:45:03 -04:00
miruka
26e63e4ab2 Use new nio AsyncClient.mxc_to_http()
Has the correct behavior for all servers,
e.g. mxc://privacytoosl.io/id → https://chat.privacytools.io/...
2019-12-02 06:42:48 -04:00
miruka
3b2ab048fb Rework import keys pass confirmation
- Show button as loading until the import is done, *then* close popup
- Remove the dedicated backend password checking function, we can use
  import_keys() directly now
- Handle all the possible errors that could be thrown from python
2019-11-30 05:55:27 -04:00
miruka
fc2fb605e3 Prefer using own client for fetching own profile 2019-11-14 16:20:30 -04:00
miruka
73541ad7a5 download/thumbnail don't need authentification 2019-11-12 09:10:00 -04:00
miruka
4cc2ebf6e3 Use exceptions for get_profile 2019-11-12 08:47:03 -04:00
miruka
290d3e9f6b Simplify Backend.get_profile 2019-11-12 08:34:08 -04:00
miruka
746a9259db SignIn: cancel previous task when clicking button 2019-11-11 09:12:31 -04:00
miruka
7f48c1b35d Properly handle login errors with new exceptions 2019-11-11 06:39:11 -04:00
miruka
078cf61b7e Show an uploads bar in chats when uploading files 2019-11-06 06:28:48 -04:00
miruka
de8d0b5823 Fix image events opened/copied url 2019-11-04 10:46:06 -04:00
miruka
337603595a Backend: separate wait_until_(any_?)client_exists() 2019-11-04 06:56:26 -04:00
miruka
2f19ff493b Rewrite media caching (old image provider)
- Doesn't use pyotherside's image provider feature, for more flexibility
  and simplicity
- Suitable for supporting matrix media events and more later
- Avoid a lot of duplicate files that the old cache created due to
  server not returning what we expect, mistakes in Python/QML code, etc
- Changed file structure
  (e.g. thumbnails/32x32/<mxc id> instead of
   thumbnails/<mxc id>.32.32.crop)

- Backend.wait_until_account_exist: start issuing warnings if the
  function runs for more than 10s, which means in most case a bad user
  ID was passed

- New HMxcImage QML component, used in H(User/Room)Avatar
2019-11-03 13:48:12 -04:00
miruka
6eb3a378bc Proper upload exceptions, handle in QML set avatar 2019-10-28 08:06:22 -04:00
miruka
11486ab51d Add homeserver URL field to login screen 2019-09-07 17:24:58 -04:00
miruka
f65c0176ba Better error handling and fixes for key import 2019-08-27 23:51:38 -04:00
miruka
ebfebbeae1 Improve import keys password popup 2019-08-27 22:43:57 -04:00
miruka
b457f46247 Close HTTP session when logging in fails
Avoids "Unclosed client session" error messages in the terminal
2019-08-27 14:23:09 -04:00
miruka
b8d43ecfec Add account logout feature via context menu 2019-08-21 17:45:05 -04:00
miruka
4349643345 filter_string is now a class property
- Support serializing class properties instead of just dataclass fields
- filter_string is now a property that's always up-to-date
- Account display names matching the current SidePane filter are shown
2019-08-19 11:34:51 -04:00
miruka
2865d86d19 Refactor SidePane ListView in a flat way
Also adjust some colors (accentBackground)

TODO: Repair Filter rooms field
2019-08-18 03:35:28 -04:00
miruka
4067d8c4ab Get flat SidePane data on Account/Room models sync
QML: Get the data from Python and print it (for now)

Also:
- Remove useless Model.sortable field, all models/items are sortable
- Change SyncId type hint for less mypy complaints
- Remove ModelItem.main_key class attributes, useless since last big
  refactor
2019-08-17 22:46:54 -04:00
miruka
c7adb5b02f Show error messages on login screen 2019-08-16 16:30:18 -04:00
miruka
3c35616eaa Remove copyright headers in code 2019-08-11 08:34:36 -04:00
miruka
67dde68126 Big performance refactoring & various improvements
Instead of passing all sorts of events for the JS to handle and manually
add to different data models, we now handle everything we can in Python.

For any change, the python models send a sync event with their
contents (no more than 4 times per second) to JS, and the QSyncable
library's JsonListModel takes care of converting it to a QML ListModel
and sending the appropriate signals.

The SortFilterProxyModel library is not used anymore, the only case
where we need to filter/sort something now is when the user interacts
with the "Filter rooms" or "Filter members" fields. These cases are
handled by a simple JS function.

We now keep separated room and timeline models for different accounts,
the previous approach of sharing all the data we could between accounts
created a lot of complications (local echoes, decrypted messages
replacing others, etc).

The users's own account profile changes are now hidden in the timeline.
On startup, if all events for a room were only own profile changes, more
events will be loaded.

Any kind of image format supported by Qt is now handled by the
pyotherside image provider, instead of just PNG/JPG.
SVGs which previously caused errors are supported as well.

The typing members bar paddings/margins are fixed.

The behavior of the avatar/"upload a profile picture" overlay is fixed.

Config files read from disk are now cached (TODO: make them reloadable
again).

Pylint is not used anymore because of all its annoying false warnings
and lack of understanding for dataclasses, it is replaced by flake8 with
a custom config and various plugins.

Debug mode is now considered on if the program was compiled with
the right option, instead of taking an argument from CLI.
When on, C++ will set a flag in the Window QML component.

The loading screen is now unloaded after the UI is ready, where
previously it just stayed in the background invisible and wasted CPU.

The overall refactoring and improvements make us now able to handle
rooms with thousand of members and no lazy-loading, where previously
everything would freeze and simply scrolling up to load past events
in any room would block the UI for a few seconds.
2019-08-11 08:27:53 -04:00
miruka
ec27ecf498 Initial themes implementation, new default theme 2019-07-24 02:14:34 -04:00
miruka
9397687122 Parse theme from a custom simpler format 2019-07-23 03:14:02 -04:00
miruka
246058e647 Make Chat show spinner until ready
Like EditAccount, instead of crashing if the room isn't loaded yet.
2019-07-21 08:38:49 -04:00
miruka
853bb350b4 Make EditAccount show a spinner until ready
Instead of crashing if userInfo is not yet available.

statusMessage is removed for now from UserUpdated events,
and the users model items will have a "loading" property.
2019-07-21 07:14:16 -04:00
miruka
d597e1dda8 Refactor Backend and config file operations 2019-07-18 20:30:41 -04:00
miruka
0f6474532b Add LGPL license headers 2019-07-07 23:53:08 -04:00
miruka
be152c3acf Fix getUser binding loops & coro race conditions 2019-07-07 01:37:13 -04:00
miruka
ecba7c47ec Past events loading (with two bugs) 2019-07-05 03:12:27 -04:00
miruka
634796b7d9 Don't put our own profile changes in the timeline 2019-07-04 19:11:22 -04:00
miruka
63645b73a5 RoomDelegate subtitle, take only 1 arg for getUser 2019-07-04 00:28:13 -04:00
miruka
06c823aa67 Build system, messages support and more 2019-07-02 13:59:52 -04:00