Commit Graph

135 Commits

Author SHA1 Message Date
miruka
5ad13aed7d Same avatar-content spacing for events and msgs 2019-04-29 23:58:17 -04:00
miruka
012e89f6cb Improved ListModel and ListItem
- 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()
2019-04-29 23:51:37 -04:00
miruka
67c3ef5906 Disable QML cache, responsible of multiple bugs 2019-04-28 20:37:11 -04:00
miruka
c4fb0c1150 Fix SidePane indent at minimum size 2019-04-28 15:52:26 -04:00
miruka
4433e48611 Fix QtQuick.Layout version, MessageContent wrap 2019-04-28 15:45:42 -04:00
miruka
70ca608961 Lower opacity for boxes in HStyle 2019-04-28 15:38:08 -04:00
miruka
ef60a1129f Clean up QML imports 2019-04-28 15:36:43 -04:00
miruka
f714c85d75 HSpacer component for layouts 2019-04-28 15:22:53 -04:00
miruka
d0089df051 Use Base components without namespace prefix 2019-04-28 15:18:36 -04:00
miruka
89fcfbea82 Colors for controls and PaneToolBar 2019-04-28 15:13:18 -04:00
miruka
b8901dfc5b Use H*Layout totalSpacing wherever possible 2019-04-28 14:54:01 -04:00
miruka
455490b5af Use Loaders for RoomEventDelegate 2019-04-28 14:48:59 -04:00
miruka
7004b4ea3f Reorganize Chat component files
- MessageList renamed to RoomEventList
- MessageDelegate renamed to RoomEventDelegate
- Banner and RoomEventList get their own folders
2019-04-28 14:34:29 -04:00
miruka
99ab6a817a Update/refactor Chat components and banner 2019-04-28 14:20:30 -04:00
miruka
bf9eb7dbc9 Use HColumnLayout in HInterfaceBox 2019-04-28 12:47:51 -04:00
miruka
c5794424ed Capitalize all component folders 2019-04-28 12:45:12 -04:00
miruka
e64b233427 Better default SidePane size 2019-04-28 12:40:42 -04:00
miruka
87c72e32db Update SidePane componants, add Base.HColumnLayout 2019-04-28 12:40:18 -04:00
miruka
2e8e042808 Replace HToolButton usages with HButton
Also change sidePane toolbar: option button and filter rooms field
2019-04-28 12:10:34 -04:00
miruka
80067b5060 Add HScrollableTextArea and make SendBox use it 2019-04-28 11:53:47 -04:00
miruka
25badb693d Use HImage for HStatusAvatar 2019-04-28 11:34:05 -04:00
miruka
83272b9580 Update and improve HAvatar code 2019-04-28 11:32:02 -04:00
miruka
be4b15e484 Add missing H prefix to some base componants 2019-04-28 11:21:19 -04:00
miruka
f49b3e4b62 Fix sendbox freeze when typing more than one line 2019-04-28 11:08:09 -04:00
miruka
5650234e3b Restyle the chat UI 2019-04-28 11:03:08 -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
d3749af4bc Boxes blur, more styling 2019-04-28 00:46:40 -04:00
miruka
8a714fb7a0 Add Default and RememberAccount? pages 2019-04-27 21:07:20 -04:00
miruka
0db5a3233d Change pages organization
- 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
2019-04-27 18:54:33 -04:00
miruka
e09efaecda Refactor LoginPage into separate components 2019-04-27 18:00:28 -04:00
miruka
102baccbe5 Login loading icon
Add standard mechanism in HButton for loading icon display;
have HImage and HIcon base components.
2019-04-26 21:16:57 -04:00
miruka
dc2f779d4b Make login button work for login page 2019-04-26 18:47:25 -04:00
miruka
c7dd602687 Fix room forget and buttons bugs 2019-04-26 16:52:26 -04:00
miruka
5988eccdbb Add login page and forget room system 2019-04-26 16:02:20 -04:00
miruka
34d2bd233d Set parents for all QObjects 2019-04-22 14:24:45 -04:00
miruka
6664fc29e3 Better default size for ApplicationWindow 2019-04-22 14:02:55 -04:00
miruka
33743baa12 Use same color as avatars for message user names 2019-04-22 11:45:08 -04:00
miruka
4607f53b7a Show special text when room has no events yet
e.g. if invited to a room but there's no history provided by
another account.

Also add a signal for the ListModel.count property.
2019-04-22 11:31:06 -04:00
miruka
f6ae315fb2 Improve Makefile test, add additional checkers 2019-04-22 09:37:49 -04:00
miruka
237d750d47 Overhaul room list sorting 2019-04-21 20:55:24 -04:00
miruka
424405e3e8 Set invited and left rooms position in model
Invited rooms at the start, left rooms at the end, with the bonus effect
of fixing the roomList height problem.
2019-04-21 16:53:16 -04:00
miruka
677117983a Set hourglass icon when clicking accept/decline
PyQtFuture's gotResult signal can now be used from QML/JS.
2019-04-21 16:31:48 -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
ac70634256 Remove uneeded "Rejoin" button 2019-04-21 15:40:05 -04:00
miruka
4dced63b63 Fix banners not live-updating 2019-04-21 15:34:08 -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
909e1c3363 Fix and improve room members event texts 2019-04-21 12:25:55 -04:00
miruka
94d6bc0e52 Fix roomList height with sections 2019-04-21 11:39:29 -04:00
miruka
9602608b87 Add inviter account informations to room invites 2019-04-21 11:15:03 -04:00
miruka
bbf29e29b1 Add InviteOffer component 2019-04-21 10:44:04 -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
c866ac87a9 Remove quotes from id: properties
As suggested in the Qt Quick coding style
2019-04-20 17:45:51 -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
b33f5f1d34 Fix date and top padding when loading previous msg 2019-04-20 03:29:24 -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
9e5e2c6718 Use a Deque for roomEvents's ListModel
- 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.
2019-04-17 17:24:36 -04:00
miruka
f0dab1801a Order the roomEvents models from newest to oldest
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.
2019-04-17 16:43:18 -04:00
miruka
7e62da8733 Fix image position and filter() return 2019-04-17 14:27:22 -04:00
miruka
c4f46f42b6 Add image previews in HTML messages 2019-04-17 13:44:04 -04:00
miruka
aa105e0c2c Make links in messages clickable 2019-04-17 10:54:55 -04:00
miruka
a7bf1fca44 Sanitize HTML displayed as message content 2019-04-17 10:49:54 -04:00
miruka
8a3189df15 Add users currently typing in room bar 2019-04-14 16:12:07 -04:00
miruka
3ec51b9253 Fix room subtitle reloading
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).
2019-04-14 14:33:57 -04:00
miruka
5a180120b1 Fix date color for undecryptable events 2019-04-14 14:18:53 -04:00
miruka
c5d5add2f8 Fix EventContent not being word-wrapped 2019-04-14 14:16:38 -04:00
miruka
d36cbbc7df Bring back room subtitles
Show last appropriate room message/event as subtitle
2019-04-14 14:09:54 -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
d8c6ffefe0 Fix roomList height calculation 2019-04-13 06:28:24 -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
miruka
4f9a47027c matrix-nio backend start, QGuiApplication class
- 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
2019-04-11 13:22:43 -04:00
miruka
3b47fee77d Prevent sending empty message 2019-03-27 19:24:28 -04:00
miruka
e4a9fb40ac Add avatar with status icon componant
Will be used later for 1-to-1 user room delegates and room members pane
2019-03-27 19:24:23 -04:00
miruka
c35f7f35af Show last room message as roomDelegate subtitle 2019-03-27 18:43:08 -04:00
miruka
463dca7c55 Fix expand/collapse account button height 2019-03-27 16:43:25 -04:00
miruka
9d838ff57a Disable roomList scrolling within accountLists 2019-03-27 15:53:29 -04:00
miruka
76b699ad64 Organize project files
Put QML components into folders, remove unused ones, split __init__.py
with engine.py.
2019-03-26 05:52:43 -04:00