- New ListItem implemented using a metaclass, which makes defining new
ListItem subclasses much cleaner and shorter
- ListModel functions taking an index now accept either an int
(list index) or str (value of a main key)
- getWhere() gone, simply use get(a_main_key_value) now
- updateOrAppendWhere replaced by update()/upsert()
- UI (previously MainUI) is back to being the only component loaded
as Window's child
- UI has the background image previously only for the SignInPage
- If there are no accounts, the UI Loader's initialItem is the
SignInPage
- The SidePane becomes visible when there's >=1 account connected
- Standardized capitalization for variables and file names everywhere in
QML and JS, get rid of mixed camelCase/snakeCase,
use camelCase like everywhere in Qt
- ListModel items are now stored and returned as real QObjects with
PyQt properties and signals.
This makes dynamic property binding a lot easier and eliminates the need
for many hacks.
- New update(), updateOrAppendWhere() methods and roles property
for ListModel
- RoomHeader now properly updates when the room title or topic changes
- Add Backend.pdb(), to make it easier to start the debugger from QML
- Move HTTP connect/disconnect logic to networkManager
- If a talk fails due to socket error, HTTP transport error or
nio bad response that might change, retry every 2s until success
- Clean up some leftover debug prints
For any name not found in rooms data, rely on new
nio.HttpClient.get_displayname() function to get and cache it,
e.g. for our own name if no room is joined and past events from users
who left the room.
@futurize now returns PyQtFuture objects, wrapper for the
concurrent.futures.Future objects that can be used from QML,
to ensure name retrieval does not block the GUI.
- Trigger when room is shown if there's not enough messages to fill the
list height
- Trigger whenever user is scrolling before a certain point, instead of
when dragging is released/scrolling stopped and the top edge is hit
- Prevent multiple load requests at same time
- Keep a set of fully loaded rooms, don't request anymore history
if a room is fully loaded
- Take a custom container callable for ListModel __init__ (defaults to
list, must be a MutableSequence)
- Use a Deque for roomEvents, which is much faster for inserting
new items at the beginning.
Qt somehow handles scrolling on new messages on its own when the
ListView direction is bottom to top.
In normal top to bottom, manual scrolling is completly buggy.
Replace the "reloadThis" ListModel hack by an actual signal,
works when the subtitle is displayed in more than one place
(e.g. two accounts in the same room connected).
- Fix roomList height again, now based on model.count().
All delegates are assumed to be the same height
- Properly update room list when a room is joined or left
- Catch exceptions happening in threads (futures), which previously
passed silently
- Show "Empty room?" as "<i>Empty Room</i>" + gray [?] avatar
To make the models update correctly in QML:
- ListModel and _QtModel merged
- Return a ListModelMap QObject from properties instead of
a DefaultDict → QVariantMap
- Started work on the matrix-nio backend, which will be used instead
of matrix-python-sdk for greater control and cleaner design
- Have an Application (QGuiApplication) class to habdle argument parsing
and setting some Qt properties like application name