Commit Graph

361 Commits

Author SHA1 Message Date
miruka
107eddaa5c Use HTextArea.RichText, not Qt.RichText 2020-09-01 13:48:15 -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
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
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
miruka
0434659ad1 CompletableUserDelegate avatar: respect uiScale 2020-08-22 15:17:52 -04:00
miruka
eadc4bb317 Remove unused function inside UserAutoCompletion 2020-08-22 01:44:41 -04:00
miruka
bc3d6d902f Fix @autocomplete closing after one character
Typing e.g. "@a" would work, but "@ab" would always instantly close
the autocompletion UI if the cursor was at the end of the text area.
2020-08-22 01:23:44 -04:00
miruka
12c47476fc Add theme properties for autocompletion UI 2020-08-21 12:10:22 -04:00
miruka
044060d1c0 Color name when highlighting member delegates 2020-08-21 12:10:22 -04:00
miruka
010675001c Add bottom margin to autocompletion UI 2020-08-21 12:10:22 -04:00
miruka
6f37ce3519 Fix completing in the middle of a name with spaces 2020-08-21 12:10:22 -04:00
miruka
bea1d60621 Fix autocompletion for users without display name 2020-08-21 12:10:22 -04:00
miruka
cd81c94ce8 Fix autocompletion for display names with spaces 2020-08-21 12:10:22 -04:00
miruka
9dc9a5e70f Clip the autocompletion UI 2020-08-21 12:10:21 -04:00
miruka
b79b032184 Better delegate for completable users 2020-08-21 09:27:01 -04:00
miruka
6dcc244998 Move UserAutoCompletion outside of Composer 2020-08-21 05:50:37 -04:00
miruka
2ccb28fa49 Box/popups: ignore enter press on disabled buttons 2020-08-21 05:08:12 -04:00
miruka
43b14f3129 Make autocompletion work not just at end of line 2020-08-21 04:44:55 -04:00
miruka
1b919ec7be Cursor moves before last word: close completion UI 2020-08-21 01:46:07 -04:00
miruka
063f9d2b1d Only mention tab-completed usernames 2020-08-21 01:21:51 -04:00
miruka
5ba669444d Add basic user autocompletion UI 2020-08-21 01:21:10 -04:00
miruka
2f1889423b Room & member filter fields: support (shift+)tab 2020-08-21 01:19:17 -04:00
miruka
21fe4b7bd1 Add spacing between MemberDelegate name-last seen 2020-08-16 16:17:22 -04:00
miruka
a389238024 Add window.makePopup(), utils.makePopup() wrapper 2020-08-03 01:26:35 -04:00
miruka
a0912106ca EventDelegate: fix not setting fetchProfilesFuture 2020-07-27 04:24:40 -04:00
miruka
fcf6b45bf6 Disable timeline scrolling when a popup is open 2020-07-27 00:16:04 -04:00
miruka
157ea2ffb2 Add support for SSO authentication 2020-07-26 20:34:06 -04:00
miruka
87ad3ccab1 Fix truncated "Loading previous messag..." text 2020-07-22 16:26:30 -04:00
miruka
d00b29f076 Add media.openExternallyOnClick setting
Makes clicking on image open them externally and middle-clicking open
them in the mirage image viewer, the reverse of the default behavior.
2020-07-22 00:14:15 -04:00
miruka
7214180a66 Don't send typing notif if no permission to talk 2020-07-21 22:13:44 -04:00
miruka
da7417f13f Fix SettingsView stealing focus from popups
Making the window narrow enough to switch to "mobile mode", then big
again would trigger a signal in SettingsView that switched focus to it,
even when it wasn't visible.
2020-07-21 22:11:13 -04:00
miruka
43cfb74460 Fix HTTP event image not loading on click 2020-07-21 19:45:52 -04:00
miruka
fdc06d81fd Add info bar to image viewer 2020-07-21 17:34:45 -04:00
miruka
48eac96976 Add "Open externally" to media event context menu 2020-07-21 01:06:31 -04:00
miruka
3435dbc2f8 Add copyFilesLocalPath keybind 2020-07-20 23:28:07 -04:00
miruka
67b7821fae Ctrl+C, non-E2E media: copy HTTP URL, not filename 2020-07-20 23:17:51 -04:00
miruka
99017adc1d Model item events: add a media_http_url field 2020-07-20 23:09:28 -04:00
miruka
55e22ea948 Add openMessagesLinksOrFilesExternally keybind
This required us to set the media downloaded local path on events
entirely from python instead of simply lazy-fetching them when needed
from QML, due to pyotherside's async nature and files that must be open
in a certain order.
2020-07-20 23:07:52 -04:00
miruka
0cd2678797 Event context menu: copy HTTP media URL, not MXC 2020-07-20 19:58:44 -04:00
miruka
2fb4ad5eae Improve timeline GIF auto-pausing
Pause when any popup is covering the timeline (image viewer or not), and
work when opened by ctrl+o, not just when clicking the thumbnail.
2020-07-20 19:51:35 -04:00
miruka
66a44b5251 Split ImageViewer components 2020-07-20 14:27:52 -04:00
miruka
7bfaced66b Fix event list + composer double context menu
Don't also Aopen the composer's context menu when there are
highlighted or selected messages in the timeline and user presses the
menu key.
2020-07-20 12:40:38 -04:00
miruka
e38a4ed408 Fix context menu encrypted media check 2020-07-20 12:34:32 -04:00
miruka
6bdf39ad68 Fix contextmenu "Copy text" when event highlighted
When an event was highlighted with the keyboard, right clicking a
message and clicking "Copy text" would always copy the message that was
highlighted instead of the one the user aimed for.
2020-07-20 12:31:40 -04:00
miruka
15b1720775 Pause timeline GIF while image viewer is open 2020-07-20 01:09:06 -04:00
miruka
30ce271ebc Real "copy URL" & "copy path" context menu entries
Replace the poorly implemented 2-in-1 "copy address" media event
menu option with:

- Copy <mediaType> address: visible for non-encrypted media, always
  copies the http URL

- Copy local path: always visible for already downloaded media, even if
  they were downloaded before mirage was started
2020-07-20 00:22:12 -04:00
miruka
2001fcf70a openImageViewer(): take an optional callback 2020-07-19 20:33:40 -04:00
miruka
8053bd7d01 EventFile: respond to middle click (same as left) 2020-07-19 20:21:26 -04:00
miruka
8a73e65254 Rename openMessagesLinks keybind (...OrFiles) 2020-07-19 20:17:52 -04:00
miruka
de6d8fa59d Make media openable with the openLinks keybind
This involved a refactoring to move all the media handling functions
(downloading, opening externally, etc) out of the Event delegates and
into the EventList, which manage keybinds instead.

This should also be better for performance since all these functions are
no longer duplicated for every Event in view.

Other user-noticable change: clicking on non-image media will
always download and open them no matter if the room is encrypted or not,
instead of opening non-encrypted files in browser like before. It will
be possible to still do that with an "open externally" command later.
2020-07-19 20:10:31 -04:00
miruka
465d31790f Image viewer: handle images without known w/h
There's no way to know in advance the real size for
HTTP image previews and m.image events sent by some clients
2020-07-19 15:50:10 -04:00
miruka
26a4d76fc2 Implement basic image viewer popup
Current features:

- Show scaled up thumbnail while the full image is loading
- Click to alternate between scaling mode (or reset zoom if not 1x)
- Click outside of image to close
- Double click to toggle fullscreen
- Middle click to open externally (also for thumbnail in timeline)
- Right click anywhere to close
- Ctrl+wheel to zoom
- Click-drag to pan when image larger than window
2020-07-19 03:26:33 -04:00
miruka
46c763fdfd Don't auto-focus disabled power level controls 2020-07-18 20:25:30 -04:00
miruka
d4fb38fd1a Use layout margin instead of Item after Daybreak 2020-07-18 15:02:19 -04:00
miruka
03af1da1d4 Remove power level apply/cancel button texts
Lazy fix for the layout problem
2020-07-17 06:40:15 -04:00
miruka
78b16ae22c MemberProfile: remove leftover debug console call 2020-07-17 06:40:15 -04:00
miruka
68da4be7be Make GIFs openable externally + real pause button 2020-07-17 06:07:02 -04:00
miruka
7f478efc40 Topic area, power level text: fix disabled opacity 2020-07-17 05:29:25 -04:00
miruka
716ac2a0af Refer to custom components to access their enums 2020-07-17 01:45:02 -04:00
miruka
6c4ee17e40 Retrieve last seen time for offline room members 2020-07-17 00:46:46 -04:00
miruka
42791f32d3 Enter member profile → focus power level control 2020-07-16 18:17:44 -04:00
miruka
bcf93a6f36 Disable member power level control when offline 2020-07-16 18:11:37 -04:00
miruka
5cc1c55d95 Immediatly show UI transfer for clipboard paste
Create an Upload model item before compressing the image and writing it
to disk
2020-07-16 16:14:07 -04:00
miruka
bceafd7bbd Preview/confirm popup for clipboard pasting 2020-07-16 15:59:54 -04:00
miruka
60832b2fcd Confirm uploading from path in clipboard 2020-07-16 12:42:42 -04:00
miruka
2d623118b5 Support pasting image to upload in the composer 2020-07-15 18:08:17 -04:00
miruka
04692179f9 MemberProfile: admins can't demote other admins 2020-07-15 10:04:31 -04:00
miruka
8d5d0ff7fb Reduce required width to show last seen times 2020-07-14 17:32:47 -04:00
miruka
3ff90d1074 Fix avatar membership icon position in narrow pane 2020-07-14 17:20:50 -04:00
miruka
d092cd6506 Fix room header in compact window 2020-07-14 17:09:09 -04:00
miruka
d51c0e3e5d Add keybind to hide room pane (default Ctrl+Alt+R) 2020-07-14 16:51:01 -04:00
miruka
e00832eea6 Allow hiding room pane with lcick on current tab 2020-07-14 16:47:04 -04:00
miruka
c00e35a948 Don't change chat width when showing overlay panes
When auto-expanding a pane and showing it as an overlay because of
narrow window, make the chat keep the width it had before.

This makes the transition less jarring, reduces the amount of text seen
through a transparent pane, and fix making one pane overlay expanding
the other.
2020-07-14 16:16:48 -04:00
miruka
5007a5d97c Fix reply bar height 2020-07-14 05:25:32 -04:00
miruka
e5f147e977 Add expand/search button to room pane when narrow 2020-07-14 04:54:23 -04:00
miruka
b7cd08f66b Fix panes being shown as overlay in "mobile mode" 2020-07-14 03:56:58 -04:00
miruka
4b7ce1a195 Auto-expand room pane when filter field focused 2020-07-14 03:14:05 -04:00
miruka
c018c04cab Auto-expand room pane to show settings/profiles
If the room pane is below the default width (by user resizing or because
of narrow window), go to the room settings or a member profile will
automatically expand it as needed.

The pane goes back to its previous size once the settings/profile is
left.

If the window is narrow enough that expanding the pane normally would
reduce the timeline's width past its minimum, the pane is shown as an
overlay instead.
2020-07-14 03:00:10 -04:00
miruka
dd63d1312a Don't limit width of messages containing tables 2020-07-13 23:38:39 -04:00
miruka
0a277f23b1 Room admins can always demote themselves 2020-07-13 19:22:06 -04:00
miruka
7277b5d198 PowerLevelControl: add error and warning texts 2020-07-13 19:21:50 -04:00
miruka
757679a6e0 Make power level control permission-aware 2020-07-13 18:57:42 -04:00
miruka
6ff3cc5f39 Add buttons to Save/cancel power level changes 2020-07-13 18:54:28 -04:00
miruka
966070b4d6 MemberDeviceSection: elide txt instead of wrapping
Wrapping the text just makes the section overflow when
the member pane gets too narrow.
2020-07-12 17:22:28 -04:00
miruka
d648156c38 Use a HLabeledItem for MemberProfile power level 2020-07-12 17:00:04 -04:00
miruka
cc831d0640 Move cursorShape property out of HListView
The Timeline EventList is the only HListView that uses it. For other
list views, it interferes with items like text fields which need to set
cursor shape by themselves.
2020-07-12 16:59:33 -04:00
miruka
fe831e7865 Add power level display to member profile 2020-07-12 16:14:24 -04:00
miruka
3c7b78d4ca Reorder QML files to follow coding conventions
https://doc.qt.io/qt-5/qml-codingconventions.html#qml-object-declarations
2020-07-12 01:27:44 -04:00
miruka
229fbee298 Remove HRichLabel component
Sparsly used and inflexible, just use HLabel
2020-07-12 00:13:52 -04:00
miruka
ed030f7dd9 Refactor ButtonLayout module components
- Rename ButtonLayout module to just Buttons

- Rename ButtonLayout into AutoDirectionLayout and move it to Base,
  it's useful not just for buttons

- Rename OtherButton into GroupButton, which is now the base of all
  other Buttons buttons

- Add generic (Positive|Middle|Negative)Button components, which are now
  the base for (Apply|Cancel)Button
2020-07-12 00:13:52 -04:00