- 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
@futurize() is now called with parentheses and can take a max_instances
int argument. This is used for setTypingState to not have more than one
queued calls per room and True/False state and avoids bombing the server
with old ephemeral events after a network loss and reconnection.
- 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.