Commit Graph

1832 Commits

Author SHA1 Message Date
miruka
acd02a67a0 Add image viewer keybinds 2020-07-20 21:34:00 -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
93baaf51a0 Fix HPopup not calling window.visiblePopupsChanged 2020-07-20 19:47:48 -04:00
miruka
e5b102c761 Hide HImage pause button in image viewer
Have only the one from the viewer's button bar
2020-07-20 19:39:32 -04:00
miruka
a8e1ece1ea Add buttons to image viewer 2020-07-20 19:39:31 -04:00
miruka
595714f9f6 Fix HButtonContent when no icon 2020-07-20 18:52:44 -04:00
miruka
e62d99c3cc Stricter requirements to consider a client healthy
A healthy client must not only have a sync task running, but also have
finished its initial sync and have been succesful in its last sync
attempt.

The previous weak requirement caused this issue:
Have two clients, one on a failing server, and try to fetch a media,
thumbnail or profile: since these functions don't need auth, any
healthy client is picked to do the request, but the previous
requirement made it possible to pick the failing client.
2020-07-20 16:03:46 -04:00
miruka
b803c34338 Make middle click also work outside of image 2020-07-20 14:30:00 -04:00
miruka
66a44b5251 Split ImageViewer components 2020-07-20 14:27:52 -04:00
miruka
9444225afa Remove pressDelay from image viewer flickable
Seems to create a bug where the user can accidentally scroll the
timeline behind the popup instead of the image viewer flickable itself
2020-07-20 13:24:03 -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
37579fc664 Cleaner context menu "copy text" icon 2020-07-20 00:21:41 -04:00
miruka
2001fcf70a openImageViewer(): take an optional callback 2020-07-19 20:33:40 -04:00
miruka
066102e64d fullscreen: alt. scale mode only if image < window 2020-07-19 20:29:25 -04:00
miruka
06c2a24c9e Image viewer: separate fullscreen functions 2020-07-19 20:27:08 -04:00
miruka
48014cb8e5 Allow right clicking outside of image to close it 2020-07-19 20:22:36 -04:00
miruka
8053bd7d01 EventFile: respond to middle click (same as left) 2020-07-19 20:21:26 -04:00
miruka
b8833af3f9 HTile: add middleClicked() signal 2020-07-19 20:20:53 -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
fe08014697 Image viewer: make thumbnailPath property optional 2020-07-19 16:51:06 -04:00
miruka
e2c6f0e64c Don't cancel upload if server max size is unknown 2020-07-19 16:24:16 -04:00
miruka
2dbb155a22 Fix clicking in image viewer always closing GIFs 2020-07-19 16:02:38 -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
6b1a5a46e6 Fix upload for servers not returning max size 2020-07-19 15:37:05 -04:00
miruka
7595c522c4 Fix image upload without thumbnail 2020-07-19 15:34:06 -04:00
miruka
26fe8c4a09 Include decryption dicts in m.image local echoes
Fixes local echoes for images resulting in 404s, related to the
retry fix in the previous commit.
2020-07-19 15:00:23 -04:00
miruka
f1055ce5b9 Fix loading m.image events in encrypted rooms
Fix bug introduced in 11fb32:

When loading an encrypted thumbnail, QML lacks the decryption dict for
half a second at first.

When calling python like this, python calls the wrong matrix API
for fetching the encrypted thumbnail, and the added retry code
would be forever stuck.

The retry code has been moved to QML, and now works for all HImage.
2020-07-19 14:49:41 -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
bf1e36031f Animation overshoot: support negative values 2020-07-19 00:37:26 -04:00
miruka
88fb71ff34 HImage: don't load spinner while invisible 2020-07-18 23:55:05 -04:00
miruka
84a41e09e1 HImage: limit spinner size to 96 2020-07-18 23:37:55 -04:00
miruka
11fb32bff6 Retry downloading media if they fail with 404/500+
Trying to fetch a media right after it was uploaded can sometimes lead
to a  404
2020-07-18 22:26:23 -04:00
miruka
46c763fdfd Don't auto-focus disabled power level controls 2020-07-18 20:25:30 -04:00
miruka
1b5a09c052 Move Presence class to its own python file
It's not a ModelItem
2020-07-18 18:33:57 -04:00
miruka
692c78f398 Optimize presence-related model item field changes 2020-07-18 18:19:56 -04:00
miruka
d4fb38fd1a Use layout margin instead of Item after Daybreak 2020-07-18 15:02:19 -04:00
miruka
6463228db2 Fix path upload preview popup when QRC is used 2020-07-17 11:10:15 -04:00
miruka
bd30f89055 Fix compiling on Qt 5.12 (clipboard lambda) 2020-07-17 10:30:06 -04:00
miruka
4b215f7ddb Bump version to v0.6.0 2020-07-17 08:10:57 -04:00
vslg
9b9cbcb23c Fix unable to unset status_msg from other clients 2020-07-17 08:09:52 -04:00
miruka
dc24ee5d9d Hide recursive layout warnings spam in Qt 5.14+ 2020-07-17 07:41:26 -04:00
miruka
46fa68e9ca Reduce "termined" logging when closing app 2020-07-17 07:31:24 -04:00
miruka
eea2693c6a fix gif crap again 2020-07-17 07:26:31 -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
88e74796ef Fix HImage fillMode for GIFs
The animated image relied on the source image's fillMode property, but
it got overwrote with Image.Pad by a Binding in the AnimatedImage.
2020-07-17 06:39:14 -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
504f917b40 Increase context menus minimum opacity
The previous opacity could be unreadable when there was lots of text
behind, notably for the account menu with the room list behind.
2020-07-17 02:59:37 -04:00
miruka
716ac2a0af Refer to custom components to access their enums 2020-07-17 01:45:02 -04:00
miruka
d6e904ca4c Fix indentation for some backend.py lines 2020-07-17 01:30:51 -04:00
miruka
6c4ee17e40 Retrieve last seen time for offline room members 2020-07-17 00:46:46 -04:00
miruka
a17daf61c8 Add timeout for exit-settting-offline 2020-07-16 23:50:44 -04:00
miruka
4784c80ed9 Refactor exit-offline code 2020-07-16 23:34:35 -04:00
miruka
f316a24550 Handle SIGINT, SIGTERM, SIGUP and SIGQUIT 2020-07-16 23:16:21 -04:00
miruka
aff5f45ca0 utils.h: check for Q_OS_LINUX, not _UNIX 2020-07-16 23:05:02 -04:00
vslg
b69cbf9d14 Set users to offline before exiting Mirage 2020-07-16 22:26:55 -04:00
miruka
abcea2244d Make libX11 & libXScrnSaver optional on Linux 2020-07-16 19:09:09 -04:00
miruka
15de44f47a
Merge pull request #104 from vSLG/presence
Save status_msg to accounts.json
2020-07-16 18:28:46 -04:00
vslg
27745bacca Fix not being able to unset status_msg 2020-07-16 19:25:02 -03: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
23a0504937 Increase confirm/preview upload popups width 2020-07-16 17:41:02 -04:00
miruka
6065b6c1d6 confirm upload popups: limit size of loaded images 2020-07-16 17:36:13 -04:00
miruka
1708f692b3 Loading spinners for confirm/preview upload popups 2020-07-16 17:17:58 -04:00
miruka
0515a94429 Show spinner for loading media event thumbnails 2020-07-16 17:15:33 -04:00
miruka
606fe3d022 Use a thread lock for Clipboard.qimage()
Prevents this: user paste image (image provider retrieves the clipboard
image to show it as a thumbnail),
and immediatly presses enter (retrieves the image to convert it and send
to Python); the two calls would run at the same time instead of one
waiting for the other to set the cache.
2020-07-16 16:24:16 -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
vslg
d57414c06c Save status_msg to accounts.json
Restore it if there is not any status_msg set on
the server
2020-07-16 17:09:14 -03:00
miruka
bceafd7bbd Preview/confirm popup for clipboard pasting 2020-07-16 15:59:54 -04:00
miruka
6365beb455 Cache the clipboard QImage, share with provider 2020-07-16 15:18:07 -04:00
miruka
74c4d63c16 Add C++ clipboard image provider
Will be used to show a preview before uploading image from clipboard.
Transforming the clipboard image to PNG (or any other real format) is
slow and freezes the GUI, with the provider we can display it directly.
2020-07-16 14:26:09 -04:00
miruka
292d88a9bf Fix power level event display in room subtitle
For single-change events only
2020-07-16 12:47:28 -04:00
miruka
49a93ebf2b Format single-change power level event in one line 2020-07-16 12:42:50 -04:00
miruka
9674bf6a84 Handle dicts in power level event, improve sorting 2020-07-16 12:42:50 -04:00
miruka
7d7376a5cf Correctly handle <img> with no src attribute 2020-07-16 12:42:50 -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
2449fd5f18 Have spaces in device key for member verification 2020-07-15 11:27:33 -04:00
miruka
04692179f9 MemberProfile: admins can't demote other admins 2020-07-15 10:04:31 -04:00
miruka
62ea61380a Split avatar presence orb into its own component 2020-07-15 00:39:16 -04:00
miruka
8d5d0ff7fb Reduce required width to show last seen times 2020-07-14 17:32:47 -04:00
miruka
8e629ade66 Narrow member list: properly hide last seen texts 2020-07-14 17:29:56 -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
a65163df27 Window.getState: return default if prop not in obj
If the requested object in states.json exists but doesn't contain the
property we're looking for, return the default value (passed to the
function) instead of undefined.
2020-07-14 16:56:00 -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
e76143c172 Add HDrawer.calculatedMinimumSize property 2020-07-14 15:55:19 -04:00
miruka
efda3a419e Add kineticScrollingDeceleration setting 2020-07-14 05:46:48 -04:00
miruka
8b11ddd5b5 HFlickable: respect max flick speed user setting 2020-07-14 05:35:53 -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
fea1a8df4c Remove overshoot from panes auto-expand animation
Caused pane to bounce every time their focus field were focused, even
when they were already at sufficiant size
2020-07-14 04:30:01 -04:00
miruka
b7cd08f66b Fix panes being shown as overlay in "mobile mode" 2020-07-14 03:56:58 -04:00
miruka
645350f199 Auto-expand main pane when filter field focused 2020-07-14 03:31:01 -04:00
miruka
f84b13c657 Move autoexpand from MultiViewPane to base HDrawer 2020-07-14 03:19:57 -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
a44d683956 Show all power level changes for initial event 2020-07-13 23:54:10 -04:00
miruka
d4bc87ea88 Fix onRedactionEvent "etype" mistake 2020-07-13 23:43:46 -04:00
miruka
dd63d1312a Don't limit width of messages containing tables 2020-07-13 23:38:39 -04:00
miruka
ce9b739889 Add spacing to table cells in messages 2020-07-13 23:36:55 -04:00
miruka
ec9004101a Show details in timeline for power level events 2020-07-13 23:36:18 -04:00
miruka
bd50cd46fa Fix old power events sent when setting user level 2020-07-13 21:14:14 -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
f408d511a6 Fix Room.can_xyz attributes
The attributes by mistake used nio.AsyncClient.user instead of the
proper user_id. If the user logged in with a partial username instead of
typing their full ID, the can_ attributes (e.g. can_kick) would always
be False.
2020-07-13 18:54:30 -04:00
miruka
0459657575 Room default power level awareness 2020-07-13 18:54:30 -04:00
miruka
9d397b62c5 Update room member models on power levels event 2020-07-13 18:54:30 -04:00
miruka
6ff3cc5f39 Add buttons to Save/cancel power level changes 2020-07-13 18:54:28 -04:00
miruka
1adfa9f4a2 PowerLevelControl: fix default/reset system 2020-07-12 18:48:07 -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
e3b6f3eb54 HButton: add "uncheckable" property 2020-07-12 15:48:28 -04:00
miruka
370418bcf5 AutoDirectionLayout: consider columnSpacing
For summedImplicitWidth calculation.
2020-07-12 13:10:19 -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
02982f9dc3 Remove unused HAccordionView.qml 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
miruka
67f1572a18 Fix null account warnings on AddChat pages 2020-07-12 00:13:52 -04:00
miruka
1ad3de3917 Make ButtonLayout faster and more precise 2020-07-11 22:06:37 -04:00
miruka
7227ac04a3 Client remove_member(): room item may not exist 2020-07-11 18:49:23 -04:00
miruka
58e7321941 Fix HButton height for icon-only buttons
The button only considered its label previously to calculate its
implicit height.
2020-07-11 18:44:57 -04:00
miruka
b8264d123c Don't use auto-away for servers without presence 2020-07-11 17:39:40 -04:00
miruka
b4f706d2e8 Refresh Room.unverified_devices when members leave 2020-07-11 17:23:36 -04:00
miruka
2644e6d8b0 Fix account update method for unasaved accounts
If the account passed to `saved_accounts.update()` doesn't exist in the
config file, return instead of failing with a KeyError.

An account can be absent from the file if "Remember my account" was
unchecked on login, or if the file hasn't been updated yet on disk after
login (race condition).
2020-07-11 17:11:04 -04:00
miruka
3daa60510a DeviceVerification: slightly improve bottom text 2020-07-11 16:20:19 -04:00
miruka
2b52040632 Improve KeyVerificationPopup for current device
Make the text more useful and more adapted to the possible situations.
2020-07-11 16:12:10 -04:00
miruka
cf7786e6c6 DeviceVerification: focus info area by default 2020-07-11 16:10:55 -04:00
miruka
c9843bb2ff HTextArea: prevent leaking left/right if readOnly 2020-07-11 16:10:21 -04:00
miruka
224e82f38c KeyVerificationPopup: make details copiable 2020-07-11 15:51:31 -04:00
miruka
f05f2357c7 Fix accounts.json update with missing enabled key 2020-07-11 14:38:10 -04:00
miruka
3c620f6fd1 Add auto-away feature for Linux X11 2020-07-11 14:38:08 -04:00
miruka
10f47f71ac Fix Chat userInfo errors 2020-07-11 00:43:31 -04:00
miruka
63b80168a6 Fix matrix_client mypy error 2020-07-10 16:54:29 -04:00
miruka
1611b8ea16 Reduce profile status message brightness 2020-07-10 16:51:13 -04:00
miruka
80bbee1434 Center-align profile status msg if only one line 2020-07-10 16:48:29 -04:00
miruka
159f4e3d15 Set a maximum width on member profile avatar 2020-07-10 16:45:31 -04:00
miruka
c53aa5ffa9 Add presence details to member profile 2020-07-10 16:44:08 -04:00