* 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>
- 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
* 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>
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.
- 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
Go to the corresponding account settings instead of trying to focus the
first room of the target account if there is one.
This makes the behavior consistent across expanded and collapsed
accounts, and with the Keys.Account.(previous/next) keybinds that
were changed to work in this way in commit
4f4bc90faa6c4868552004b5f5cfd5f17f59cfd9.
Instantiator is better suited to the task: Repeater is specially
made to load visual components, and that forced us to wrap the
HShortcuts inside empty Items.
Alt+M: toggle "mute all notifications except highlights"
Alt+Shift+M: toggle "mute all notifications"
The Keys.Rooms.(previous/next)_highlight keybinds, previously bound to
Alt+(Shift+)M (stood for "mention") now defaults to Alt+(Shift+)H.
The NotificationLevel enum and notificationLevel property had to be
moved from Window to UI due to QML having a global "Window" object that
causes conflicts when trying to access the enum as
"Window.NotificationLevel" from UI.qml.
- More descriptive menu entries
- Indicate the current setting in the menu with a checkmark
- Remove menu button tooltip that gets in the way
- Remove unused icon
Pin/unpin is more representative of what the function actually does
for rooms in the left pane. Also change the corresponding icons and
renames the config file section: RoomList.Bookmarks → RoomList.Pinned
Add RoomList.local_unread_markers option to settings.py,
which is False by default.
Before, this way always enabled and conflicts with push rules by marking
anything as unread without any logic.
When clicking on an account in the top account bar or using the
Keys.Account.(previous/next) keybinds, go to the corresponding
account settings instead of trying to focus the first room of that
account if there is one: user might not want to clear the read marker of
any random room that is out of view and happens to be the first in the
list.
- Cleaner design for the backend user_files classes and simplified
interaction with QML
- Config and theme files will now automatically reload when changed on
disk
- Removed manual reload keybind and button
The goTo{Previous,Next}{Unread,Mentioned}Room keybinds only took into
accounts rooms that had a server-sent unread/highlight count, and not
those that only had a client-side unread "!" badge (e.g. for rooms that
get new messages but that have push rules disabling notifications).
Introduce a bookmark system for rooms:
a room bookmarked will always appear on top of every other
(for a given account).
Bookmarking can be done through context menu on targeted room
(as well as un-bookmarking) or through settings.json
(key roomBookmarkIDs) for permanent bookmark.
roomBookmarkIds is a {account_user_id: [room_id]} dict.
Require double click to open homepage (#140)
* Update TopBar.qml
To raise Mirage's window in a stacking wm, clicking on an area
without text, especially in the topbar, is probably what most users do.
In the case of the 2nd button in the topbar this currently accidentally
opens a browser window and thus becomes a privacy issue.
So for now require a double click to open mirage's homepage.
Alternatively the size of this button should at least be closely
restricted to the text "Mirage ${version number}".
In the long term it might be preferable to put this link into
some kind of "about" section instead of the "title" section.
* Make tooltip indicate that double click is required
Co-authored-by: miruka <miruka@disroot.org>
Sometimes and randomly, a HListView/HGridView delegate's
add/populate transition will stop before completion.
This especially happens on startup when loading a large room list,
one room might get stuck and left tiny or invisible, despite its
normal space still being taken.
Returning a Future doesn't work on Windows for some reason
(https://github.com/thp/pyotherside/issues/116).
Instead of using these objects from QML to cancel running coroutines,
call a Python QMLBridge function that takes a coroutine UUID and will
take care of the cancelling.
The "Mentions & keywords only" option doesn't work yet in multi-account
cases: when notifications arrive for a room that multiple accounts are
part of, the first notification to arrive is let through, and the
duplicate later ones are ignored. The first notification to arrive may
not be from the account that gets highlighted, thus it is ignored under
the "Mentions & keywords" setting.
Previously, clicking to select a room would make the list jump around
to become centered again. This behavior is now reserved to keyboard
navigation.
A "centerRoomListOnClick" setting has been added to allow going back
to the previous behavior.