Commit Graph

40 Commits

Author SHA1 Message Date
miruka
5ab13e3e16 Improve SortProxyFilter, room members filtering
- Simplify SortProxyFilter
- Better custom filtering algorithm
- Rename "ascending" (default True) to "reverse" (default False)
- Add "Filter members" field to RoomSidePane MembersView
2019-05-16 15:39:44 -04:00
miruka
bbc4c15ad3 Rework Backend, models and items organization 2019-05-11 15:52:56 -04:00
miruka
76fc03e8a1 Reorder ListItems 2019-05-09 20:20:24 -04:00
miruka
4367f52ce5 Support user devices added or deleted at runtime 2019-05-09 15:54:31 -04:00
miruka
1a90bb4331 Add Backend.devices ListModelMap
The Device ListModels will be populated after login.
2019-05-09 14:07:57 -04:00
miruka
7b3b886f10 Show banner when unverified devices in room
The banner replaces the SendBox, to prevent sending messages when nio
will raise an OlmTrustError.
2019-05-08 13:45:25 -04:00
miruka
a672b725de send msg: try claiming keys and sharing session
The sharing will fail for now, until device verification is implemented.
2019-05-08 12:12:43 -04:00
miruka
a15e2a5c9d Ensure messages are sent in order, one at a time 2019-05-08 10:37:46 -04:00
miruka
d08f43e6be Add new queuing features to @futurize
- max_instances renamed to max_running

- consider_args parameter:
  if True, $max_running of this function with the same arguments can be
  running, else:
  $max_running of this function, no matter the arguments, can be running

- discard_if_max_running:
  if True and there are already the maximum possible number of running
  functions running, cancel this task (previous default behavior), else:
  Wait for a spot to be free before running
2019-05-08 10:32:45 -04:00
miruka
0bd98a321d Invalidate outbound sessions on room forget 2019-05-06 23:37:49 -04:00
miruka
e9592a7289 Query other users's device keys 2019-05-06 23:27:31 -04:00
miruka
5ff82471fc Upload E2E keys to server if needed 2019-05-06 23:08:36 -04:00
miruka
15da828c70 Pass a store dir path to nio HttpClient 2019-05-06 22:42:48 -04:00
miruka
12ce4cdb30 Rework startup and Application-Engine relation
- Application and Engine will be started by __init__.run() independently
- Exiting app will disconnect clients
- Signals like SIGINT (Ctrl-C) are now handled for proper exit
2019-05-01 01:23:38 -04:00
miruka
99ab6a817a Update/refactor Chat components and banner 2019-04-28 14:20:30 -04:00
miruka
f65ea9dd0d Just import nio
Instead of nio.events, nio.responses, etc.
All the classes are already available at nio.
2019-04-28 01:17:12 -04:00
miruka
8a714fb7a0 Add Default and RememberAccount? pages 2019-04-27 21:07:20 -04:00
miruka
dc2f779d4b Make login button work for login page 2019-04-26 18:47:25 -04:00
miruka
5988eccdbb Add login page and forget room system 2019-04-26 16:02:20 -04:00
miruka
99d5fb551c Make the banner buttons work
For invitation accept/decline.
Forget remains to be implemented in nio.
2019-04-21 16:12:53 -04:00
miruka
ea8f75c729 Organize banners, add LeftBanner
Previously there was InviteOffer, now there's a base Banner component,
InviteBanner and LeftBanner.
2019-04-21 15:20:20 -04:00
miruka
9602608b87 Add inviter account informations to room invites 2019-04-21 11:15:03 -04:00
miruka
2c5dc7bd4f Handle room invites
Add them to the roomList, and have separate sections:
Invites and Rooms.
2019-04-21 06:56:59 -04:00
miruka
8f35e60801 Capitalization, list model and room header work
- 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
2019-04-20 17:43:57 -04:00
miruka
99c06e4034 Fix local echoes not sent if all threads occupied 2019-04-19 18:37:56 -04:00
miruka
aa55ffbc6a Prevent queuing lots of setTypingState
@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.
2019-04-19 18:21:19 -04:00
miruka
188dc6be98 Socket timeouts, always HTTP reconnect on errors 2019-04-19 17:17:37 -04:00
miruka
0d7728665f Handle network errors
- 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
2019-04-19 16:15:21 -04:00
miruka
9a1b91caa5 Set user typing state when using the SendBox 2019-04-19 03:11:56 -04:00
miruka
1d0cce402e Proper display name retrieval implementation
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.
2019-04-19 02:26:29 -04:00
miruka
11d900965a Add local echoing of messages
As per
https://matrix.org/docs/spec/client_server/latest.html#local-echo
2019-04-18 13:46:39 -04:00
miruka
98b494fcc2 Convert markdown to HTML for sendbox
Also pass to clientManager the Backend, and to Client the clientManager,
and set Qt parents for them.
2019-04-17 23:28:25 -04:00
miruka
a7649d1a7a Make the SendBox work, send plaintext messages 2019-04-17 23:01:26 -04:00
miruka
6ab4acdc84 Improve room past events loading
- 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
2019-04-17 22:34:22 -04:00
miruka
a0f9acddaa Load past events when scrolling up
Also keep two nio clients internally: one for loop-syncing, one for the
rest; since they can't handle more than one talk at a time.
2019-04-17 21:08:32 -04:00
miruka
8a3189df15 Add users currently typing in room bar 2019-04-14 16:12:07 -04:00
miruka
9c66166c4f Display room messages and other events 2019-04-14 12:56:30 -04:00
miruka
13fca98838 Rooms and threads fixes
- 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
2019-04-13 08:59:10 -04:00
miruka
30514fb7db Show joined rooms, delete left rooms
To make the models update correctly in QML:
- ListModel and _QtModel merged
- Return a ListModelMap QObject from properties instead of
  a DefaultDict → QVariantMap
2019-04-12 13:18:46 -04:00
miruka
5d4c7b8520 Reorganize backend files, show accounts in UI 2019-04-12 04:33:09 -04:00