Commit Graph

107 Commits

Author SHA1 Message Date
Tobias Fella
4bfd857093 Refactor input stuff
This is the start of a significant refactoring of everything related to sending messages, which is roughly:
- the chatbox
- action handling
- message sending on the c++ side
- autocompletion of users/rooms/emojis/commands/things i forgot

Notable changes so far include:
- ChatBox is now a ColumnLayout. As part of this, i removed the height animations for now. <del>as far as i can tell, they were broken anyway.</del> I'll readd them later
- Actions were refactored to live outside of the message sending function and are now each an object; it's mostly a wrapper around a function that is executed when the action is invoked
- Everything that used to live in ChatBoxHelper is now in NeoChatRoom; that means that the exact input status (text, message being replied to, message being edited, attachment) is now saved between room switching).
- To edit/reply an event, set `NeoChatRoom::chatBox{edit,reply}Id` to the desired event id, `NeoChatRoom::chatBox{reply,edit}{User,Message}` will then be updated automatically
- Attachments behave equivalently with `NeoChatRoom::chatBoxAttachmentPath`
- Error message reporting from ActionsHandler has been fixed (same fix as in !517) and moved to NeoChatRoom


Broken at the moment:
- [x] Any kind of autocompletion
- [x] Mentions
- [x] Fancy effects
- [x] sed-style edits
- [x] last-user-message edits and replies
- [x] Some of the actions, probably
- [x] Replies from notifications
- [x] Lots of keyboard shortcuts
- [x] Custom emojis
- [x] ChatBox height animations

TODO:
- [x] User / room mentions based on QTextCursors instead of the hack we currently use
- [x] Refactor autocompletion stuff
- [x] ???
- [x] Profit
2022-10-10 23:10:00 +00:00
Tobias Fella
22448ea9ae Clean up includes 2022-10-08 19:03:49 +02:00
Tobias Fella
d70a8a652a Always use system-style includes for libQuotient 2022-09-09 00:16:39 +02:00
Snehit Sah
91d1f6ffeb Show spaces horizontal bar
### Summary

This merge request adds a horizontal bar at top of room list, which shows spaces. By clicking on a space, user can filter out rooms belonging only to that specific space.

### Pending/ Help needed

#### Segfault when loading active connection on startup

Refer `void SortFilterRoomListModel::cacheSpaceHierarchy()` ([link](8c372800d7 (b969e462c30df43ef3714ea441948d8d8027f6a0_117_126))) in `src/sortfilterroomlistmodel.cpp`.

On [line 129](8c372800d7 (b969e462c30df43ef3714ea441948d8d8027f6a0_117_129)), I have called `connection->allRooms()`, which segfaults if the active connection hasn't been loaded yet. Is there a way to ensure that `Controller::instance().activeConnection()` on line 128 waits till connection is loaded?

#### Avatars

Avatars on space horizontal bar aren't aligned to vertical middle. I'll need help with that. 

Using the code below doesn't help with padding

```qml
delegate: QQC2.Control {
    topPadding: 10
    contentItem: Kirigami.Avatar { ..... }
}
```

This complains about uninitialized properties in `Kirigami.Avatar`. (`id`, `currentRoom`, `avatar`, `index` are properties utilized during run time)

After we get around these two issue, this MR will be ready from my side.
2022-08-25 13:46:09 +00:00
Akseli Lahtinen
b834510be0 Don't show notifications if application is active and same room is active 2022-06-04 23:24:24 +02:00
Nicolas Fella
1cc8d915bc Add rooms runner
This allows to search for and open rooms in KRunner
2022-04-01 10:56:19 +00:00
Snehit Sah
9a5f2e4938 Show subtitle text without markdown
Create new role in RoomListModel to send back cleaned subtitle text
2022-03-31 17:39:34 +00:00
Tobias Fella
62f6cfbf9a Force RoomListDelegate to use plaintext
Text.AutoText isn't robust enough to handle this
2022-03-08 14:45:33 +01:00
Tobias Fella
cba88e1af7 Allow disabling notification inline reply
Is temporarily required for encrypted rooms
2022-02-12 22:33:10 +01:00
Tobias Fella
dc3b1a3c87 Remove unneeded parameter 2022-02-12 22:09:38 +01:00
Tobias Fella
335ef240f5 Don't crash on empty creation event 2022-02-07 15:35:45 +01:00
Carl Schwan
7b81b545b9 Port to std::as_const 2021-11-13 19:11:47 +01:00
Tobias Fella
9027db264a Don't capture 'this' implicitely 2021-11-13 14:17:20 +01:00
Tobias Fella
011cf3c652 Fix highlighted room when opening room from notification 2021-10-03 16:21:53 +00:00
Tobias Fella
7c7d296981 Fix HTML escaping 2021-09-24 12:44:32 +02:00
Tobias Fella
d28279313d Rename type because of conflict 2021-09-24 12:42:05 +02:00
Nicolas Fella
589dfe0343 Re-run clang-format 2021-08-23 19:38:56 +02:00
Smitty van Bodegom
db1a9a0c4c Categorize Spaces as such in sidebar
Currently they are shown at the bottom, since Neochat doesn't support
displaying Spaces yet.
2021-08-03 19:54:48 +00:00
Tobias Fella
4efd1207ee Some more clazy fixes 2021-08-03 20:44:22 +02:00
Tobias Fella
2e1ab639c6 Fix build failure against changes in libQuotient API
This changes the RoomListModel's JoinState role to expose the enum value
instead of a string. We don't actually use that role anywhere so it's
fine.
2021-07-30 22:57:57 +00:00
Tobias Fella
73de1af321 Fix pagestack after login 2021-07-06 15:45:19 +00:00
Smitty van Bodegom
8474136f57 Support displaying spoilers
This adds support for displaying recieved spoilers, but not sending
them. Spoilers are displayed as a black rectangle, and can be clicked on
to be revealed. If the last message in a channel was a spoiler, it is
not shown on the left sidebar.

The spoiler blackening is done in CSS, but to check if a message
contains a spoiler for determining if it should cause a different cursor
to be displayed and if it should be shown in the sidebar, a simple check
of if the message contains "data-mx-spoiler" is used.
2021-06-17 22:39:50 +00:00
Carl Schwan
a086964769 Make sidebar collapsible 2021-06-14 12:50:09 +00:00
Tobias Fella
3ea783b370 Prioritize "low priority" over "direct chat" in roomList categories
There's no exact right or wrong here, but if a room was explicitly
marked as "low priority", we should honor this tag.

Fixes a slight inconsistency with the implementation in Element

Fixes #357
2021-05-21 21:09:21 +02:00
Carl Schwan
5f8795c41f Automatically enter room when joining it
Related to #352 but needs an additional Quotient patch to works
2021-05-07 22:37:16 +02:00
Carl Schwan
b7d98fc6d9 Port RoomManager to C++
This also makes it possible to handle the Matrix URI
2021-04-27 21:07:10 +00:00
Tobias Fella
2cb81d1276 Unify License header style in C++ 2021-04-06 19:25:06 +02:00
Tobias Fella
e4ab2e565f Apply clang-format 2021-04-04 22:43:17 +02:00
Tobias Fella
9f637ab925 Improve notification handling 2021-03-29 21:24:26 +00:00
Tobias Fella
546d17b1a2 Correctly open all kinds of matrix.to links in TextDelegate and MessageDelegateContextMenu 2021-02-04 20:23:16 +00:00
Carl Schwan
3ebda274ef Fix broken name 2021-01-13 23:15:48 +00:00
Carl Schwan
eff8c08ccf Add launcher badge to NeoChat showing the unread count 2021-01-13 20:14:51 +00:00
Carl Schwan
4be3eac7af Fix avatar loading in multiple places and prefers name instead of
display name for avatar fallback.

This also fixes a bug where users didn't get their avatar loaded in the
room list.

Fix #209
2021-01-09 00:37:13 +01:00
Carl Schwan
dce3b796c2 Don't translate something we shouldn't 2020-12-26 15:58:57 +00:00
Carl Schwan
b62e694c97 Code style 2020-12-01 11:56:50 +01:00
Carl Schwan
c5e2acdd5d Refactor lastEvent
Now lastEvent() return the last event and lastActiveTime() and
lastEventToString() are convenient functions to get the visual
representation and the timestamp.

We are also now fetching new events when the timeline is empty
so that we can correctly order the rooms. In the future, we should
instead probably cache the last event in an SQLite database to optimize
the startup time.

This also ignore state event when the configuration ask to ignore them.

Fix: #97
2020-12-01 10:55:18 +00:00
Carl Schwan
136a8f2af8 Clang-tidy + clang-format 2020-11-27 00:26:39 +01:00
Carl Schwan
7b30c199a4 [clazy] Fix allocating an unneeded temporary container
Instead of creating a new container and iterate over it, we wrap the
loop in a lambda and use the lambda for the two initial container.
2020-11-19 12:50:51 +00:00
Carl Schwan
03921e02a6 Remember last opened room 2020-11-17 19:45:22 +00:00
Carl Schwan
be1467f718 Save collapsed categories 2020-11-17 19:45:22 +00:00
Tobias Fella
d8dde6e082 Add license headers to code files 2020-11-11 15:17:23 +00:00
Carl Schwan
122a7cdd2f Rebrand files names Spectral -> NeoChat 2020-11-08 23:17:30 +01:00
Tobias Fella
95e2993f70 Implement sorting rooms by category 2020-11-08 16:13:53 +00:00
Nicolas Fella
ca97b8ddc3 Properly sort includes 2020-11-04 20:29:19 +01:00
Nicolas Fella
a08d017c02 Normalize includes 2020-11-04 20:25:52 +01:00
Carl Schwan
8b3f89cf2e Fix a bunch of clazy warnings 2020-11-03 15:15:16 +00:00
Carl Schwan
ce69506cf6 s/emit/Q_EMIT 2020-11-03 12:03:06 +01:00
Carl Schwan
bea870ad75 Apply Clang Format 2020-11-02 16:11:24 +01:00
Black
6af7befd11 Improve room settings dialog. 2020-01-22 20:37:27 -08:00
Black Hat
e5032c686a Public room directory. 2019-12-25 00:02:01 +08:00