Commit Graph

2772 Commits

Author SHA1 Message Date
Maze
1d3ec44919 Allow apostrophe in URL regex
Apostrophe is a valid URL character.
Example: https://en.wikipedia.org/wiki/Benford's_law
2021-07-26 04:39:58 -04:00
Maze
884d22938b Add keys to jump to latest/oldest unread (#214)
* Key to jump to latest/oldest unread #186

Latest/oldest unread/highlight.
Default bindings match the bindings for previous/next unread/highlight.

Allows the user to read messages in the order of receiving them.
Or the opposite order, to stay on top of things.

* Clean up code

Use let instead of var, and proper indentation

* Fix case for some variables in RoomList.qml

Some variables were using snake_case instead of camelCase like usually
done in QML code (note that the model items come from python)

Co-authored-by: miruka <miruka@disroot.org>
2021-07-26 04:39:58 -04:00
miruka
888b8b32c1 Fix account saved with incorrect presence on login
Saving account with an echo_ presence resulted in error 400 on /sync due
to the server not understanding the presence we're trying to set
2021-07-26 04:39:58 -04:00
Maze
d32370fc3a Made some animations unaffected by theme
People modify animationDuration because they want a snappy client.
But it also affects a few things that do not contribute to that
and should remain constant speed:
- Busy indicator
- Progress bar animation
- Ping indicator in AddAccount ServerBrowser
- Image rotation button cooldown
2021-07-26 04:39:58 -04:00
miruka
c4a0e73e19 Hide prev status msg for accounts w/out presence 2021-07-26 04:39:58 -04:00
miruka
d4b9fc60a4 Fix invisible presence restoration
When we are invisible and restart the client, set ourself to invisible,
not offline, and correctly keep the status message that should be set
whenever we get back to a visible online.
2021-07-26 04:39:58 -04:00
miruka
22bce261d3 Yet another try at fixing presence endless loop 2021-07-26 04:39:58 -04:00
miruka
86c0cb1bf2 Add Presence.saved_status option
Controls how many previous status to keep saved in account menues,
see previous commit.
2021-07-26 04:39:58 -04:00
miruka
3402a1d5f8 Improve account status msg field & add history
- Up to 5 previously set status are now shown under the field
  for quick access; the history is shared between accounts

- When focusing the field, the text gets auto-selected since most of the
  time we want to set a totally different status, not edit the current one

- Typing in the field will autosuggest any matching history entry

- Keyboard focus now skips the "apply" button, since we can just hit
  enter in the field
2021-07-26 04:39:58 -04:00
miruka
67edd63c5a HComboBox: allow popup and indicator to be null 2021-07-26 04:39:58 -04:00
miruka
c9ee604cf3 Show inviter as subtitle for room list invites
Also fixes the centering of the enveloppe icon for invited rooms with a
subtitle.
2021-07-26 04:39:58 -04:00
miruka
02b4bddce5 Be invisible on startup, not echo_invisible
If our presence is invisible from the first sync, we'll never receive a
presence event telling us so.
The server just knows from the beginning, so show our local presence as
echo instead of echo_invisible (which causes the half-opacity presence orb)
2021-07-26 04:39:58 -04:00
miruka
c1f5605c1c Ignore offline presence updates for our account
If another client becomes invisible/offline or we stop syncing for some
time (due to e.g. connection issue or debugger freeze), the server will
tell us our presence is offline. Following this update would lead to our
our current connection being terminated, so ignore it.

Side-effect: if we become invisible and another client with this behavior
is using the account at the same time, this will result in us becoming
online/unavailable again a few seconds later, since we follow
updates for these status to avoid conflicts
2021-07-26 04:39:58 -04:00
miruka
93505dc44f Rework chat invite/left banners
The banners shown in place of the composer for invited and left rooms
suffered from numerous problems due to being written very long ago and
untouched since then: unflexible components, layout glitching at certain
size, and focus issues.

These elements have been reimplemented as part of the Composer using
standard components, handle lack of space/width much better and
correctly take focus when switching rooms or the room's state changes.

Other note, the inviter's avatar is no longer shown in place of where
the current writing user is currently shown, to maintain consistency and
keep an indication of which account the user is acting as.
The inviter's profile should be available in the right pane, but nio
apparently doesn't give us member events for invited rooms.
2021-07-26 04:39:58 -04:00
miruka
7d546b6565 Room items subtitles: fix redacts HTML escaping
Redaction events displayed as subtitles of left pane rooms were
accidentally double-escaped, leading to e.g. "X's message was removed by
Y" being rendered without the apostrophe
2021-07-26 04:39:58 -04:00
Maze
b6773c724e Add keys for direct room switching (#209)
* Add Keys.Rooms.Direct configuration

Keybinding to jump to specific room id in specific account id, or the
first occurence of specific room id in any account.

* Default binding was a bad idea

This example binding was preventing the user from binding Ctrl+G,Ctrl+M
to something else.

* Use const instead of var

* Use showItemAtIndex for direct room switching

This is a simpler implementation that better fits in the existing
codebase and doesn't really have drawbacks.

* Use existing findIndex

From roomList.model. Instead of reinventing it

* Made example not a real room

Earlier I made it point to the Mirage room

* Add instructions for copying room ID

After noticing that these IDs do not match Matrix room addresses, I felt
it was necessary to explain this here, even if it's already explained in
other parts of the configuration file.

* Use .split(" ") for splitting descriptions

This is a more readable implementation.

* Fix shortcuts breaking on config reload

Wrapping HShortcut in Loader makes it destructible.
See d53978f62bab35cdc7e115c50f0571f736814582

* Cleanup showRoomByDescription method, now showById

- "Room description" is a vague, it sounds like this is about
  the room topic too. Instead of having a function that takes a
  string with a certain format, take explicit arguments for the user and
  room ID, this way we don't need comments to explain what's going on
  either

- Reduce indentations and {} noise to make it simpler to read

* More details for direct room binds config comment

Co-authored-by: miruka <miruka@disroot.org>
2021-07-26 04:39:58 -04:00
miruka
61996400d0 Fix shortcuts in instanciators breaking on reload
When reloading the config file, the HShortcut within Instanciators (e.g.
Rooms.AtIndex) were deleted then recreated.
Except Shortcut happens to be an indestructible object type.
Thus the old HShortcuts left alive were conflicting with the ones
recreated, causing them to be called ambiguously.
Loaders are destructible, so we wrap the shortcuts inside one to fix the
issue.
2021-07-26 04:39:58 -04:00
miruka
3279a1befd Fix missing tail for inline <mx-reply> 2021-07-26 04:39:58 -04:00
miruka
7a33ecdb86 AccountSettings: fix setting display name 2021-07-26 04:39:58 -04:00
miruka
3d350910e7 Fix rendering status msgs with HTML-unsafe chars
Status messages containing characters like ' or <> were stripped out
in the Account and Member delegates
2021-07-26 04:39:58 -04:00
miruka
18f742966e Presence fixes and improvements
- Allow using invisible mode on servers not supporting presence, to
  make use of the prevention of sending typing notifications and read
  marker updates

- For servers not supporting presence, display the account's presence
  orb in the left pane with half opacity

- Indicate in the presence orb tooltip when the presence we set hasn't
  yet been noticed by the server/the server doesn't support presence

- When reconnecting after being offline, if the server doesn't indicate
  we have a status message [set from another client], restore any
  previous message we had set in the current client

- Show our status message striked out when we're invisible or offline to
  indicate that it isn't being broadcasted

- Some code style cleanups

- Try to handle cases where we set a presence, but receive a new
  presence event for our account before the server takes notice of that
  new presence we want, which probably resulted in the "account keeps
  switching between online and unavailable every few sec" glitch
2021-07-26 04:39:58 -04:00
miruka
909756cff7 Raise default tooltips_delay setting to 0.7s 2021-07-26 04:39:57 -04:00
miruka
de7e14f9ca Color reply prefix in room delegate last message 2021-07-26 04:39:57 -04:00
miruka
a208ba3991 Fix applying AccountSettings ignore users field 2021-07-26 04:39:57 -04:00
miruka
49f97d614e Rework UnexpectedErrorPopup to be more practical
- Instead of opening a popup for every single error that occurs,
  combine them into an unique one

- Increase the maximum width, make those tracebacks readable
2021-07-26 04:39:57 -04:00
miruka
2aebab5919 UnexpectedErrorPopup: implement "Report" button
Currently just opens the issue section of the CONTRIBUTING.md
in users's browser.
2021-07-26 04:39:57 -04:00
miruka
4ef8e2f1fb AddChat tab titles: say "group" instead of "room"
Helps users new to Matrix in knowing what to click, as the direct chat
option explicitely creates a 1-to-1 experience, while "create room"
(now "create group") could be also be used as such but asks for more
details and wouldn't mark the room as direct.

The content of the tabs still say "room" as that is the correct general
term for anything that contains one or more user.
2021-07-26 04:39:57 -04:00
miruka
decb12d6ba Tweak room settings checkbox texts
Always use present tense and shorten text length while trying
to be more precise
2021-07-26 04:39:57 -04:00
miruka
93404559b9 Add ignored users list to account settings 2021-07-26 04:39:57 -04:00
miruka
719938d1db JSONize for QML any Collection, not just list/dict 2021-07-26 04:39:57 -04:00
miruka
30919eca7a FieldHelpButton: always show tooltip on click
Rather than toggling display of the tooltip.
Since the tooltip will show up on hover too, the user might quickly
hover then click on the button only to see the tooltip immediatly
disappear.

Closing the tooltip can still be done by moving the cursor away from the
button, or tapping on it/anywhere else.
2021-07-26 04:39:57 -04:00
miruka
e4f3339675 Improve explanation & spacing for alias field help 2021-07-26 04:39:57 -04:00
miruka
dc0ed43f72 Add ignore user options in member context menues 2021-07-26 04:39:57 -04:00
miruka
678a56400a Add ignoring invite sender & fix forgotten rooms
When declining an invite, the popup now offers a checkbox to also add
the sender to the account data m.ignored_user_list event.

This will hide any further invite or message from that user in syncs,
and also immediatly remove the ones we currently have.

As a side-effect, the long-time bug that caused forgotten rooms to
immediatly reappear due to received a "<user> left" event has been
fixed.
2021-07-26 04:39:57 -04:00
miruka
8ea951957d Fix PageLoader.showPrevious when history size < 2
If there was only one entry (the current page) in the page history,
showPrevious() would just reload that page and not return false like
supposed to when no history movement was done.

When forgetting a room in those circumstances, this would also prevent
the switch to the "secret default page" and just leave the user on a
loading spinner for a room that didn't exist anymore.
2021-07-26 04:39:57 -04:00
miruka
3683d7db20 Chat InviteBanner: make decline button spawn popup
Rather than leaving the room as soon as the button is clicked.
This offers the option of also forgetting that room, and will allow
checking a future "ignore inviter" too.
2021-07-26 04:39:57 -04:00
miruka
70ae16a7c1 Merge the Leave and Forget room popups 2021-07-26 04:39:57 -04:00
miruka
b40c43ef2f DirectChat: fix warning from half-leftover line 2021-07-26 04:39:57 -04:00
miruka
fb84ea41c5 Fix forgetting already left room 2021-07-26 04:39:57 -04:00
miruka
7db0e07281 Fix lock_room_position error when forgetting room 2021-07-26 04:39:57 -04:00
miruka
96a1e57f47 LeaveRoomPopup: new text for declining invites 2021-07-26 04:39:57 -04:00
miruka
334065895f Open links keybinds: ignore message mentions
When using the open_links_files(_externally) keybinds on a message,
ignore the URLs that mentions (user ID, username, room ID, room alias)
point to.
2021-07-26 04:39:57 -04:00
miruka
208e08ed2a Shorten reply text for room list last messages
For rooms in the room list, when the last message displayed under the
room name is a reply, change the
"In reply to @foo:example.org: original message... ⏎" text shown
before the actual reply content to just "↩ foo: ".

This lets the user preview the actual interesting part of the message,
instead of a long "In reply to" that takes all the available width.
2021-07-26 04:39:57 -04:00
miruka
20e8a19017 Unify cancel button & escape keybind for pages
AddChat and AccountSettings:

- When clicking the cancel button, if there's no previous back to go
  back to, focus the main pane instead of doing nothing

AccountSettings:

- Always enable the cancel button, not just when the form has been
  modified

AddChat, AccountSettings, ServerBrowser:

- Pressing escape will do the same thing as clicking the cancel button
2021-07-26 04:39:57 -04:00
miruka
01e7a1ac13 Add back button to all pages in thin window mode
In "mobile mode" where main pane is hidden due to application's width:

- Show a back button in the tab bar of the AccountSettings and
  AddChat pages

- Show a back button in the address field (opposite to the "next
  button") of the ServerBrowser, unless there are no accounts added yet
  (application first run) and the main pane would be empty
2021-07-26 04:39:57 -04:00
miruka
46e058f2de Add conveniance HDrawer.normalOrForceCollapse prop 2021-07-26 04:39:57 -04:00
miruka
4925b5a134 Back/FW UI buttons tooltips: shorter & consistency 2021-07-26 04:39:57 -04:00
miruka
fb1de364a6 Change style of "go to ..." arrow icons
Use more pronounced "→" style arrows rather than ">"
2021-07-26 04:39:57 -04:00
miruka
e601a378d8 Workaround Qt's lack of support for HTML <hr>
When processing message HTML for the client from python, turn <hr>
tags into <p>──────...</p> em dash lines
2021-07-26 04:39:57 -04:00
miruka
bcb9ffcf9d Room settings: add room ID text area + copy button
The only way to see a room's ID previously was to right click a room in
the left pane, copy option, and paste it somewhere.
2021-07-26 04:39:57 -04:00