Commit Graph

1985 Commits

Author SHA1 Message Date
miruka
e65202cfbe Fix checkbox update when default state changes
Make sure to update checkboxes when their default value changes
and the user hasn't already changed the value themselves.

This fixes a dangerous issue with new room switching and
room settings checkboxes keeping their value from the previous room.
2020-09-16 07:46:27 -04:00
miruka
9ac4cd0a97 Separate localEcho & readCounter theme properties
Allows making the hourglass gray by default again, while the read
counter uses the accent color.
2020-09-16 06:40:21 -04:00
miruka
0db80d312b Bump to version 0.6.3 2020-09-15 15:03:47 -04:00
miruka
5ce30d6019 Add message echo/read counter color theme property 2020-09-15 14:55:03 -04:00
miruka
d7d111705f Don't center the room list on clicks by default
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.
2020-09-14 12:02:28 -04:00
miruka
2712896456 Show read marker counts on messages
Tells how many people have the message as their last seen one in the
room.
2020-09-14 11:58:37 -04:00
miruka
0d7a33d3a9 Unify Sessions (shift+)tab and up/down navigation 2020-09-13 19:28:50 -04:00
miruka
fb846226f8 Focus filter field on member profile exit 2020-09-13 19:16:46 -04:00
miruka
9b1608b696 Delay members loading for faster room switching 2020-09-13 16:05:23 -04:00
miruka
6df9647b59 Faster switching of rooms from different accounts
Use a single [userId, roomId] property for the chat page.
This gets read of the intermediate state where the userId property has
been updated but the roomId one not yet, which led to the page unloading
and reloading itself until both were properly set.

Side-effect: when starting Mirage after this commit for the first time,
the last saved page will not load and user must click a room or
other page manually.
2020-09-13 16:05:15 -04:00
miruka
32679aa7f8 Abandon fetching offline presence on 400 error
It seems like some servers return a M_UNRECOGNIZED code instead of
M_FORBIDDEN or "offline" when trying to fetch the presence for a user
and it's not available.

Fixes https://github.com/mirukana/mirage/issues/116
2020-09-13 10:34:01 -04:00
miruka
a9c316fcf5 Store read receipts in event model items 2020-09-11 14:50:27 -04:00
miruka
d51d266642 Add ModelItem.notify_change() for list/dicts 2020-09-11 14:50:27 -04:00
miruka
7580ecfd64 Fix missing typing.Tuple import in model.py 2020-09-11 14:50:27 -04:00
miruka
59748c7cc8 EventDelegate: better separationSpacing formatting 2020-09-11 14:50:27 -04:00
miruka
0ccf3d03c9
Merge pull request #125 from vSLG/system-tray
Add a system tray icon
2020-09-11 13:52:20 -04:00
vslg
b10234768b Do not use qFatal on component error loop
Using qFatal will terminate the program when it
prints the first error, so use qCritical to print
all errors and then terminate the program.
2020-09-08 08:48:38 -03:00
vslg
67012d6334 Move tray code to a reasonable place
- Move required properties to top
- Do not use concatenation on qsTr, use .arg()
2020-09-08 08:47:00 -03:00
vslg
ae9f88cae5 Fix show up watcher 2020-09-08 08:47:00 -03:00
vslg
4382edc8b0 Rename drawAttention to restoreFromTray 2020-09-08 08:47:00 -03:00
vslg
438b368be6 Fix typos and improve code
- Do not end log messages with '.'
- Rephrase some messages
- Do not use braces on case statement unless there
  is an assignment
2020-09-08 08:47:00 -03:00
vslg
6f9d983e03 Use settingsFolder instead of configDir 2020-09-08 08:47:00 -03:00
vslg
c41ed5d77d Improve system tray icon click behavior
- Middle click now closes Mirage
- A normal click now toggle window visibility
2020-09-08 08:47:00 -03:00
vslg
a543c79c02 Use Qt.quit() when closing the window
Qt.quit() is used because KDE Plasma will minimize
to tray by default when clicking on X button
2020-09-08 08:47:00 -03:00
vslg
8a04f80602 Use application name instead of hardcoding Mirage 2020-09-08 08:47:00 -03:00
vslg
bde7af8a5a Move system tray icon code to its file 2020-09-08 08:46:40 -03:00
miruka
b12e38f41b Fix emote events (/me) display name display 2020-09-05 09:14:40 -04:00
miruka
5dca7d0a35 Remove leftover debug prints in PageLoader 2020-09-04 20:01:54 -04:00
miruka
d48f96f219 Describe power levels <0 as "muted" in event text 2020-09-04 19:56:31 -04:00
miruka
d5212b0f84 Fix power level reset back to default not seen
Previously, changes in power level events where a key is set back to the
default and absent from the "current levels" dict (e.g. a muted user -1
is unmuted and becomes 0, the room default, thus is only present in the
"previous levels" dict) were taken into account when generating the
event text.
2020-09-04 19:51:27 -04:00
vslg
9ee4b14aa2 Add watcher for .show file in config directory
Draw attention when the .show file is created.
It is created when attempting to open another
instance of Mirage with the same configuration.
2020-09-04 17:43:02 -03:00
vslg
56ad0b9975 Add config option closeMinimizesToTray
Options of the system tray icon:
- Hide/show Mirage
- Quit Mirage

Draw attention to Mirage when clicking on the icon
2020-09-04 17:30:12 -03:00
vslg
6061b2f061 Add simple lock file per configuration
Make use of lock files in configuration directory
for preventing multiple instances of Mirage from
being running at the same time, at least for a
single configuration.
Running multiple instances of Mirage is known to
cause encryption errors in one or more instances.
2020-09-04 17:30:12 -03:00
vslg
bbcdcde53f Add simple system tray 2020-09-04 17:30:12 -03:00
miruka
acb1367f11 Fix warnings when uploading to non-E2E room
Fix these:

    <Unknown File>: media_crypt_dict is undefined.
    Adding an object with a undefined member does not create a role for it.
2020-09-04 14:57:09 -04:00
miruka
56f676e35d "X removed this event": say "message" instead
That's what was supposed to happen for non-media message events
since redactions were implemented, but seems like nio doesn't
properly keep the original event type.
2020-09-04 14:52:10 -04:00
miruka
ebfc3d3ee2 Fix redacted media events keeping their thumbnails 2020-09-04 14:47:47 -04:00
miruka
65a1324eb0 Fix initial and non-initial sync filters reversed
Issue introduced in 758edd8a6a (0.6.1)
The filter for the first sync was passed as the filter for later
syncs and vice-versa, which caused problems like redaction events never
arriving.
2020-09-04 14:40:00 -04:00
miruka
89f8cf25d3 Show login page if current was for logged out acc. 2020-09-04 14:05:07 -04:00
miruka
8376d85961 Fix possible segfault when EventDelegate destroyed 2020-09-04 12:57:46 -04:00
miruka
7b6478f514 Correctly handle account with invalid access token
Show a popup saying the session was signed out and cleanup
the models data, instead of spamming the users with
never-ending errors.
2020-09-04 11:25:29 -04:00
miruka
3c9895b0b2 Fix EventHandlers.onModelCleared callback 2020-09-04 10:58:04 -04:00
miruka
1c306f421a Fix PageLoader initial page when no account 2020-09-04 10:51:33 -04:00
miruka
99ae075bb4 Reset composer when recycling chat page 2020-09-03 18:30:36 -04:00
miruka
82bcc29475 Field/area: insertAtCursor() when restoring text
Instead of assigning to `text` directly, which kills editing history and
has worse performance.
2020-09-03 18:27:31 -04:00
miruka
2545ba6c00 Reset room pane state when recycling chat page
Side effect: the members filter field's text is no longer saved to disk
2020-09-03 18:09:50 -04:00
miruka
601b42a503 Rename PageLoader.showPage() → PageLoader.show() 2020-09-03 17:33:19 -04:00
miruka
90929691c6 PageLoader: remove unused proporties 2020-09-03 17:31:33 -04:00
vslg
180e995f33 Print Window.qml component creation errors 2020-09-03 12:26:19 -04:00
miruka
2b45c07819 Fix starting Mirage when initial page isn't a chat 2020-09-03 11:08:31 -04:00
miruka
462d3972ff Small window: close main pane when recycling page 2020-09-03 11:06:45 -04:00
miruka
f5c6a2627b Improve pageLoader animation 2020-09-03 10:49:15 -04:00
miruka
3f339b7bb9 Add global baseGIFSpeed property to DebugConsole
for great debugging
2020-09-02 15:56:13 -04:00
miruka
bed19eb117 Play appearAnimation when recycling page 2020-09-02 15:25:02 -04:00
miruka
e947fe7695 Refactor PageLoader show methods
Also lets the chat page recycling work with showPrevious() (ctrl+tab)
2020-09-02 15:19:27 -04:00
miruka
a4bbbfee87 Recycle chat pages if possible when switching room
The chat page is complex and slow to create, which creates a visible lag
when user switches room.

Instead of throwing the pre-switch one away and
making a new one from scratch, keep the same page and update its user &
room ID for a big improvement in responsiveness. The rest is automatic
thanks to QML property bindings.
2020-09-02 15:19:21 -04:00
miruka
509c4a0871 Add defaultCurrentIndex to H(List/Grid)View
When the model of a view changes, Qt automatically sets the
currentIndex to 0.
Reset it back to the set default (usually -1) instead.
2020-09-02 14:40:06 -04:00
miruka
3fb64dbef5 Fix EventContextMenu errs if timeline has 0 events 2020-09-02 14:02:12 -04:00
miruka
d8c006a8c8 Remove a bunch of leftover debug prints 2020-09-02 13:41:31 -04:00
miruka
f5cb3ecaa0 Keep a {id: item} cache for ModelStore models
Accelerates the ModelStore ListView find() function,
which now just has to get an object key instead of looping through the
whole model.
2020-09-02 13:38:11 -04:00
miruka
b1398e5dbf EventDelegate: remove pointless content x Behavior 2020-09-02 12:06:09 -04:00
miruka
eebe215a62 Fix image viewer size 0x0 while loading & for GIFs 2020-09-02 11:53:44 -04:00
miruka
5a1ca24e65 Image viewer open: pause timeline URL preview GIF 2020-09-02 11:40:49 -04:00
miruka
377f1ffd4a Fix URL preview thumbnail GIFs not being animated 2020-09-02 11:37:51 -04:00
miruka
519eaa2ca0 EventDelegate: replace json() by dict() for debug
When debugging an event, `target.dict()` will return an object that can
be properly worked with and pretty-printed using the `.j` command.
2020-09-02 11:26:44 -04:00
miruka
9c4d37f64b Fix copying non-message single event text
For events with no body in their source, copy Mirage's generated
content text.
2020-09-02 10:56:45 -04:00
miruka
b79006f2ec Rename menu "Debug this event" to just "Debug" 2020-09-02 10:43:12 -04:00
miruka
b3ca5599cf Simplify & fix bugs event images context menu
Fix copy menu entries for messages with URL thumbnail previews
2020-09-02 10:40:37 -04:00
miruka
648c37f413 Refactor event context menu into its separate file
Have only one menu component attached to the EventList,
instead of every delegate carrying its own.
2020-09-02 09:47:42 -04:00
miruka
b5b968db3a Focus center event if scrolled up when ctrl+j/k
When using the focus(Previous/Next)Message keybinds, no message is
focused and the view has been scrolled up, focus the message in the
center of the view instead of returning to the list's bottom to focus
the most recent one.
2020-09-01 18:24:40 -04:00
miruka
a1b9f34958 Add setting to sort rooms lexically 2020-09-01 14:42:08 -04:00
miruka
8d61826887 Fix up/down not working with cursor in @word
In the composer, when the text cursor was inside a word starting
with a @ but not matching any username (thus the completion UI being
invisible), pressing up/down arrow would not do anything instead of
going to the prev/next line.
2020-09-01 14:27:28 -04:00
miruka
8b37ca2524 Add a persistent zoom setting to settings.json
The zoom keybinds now modify this setting directly.
The `uiScale` property in themes now default to using this zoom setting,
since just removing it would need of annoying changes through theme
files and QML code, and is best left to until the future theming
overhaul update.
2020-09-01 14:19:40 -04:00
miruka
bd8c6ec0fc Force-reload background image on config reload
Make it possible to see the change without restarting Mirage if an
image used for the theme's background was edited, or if used did the
mistake of typing "/path/to/img" then corrects it to
"file:///path/to/img".
2020-09-01 14:08:31 -04:00
miruka
63ccca60cb Fix theme file finder ignoring $MIRAGE_DATA_DIR 2020-09-01 14:05:19 -04:00
miruka
f5ad22fcfb EventDelegate: fix separationSpacing indentation 2020-09-01 13:48:15 -04:00
miruka
39f159f0a3 Fix the one-line events combining
When there's a one line (emote or non-message) event with its avatar
shown and combinable events follow it, that first event delegate's height
is supposed to be one line with the avatar overflowing into
the following event's blank space.

This behavior hasn't been working for a long time. This commit restores
it, along with improving the related code's quality.
2020-09-01 13:48:15 -04:00
miruka
27c3d08031 EventDelegate/Content property usage improvements
- Remove pointless confusing aliases for avatar properties
  (smallAvatar, collapseAvatar, etc)

- Make some EventDelegate properties readonly as they should be

- Use Layout.preferredWidth/Height for avatarWrapper instead of both
  minimum and maximum W/H
2020-09-01 13:48:15 -04:00
miruka
107eddaa5c Use HTextArea.RichText, not Qt.RichText 2020-09-01 13:48:15 -04:00
miruka
2a0f6aead1 Fix Midnight.qpl stylesheet error from 48663ae
Missing `}` in `chat.message.styleSheet` caused some CSS properties to
not work (sender name bottom margin, quotes color, no underline for
mentions, etc).
2020-09-01 13:38:30 -04:00
miruka
d53cf0cbbe Bump version to v0.6.2 2020-08-28 10:45:37 -04:00
miruka
48663ae846 Increase spacing between list items in messages 2020-08-28 09:27:59 -04:00
miruka
6d26ac9006 Join/LeftBanner: auto keyboard-focus first button 2020-08-28 07:40:48 -04:00
miruka
78acb51220 Refactor the QML past events loading code
- Make the code cleaner and more declarative
- Start loading past events when the join state of the room changes,
  e.g. when accepting an invite, load history right then
- Properly cancel the loading task when leaving the room chat page
2020-08-28 07:19:26 -04:00
miruka
702497cb48 Fix 403 error on invited room chat page
Don't try to fetch room members while user is only invited or has left
the room.
2020-08-25 09:37:09 -04:00
miruka
0d2be820fe Allow "replying" to an event with a file
Send a pseudo-reply consisting of two messages: a `m.text` which is just
a reply with an empty body, then the file event itself.

This is a workaround to the restriction imposed by the Matrix API,
which prevents us from simply attaching a reply to a media event:
https://matrix.org/docs/spec/client_server/latest#rich-replies
2020-08-24 10:17:04 -04:00
miruka
6d9a013d5d Composer: allow sending a reply with no text
Useful for "forwarding" a message (to the same room)
2020-08-24 09:54:49 -04:00
miruka
bbb46a9feb Disallow whitespace in composer aliases
These cause problems with the composer alias parsing code.
If an alias from the config file has whitespace, only the first word
will be taken into account (ignoring any leading or trailing whitespace).
2020-08-24 09:54:49 -04:00
miruka
83f35c034e Refactor MessageArea composer alias handling
Simplify the code, make it more declarative, and improve the reliability
of sending typing notifications (notably when changing the used alias in
the middle of a message).
2020-08-24 09:54:49 -04:00
miruka
aba47ef26b Discard room members from outdated initial sync
Fix in cooperation with matrix-nio commit
ffc42287c22a1179a9be7d4e47555693417f715d, see its description.
2020-08-24 09:54:49 -04:00
miruka
b83fd63769 Save composer state as right user when using alias
If the chat was opened under e.g. "@user1:example.org", but the
composer text is "o abc" where "o" is a composer alias for
"@other_account:example.org", save the composer text to state.json as
"@user1:example.org" and not the alias user.
2020-08-24 09:54:49 -04:00
miruka
df3f1fb645 Remove all Backend "get_any_client"-using methods
thumbnail() and download() were remaining.
Use a direct and carefully chosen MatrixClient's methods instead to
avoid problems mentioned in the previous commit 7502c1.
2020-08-24 09:54:43 -04:00
miruka
0f2efa9ba3 Don't pick a random client to get user profiles
Causes problem if one of the candidate client is on a server that
doesn't federate (e.g. a local one). Move the `get_profile()` function
from Backend to MatrixClient.
2020-08-23 16:18:54 -04:00
miruka
7502c1a9b4 Don't use TapHandlers in TextArea/TextField
Causes conflicts on touch/pen which prevent the component from being
focused. Use the normal press/pressHold signals instead.
2020-08-23 15:41:20 -04:00
miruka
71a2951f5b Move tooltip window hover detector to HToolTip
Having a HoverHandler covering the root ApplicationWindow causes
problems for some Qt Quick Controls with pen/touch, e.g. it's impossible
to focus a TextArea/TextField.

The HoverHandler is moved to HToolTip (since it's used for those),
targets the ApplicationWindow but is now only enabled while a tooltip is
visible.
2020-08-23 15:17:06 -04:00
miruka
f68dda9f14 Don't start with any member in autocompl. models
Fix the AutoCompletedMembers filter model to ensure that it doesn't
pick all the items from the corresponding room member model on startup,
wait until the user actually uses the completion feature to fill it.
2020-08-23 10:54:03 -04:00
miruka
fc6827807c Fix mentioning blank display names
If the display name of a user is blank (e.g. just a space character),
autocomplete it as a user ID.

If the display name starts or ends with whitespace, trim it.
2020-08-23 10:46:59 -04:00
miruka
fbf6e48b5b Fix mentioning users without display names 2020-08-23 09:41:41 -04:00
miruka
e79094c18c Fix click on user delegate not making it a mention 2020-08-23 09:23:34 -04:00
miruka
4000d70514 Reset input method when autocompleting a user
Fixes IME being left in a strange state upon autocompleting a word that
was being edited.
2020-08-23 09:14:45 -04:00