Commit Graph

2247 Commits

Author SHA1 Message Date
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
miruka
0434659ad1 CompletableUserDelegate avatar: respect uiScale 2020-08-22 15:17:52 -04:00
miruka
223197b84e Pass HTTPS server URL to Python when possible
Reduce the time it takes to connect to the server since Python won't
need to guess the real protocol.
2020-08-22 15:15:15 -04:00
miruka
9cc9229fdb Simplify pinging & properly close aiohttp session 2020-08-22 13:19:38 -04:00
miruka
f327c99a99 Use the new improved anchel.nl JSON API
The /publiclist.json provides all the server event/downtime logs
in one file, so we don't have to do requests for every server anymore.
2020-08-22 13:10:04 -04:00
miruka
e7f769b344 HTextArea: consider preeditText for getWordAt()
`preeditText` is partial input from IME and touchscreen
autocompleting keyboards, consider it together with `text` for the
`getWordAt()` function.

This should allow user autocompletion to work properly in these
specific conditions.
2020-08-22 01:47:53 -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
8ab4ce8ad7 Bump version to v0.6.1 2020-08-21 12:10:22 -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
9b3d01b9a8 ServerDelegate: add ping icon tooltips 2020-08-21 12:10:21 -04:00
miruka
93b73b86bb Add a "table header" to server browser 2020-08-21 12:10:21 -04:00
miruka
6160deace5 Improve ServerBrowser text wording 2020-08-21 12:10:21 -04:00
miruka
85f4620b3b Equalize "Homeserver address" label padding 2020-08-21 12:10:21 -04:00
miruka
339341da68 Disable new scrollbar auto-show behavior for now
There are still some usability issues to fix with it
2020-08-21 12:10:18 -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
4ea3a7d52a Remove HFlickable leftover debug print 2020-08-21 05:33:59 -04:00
miruka
e0e92152d0 Fix infinite account spinner when logging in twice 2020-08-21 05:33:57 -04:00
miruka
bd01d9edd0 Fix segfault when leaving loading server list page 2020-08-21 05:18:08 -04:00
miruka
6ba6202771 Fix clicking on server in server browser 2020-08-21 05:10:32 -04:00
miruka
2ccb28fa49 Box/popups: ignore enter press on disabled buttons 2020-08-21 05:08:12 -04:00
miruka
8fbe59f6eb Fix cursorShape over fields inside a HFlickable
Bug introduced in 6b907, made the cursor stay as a normal arrow when
hovering text fields/areas inside a HFlickable due to the
HKineticScrollingDisabler's width/height being incorrectly set.
2020-08-21 04:58:58 -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
ec17d54923 ServerDelegate: ignore compact mode 2020-08-21 01:19:18 -04:00
miruka
cc06645275 Add spinner when fetching homeservers list 2020-08-21 01:19:18 -04:00
miruka
4f1b007e6f Add some top/bottom padding to account bar 2020-08-21 01:19:18 -04:00
miruka
ede99b310e Fix login box tab shortcuts 2020-08-21 01:19:18 -04:00
miruka
3c79ffbf21 Don't show register/reset tabs on sso login box 2020-08-21 01:19:18 -04:00
miruka
f648807730 Remove unused Device model item 2020-08-21 01:19:18 -04:00
miruka
e303ee1fc9 SignInSso: return to server list on Cancel click 2020-08-21 01:19:18 -04:00
miruka
5ac5dbd1d5 Add usual FlickShortcuts to server browser 2020-08-21 01:19:18 -04:00
miruka
21fbe7a96b Show scrollbars for a few seconds at first
Lets the user know that there's content to scroll.
2020-08-21 01:19:18 -04:00
miruka
11def5c99f Mozilla server is now in anchel.nl public list 2020-08-21 01:19:17 -04:00
miruka
2f1889423b Room & member filter fields: support (shift+)tab 2020-08-21 01:19:17 -04:00
miruka
007a11b4aa Change "go to homeserver address" icon 2020-08-21 01:19:17 -04:00
miruka
d945bed0a3 Increase "Homeserver address" text bottom padding 2020-08-21 01:19:17 -04:00
miruka
d3092c4929 Clear server list highlight when field text edited 2020-08-21 01:19:17 -04:00
miruka
21462dc25f Remove unused theme smallPaneHighlight property 2020-08-21 01:19:17 -04:00
miruka
c51a771a65 Add colored border to HListView highlight delegate 2020-08-21 01:19:17 -04:00
miruka
05f2c20924 Remove leftover pdb call in MatrixClient._send() 2020-08-21 01:18:44 -04:00
miruka
4760ccac5e Filter servers also by their name 2020-08-19 06:37:26 -04:00
miruka
ab390704eb Use homeserver URL field also as a filter field 2020-08-19 04:39:50 -04:00
miruka
16970d5e56 Auto-detect homeserver scheme:// 2020-08-19 02:14:46 -04:00
miruka
2fa8b2c5f9 Add a public server list to the initial login page 2020-08-19 01:13:34 -04:00
miruka
1a6273681d Fix HMenuItemPopupSpawner 2020-08-19 00:16:42 -04:00
miruka
21fe4b7bd1 Add spacing between MemberDelegate name-last seen 2020-08-16 16:17:22 -04:00
miruka
cc7c0ad336 Add theme property to Utils
Gets set to the window.theme when a theme is loaded, done to avoid
having to refer to the window object from utils.
2020-08-03 01:29:37 -04:00
miruka
a389238024 Add window.makePopup(), utils.makePopup() wrapper 2020-08-03 01:26:35 -04:00
miruka
c813e92ac7 Move hideErrorTypes & showError() to PythonBridge 2020-08-03 01:19:08 -04:00
miruka
040e966d27 Remove utils.sendFile(), useless wrapper 2020-08-03 01:05:19 -04:00
miruka
09ae0d7776 Server discovery: no need to recreate a client 2020-07-30 22:59:24 -04:00
miruka
758edd8a6a Upload sync filter & use filter ID for syncs
rather than passing an entire filter dict for every single syncs.
This shortens the request URL and prevents troubles with some servers
that have an absurdly low max URL length (e.g. halogen.city).
2020-07-30 22:53:43 -04:00
miruka
03f9ec94ff Fix autolinking user IDs including ; or < 2020-07-29 02:00:49 -04:00
miruka
865d6b8bc8 ServerBrowser: strip trailing slashes from URL 2020-07-27 16:40:04 -04:00
miruka
db5d9b57f8 RoomDelegate subtitle: lazy-fetch missing profiles 2020-07-27 04:32:00 -04:00
miruka
a0912106ca EventDelegate: fix not setting fetchProfilesFuture 2020-07-27 04:24:40 -04:00
miruka
d127ad978c Correctly handle initial sync member events
Previously, member events in initial syncs (unless user had "hide member
events" and "hide profile events" set to false in their config) were
completely discarded with the help of a sync filter, instead of simply
being hidden like events loaded from room backfilling.

This was done due to the common case of rooms getting only
userconfig-ignored/hidden events on startup (especially with the
low number of initial events requested for lazy initial sync),
and thus having nothing to show as "last message" in
the room list (room delegate subtitles).

Other problems resulted from this, like missing join/leave events
when the config was set to hide profile events but not other
member events, and the "Members not synced" (#54) in encrypted room
with recent discarded member events.

The discarding filter is no longer used. Instead, if a room in the room
list has no visible "last message" and is currently visible to the user,
messages will be lazily fetched until we find something adequate or the
room goes out of view.
2020-07-27 03:59:41 -04:00
miruka
f1f24f5121 Don't log "unknown member event" warnings
These just mean we haven't noticed any change in a profile event, and
haven't been of any use.
2020-07-27 02:43:11 -04:00
miruka
fcf6b45bf6 Disable timeline scrolling when a popup is open 2020-07-27 00:16:04 -04:00
miruka
6d8980bcb3 Use nio's new restore_login() method 2020-07-27 00:15:52 -04:00
miruka
e611f89fe3 Fix/update Backend._do_login() docstring 2020-07-26 23:40:15 -04:00
miruka
3ab2864f22 SignInSso: add a copy URL button 2020-07-26 20:58:14 -04:00
miruka
ddee50f28a Show a shorter URL to open for SSO
Show "http://127.0.0.1:port", which will automatically redirect to the
long ugly homeserver's URL.
2020-07-26 20:40:55 -04:00
miruka
157ea2ffb2 Add support for SSO authentication 2020-07-26 20:34:06 -04:00
miruka
d7907db547 Ask for server URL before showing sign in box
Contact the server's .well-known API before anything to get
available login flows instead of blindly assuming it will be
m.login.password, and to get the server's real URL instead of
requiring users to remember that e.g. it's "chat.privacytools.io"
and not just "privacytools.io" despite user IDs making it look like so.

The server field will also now remember the last accepted URL.
2020-07-24 02:36:24 -04:00
miruka
b94d1e8168 Fix possible race condition when writing user file
While a user file write operation #1 was queued in the _write_loop,
it was possible meanwhile for another function to read the file
(the current old version on disk), add some data to it,
add submit the write (operation #2).
The modifications from operatio #1 were then completly lost at best.
2020-07-24 01:01:37 -04:00
miruka
872ee49a79 Don't catch SIGQUIT and SIGTERM
Give a way to quickly force quit. Catching SIGTERM also causes problems
with the live-reload script.
2020-07-24 00:45:58 -04:00
miruka
3a7ad5859f qml_bridge: remove old signal code 2020-07-24 00:22:51 -04:00
miruka
87ad3ccab1 Fix truncated "Loading previous messag..." text 2020-07-22 16:26:30 -04:00
vslg
6b9077816e Add HKineticScrollingDisabler to HFlickable
Also make horizontal scrolling available when
kinetic scrolling is disabled
2020-07-22 15:45:05 -04:00
miruka
5dbcf9c825 Image viewer: fix info bar text vertical alignment 2020-07-22 01:31:06 -04:00
miruka
aba29a198d Increase image viewer bar opacity
Make it easier to read on bright images
2020-07-22 01:22:42 -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
0f1d0f336e Don't show avatar tooltips when context menu open 2020-07-22 00:04:12 -04:00
miruka
e917e29913 Image viewer: respect autoHideOSDAfterMsec setting 2020-07-22 00:00:53 -04:00
miruka
ad8c9d55dc Raise max flicking speed while keyboard-scrolling
Lets holding the page down/up keybinds properly do their job again
2020-07-21 23:54:35 -04:00
miruka
c1f9416f1a Clipboard change → force image preview update 2020-07-21 23:47:41 -04:00
miruka
0088fadddd Compress images in a separate process
Compression with Pillow can take long, especially with large
clipboard PNG images.
Doing this in a separate process prevents the async event loop from
getting blocked, and allows multiple compression operations to run in
parallel.
2020-07-21 23:35:16 -04:00
miruka
286b7a951a Disable optim. when recompressing clipboard PNG
Far too slow for big (10MB+) PNG
2020-07-21 23:09:07 -04:00
miruka
1c218c82ec Ignore reply header links for keyboard open binds
Don't open the multiple links contained in the "In reply to <user>"
text of fallback replies when using keyboard shortcuts to open
links/media.
2020-07-21 22:46:05 -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
8c1d7a868e Catch 403 error when getting offline user presence
It's possible to get a MatrixForbidden error when trying to retrieve a
offline room member's presence, if that member actually left the room
but the server hasn't yet sent the update.
2020-07-21 21:02:28 -04:00
miruka
a402c7657a Don't render invisible thumbnail spinner 2020-07-21 19:50:49 -04:00
miruka
43cfb74460 Fix HTTP event image not loading on click 2020-07-21 19:45:52 -04:00
miruka
377b11220e Auto-hide image viewer bars when needed 2020-07-21 19:42:57 -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
89e6931d9d Fix ViewerButtons implicit width calculation 2020-07-20 21:39:52 -04:00
miruka
93b46dcfee Move AutoDirectionLayout sum function to Utils 2020-07-20 21:37:08 -04:00
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
miruka
fec1026346 Add direct keybinds for presence states 2020-07-10 15:15:53 -04:00
miruka
3848ce60ca Add keybind to open presence (account) menu 2020-07-10 14:59:55 -04:00
miruka
b6b02ee6a7 Fix up/down key handling for account context menu
- Press down while focusing status field or apply icon:
  focus the online menu item

- Press up while focusing online menu item: focus status field
2020-07-10 14:15:47 -04:00
miruka
8557c79e12 Improve z-ordering of account avatar elements
Show presence orb in front of unread messages, which are shown in front
of the loading spinner overlays
2020-07-10 14:08:16 -04:00
miruka
a7702a5260 Add borderWidth presence theme property 2020-07-10 13:38:18 -04:00
miruka
7f476f8f61 Show online presence orb for unsupported presence
On server where presence is disabled, we can still know whether we're
online or offline for our own account.
2020-07-10 13:35:34 -04:00
miruka
1c3099d440 Improve positive/middle/negativeBackground colors
Make them a bit lighter, and use these background colors
for presence orbs and room header device verified status instead
of text colors
2020-07-10 13:27:35 -04:00
miruka
70351fb16f Disable AddChat pages content while offline 2020-07-10 13:15:01 -04:00
miruka
9caaf41eae Disable some account settings while offline 2020-07-10 13:15:01 -04:00
miruka
e34bfd48a7 Disable leave/forget keybinds while offline 2020-07-10 13:15:01 -04:00
miruka
12b6b74881 Disable room context menu entries while offline
Except "Copy room ID"
2020-07-10 13:15:01 -04:00
miruka
7580686598 Add MatriwClient.pause_while_offline() 2020-07-10 13:15:01 -04:00
miruka
5b9e84a9f7 Delay redacting events until we're online 2020-07-10 13:15:01 -04:00
miruka
e5b67c722e Disable inviting members while offline 2020-07-10 13:15:01 -04:00
miruka
291168ccdb Disable member kick/ban while offline 2020-07-10 13:15:01 -04:00
miruka
f018b9567b Fix offline → online not sending pending message 2020-07-10 13:15:01 -04:00
miruka
79fdc710c3 Fix & improve send_file handling of offline account
- Show a transfer stuck at 0kb uploaded in the GUI instead of waiting to
  be online to show anything

- Fix getting online not making the upload start
2020-07-10 13:15:01 -04:00
miruka
e5a196dcf8 Clear default member list highlight on focus loss 2020-07-10 13:15:01 -04:00
miruka
27b914b0bf Tell user when not loading history due to offline 2020-07-10 13:14:59 -04:00
miruka
8d93433a8e Fix case for ZeroDate and PresenceOrder
Only top-level types should have CaseLikeThis, general top-level
variables should be LIKE_THAT.
2020-07-10 13:14:18 -04:00
miruka
f03ac77595 Improve Presence docstring 2020-07-10 13:14:18 -04:00
miruka
7af13441a0 Fix AccountDelegate properties in wrong place 2020-07-10 13:14:18 -04:00
miruka
435bbdaf22 Fix highlight when ctrl-tabbing to AddNewChat page 2020-07-10 13:14:18 -04:00
miruka
0ea23dcb6f Fix room list highlight when adding new account
- Unset highlight when going to the add new account page
- After login, highlight the account related to the profile page that
  gets switched to
2020-07-10 13:14:18 -04:00
miruka
199940ab19 Fix room list highlight when going to account page
Correctly set it when going to an account settings or add chat page by
using the account context menu, the add chat button or keybinds.
2020-07-10 13:14:18 -04:00
vslg
5abdc1f779 Fix changes requested (#101)
- Fix code formatting issues.
- Document `Presence`.
- Improve `Presence.__lt__()` performance by
  defining a dict outside the method.
- Make presence ball radius relative to uiScale
  and configurable from theme.
2020-07-10 13:14:18 -04:00
vslg
43df8fd60b Bug fix and minor improvements
Improvements:
- Add instant feedback upon setting a different
  presence for account (local echo)
- Sort room members by power level and then
  presence
- Periodically update members' `last_acitve_at`
  field on the room pane
- Move status message field up on account context
  menu, and put invisible before offline again

Bug fix:
- Do not try to override presence set from
  another client, accept it
2020-07-10 13:14:18 -04:00
vslg
a3c9ac20c6 Make offline presence to stop sync
Setting the presence of an account to offline
will make the client to end sync task and will
prevent messages from being sent.

Setting it to online again or any other presence
will start sync task again.

Left:
- Local echo to presence change
- UI Control to affect all members presence
- Block more requests to be sent (e.g. member
  actions)
2020-07-10 13:14:18 -04:00
vslg
3fa35b88c9 Add offline icon and fix theme colors 2020-07-10 13:14:18 -04:00
vslg
edc8e04ce7 Bug fix and minor improvements
Bug fixes:
- Do not send typing notice and set room read
  markers when the account is invisible
- Fix typing on set_presence
- Allow users to unset status message by setting
  it to blank
- Escape html tags of status message on
  SubtitleLabel of MemberDelegate

Improvements:
- Display user ID and status message on a tooltip
  by hovering account or room member name
2020-07-10 13:14:18 -04:00
vslg
a1f38fe8d8 Add support for status message, use new icons 2020-07-10 13:14:18 -04:00
vslg
91ed600997 Check server presence support and comment code 2020-07-10 13:14:18 -04:00
vslg
d5e0a3340d Use presence events to update Account presence 2020-07-10 13:14:18 -04:00
vslg
a1e5a1981d Fix presence not being updated after loaded once 2020-07-10 13:14:18 -04:00
vslg
0eda6eb278 Add account presences to account context menu 2020-07-10 13:14:18 -04:00
vslg
6e202c3e27 Fix outdated presence for lazy loaded members 2020-07-10 13:14:18 -04:00
vslg
59198da3b0 Add presence theme options 2020-07-10 13:14:18 -04:00
vslg
8644ddaad4 Add offline presence text 2020-07-10 13:14:18 -04:00
vslg
215557e353 Add presence circle on members avatar and account 2020-07-10 13:14:18 -04:00
miruka
512c08fe0a Members: show last active time and status message
Left:

- Something like "Active" should be shown instead of a relative time
  when the member is considered currently active by the matrix server,
  but an "Active" text takes too much space

- Show a colored circle in the bottom right corner of avatars to
  indicate if they're online, away, or offline

- Reduce opacity of offline members, but is there a way to know if
  the server has presence disabled? For servers like matrix.org,
  Riot shows the entire list of members with half opacity at all time,
  we want to avoid that

- Setting our status text with a text field in AccountDelegate
  context menu, similar to the DeviceDelegate's context menu

- Setting our online/away/invisible/offline status from
  AccountDelegate context menu

- Replace the useless "Mirage x.y.z" button in the top left of the UI
  with a control to affect all accounts's status
2020-07-10 13:14:18 -04:00
miruka
50e17e950d Store member presence information 2020-07-10 13:14:18 -04:00
miruka
e91a1f93e0 Fix errors related to button.loading 2020-07-10 13:14:18 -04:00
miruka
2cf7b91829 Don't try to highlight first item on menu open()
It's imprevisible where the menu is gonna open and this which item is
gonna be under the mouse cursor. Also to match the behavior of other
programs.
2020-07-10 13:14:18 -04:00
miruka
e2bc0cbd84 Improve context menu cursor workaround
- Close menu instead of clicking item, to match behavior of other
  programs

- Now work on all edges of the menu, not just top
2020-07-10 13:14:18 -04:00
miruka
d4a0434bd9 Disable "Select all" when no text in field/area 2020-07-10 13:14:18 -04:00
miruka
9a943120a8 Show how many devices will be deleted in popup 2020-07-10 13:14:18 -04:00
miruka
099c20c138 Add keyboard navigation for account device list
Enter/Return/Menu: open device menu
Space: toggle check device
Escape: uncheck all
Alt+R/F5: refresh device list
Alt+S/Delete: sign out checked or all sessions
2020-07-10 13:14:18 -04:00
miruka
612ded755a Add context menu for text fields and areas 2020-07-10 13:14:18 -04:00
miruka
657b700fcd Context menu initial cursor position workaround
Workaround for this: when opening a context menu at cursor position,
cursor will be in the menu's border instead of first menu item,
forcing the user to move the mouse for the click to do anything.
2020-07-10 13:14:18 -04:00
miruka
9612470c9c Highlight first item when opening context menu 2020-07-10 13:14:18 -04:00
miruka
3e92b882c9 Open event context menu on menu keypress 2020-07-10 13:14:18 -04:00
miruka
affd0d0bd3 Improve member list highlighted item behavior
- When focusing the "Filter members" field, highlight the first item if
  none already is

- When pressing esc in the field, clear any highlight
2020-07-10 13:14:17 -04:00
miruka
08f15b6a01 Support menu key for room/member lists currentItem
Allow opening context menu for AccountDelegate, RoomDelegate and
MemberDelegate by selecting an item with up/down (when focusing filter
field) and pressing the menu key.
2020-07-10 13:14:17 -04:00
miruka
10eeb662af HTile: handle menu key press, open context menu 2020-07-10 13:14:17 -04:00
miruka
c35894e4c8 HTile: trigger leftClicked() on enter/return/space
This makes it possible to activate any tab-focused HTile with the
keyboard.
2020-07-10 13:14:17 -04:00
miruka
cfde6cb633 Room filter field: forward keys to room list
The room list can handle up/down presses out of the box, no need to
define handlers for these on the filter field.
2020-07-10 13:14:17 -04:00
miruka
92cbc4b006 Add keyboard controls for members list & profile 2020-07-10 13:14:17 -04:00
miruka
dc2a7b8ee1 HMenuItem: always use onTriggered, not onClicked 2020-07-10 13:14:17 -04:00
miruka
b6500add68 Remove useless imports in HAvatar and HNoticePage 2020-07-10 13:14:17 -04:00
miruka
7c213a5317 Verify/blacklist devices for all our accounts 2020-07-10 13:14:17 -04:00
miruka
b0e2533bb9 Auto-verify/blacklist accounts within same client 2020-07-10 13:14:17 -04:00
miruka
9edfba8f18 Fix hovering media not changing mouse cursor shape 2020-07-10 13:14:17 -04:00
miruka
8623edc420 Fix typing notice not sent when composer cleared
Make sure to send a "we're not typing anymore" notice to the server when
the composer is cleared, e.g. when sending a message.
2020-07-10 13:14:17 -04:00
miruka
ea0a7517e4 Reload member device list after trust/blacklisting 2020-07-10 13:14:17 -04:00
miruka
963b022f3d Reload member device list when they change 2020-07-10 13:14:17 -04:00
miruka
8771ae2aae Ignore EventHandlers members not starting by "on" 2020-07-10 13:14:17 -04:00
miruka
789e9c7da8 Close verif. page when verifying/blacklisting 2020-07-10 13:14:17 -04:00
miruka
d566727698 Make close profile/verification icon thinner 2020-07-10 13:14:17 -04:00
miruka
dbfe04458c Set HStackView transitions that make sense 2020-07-10 13:14:17 -04:00
miruka
4db69424b8 Put MemberDeviceSection in its own component 2020-07-10 13:14:17 -04:00
miruka
9b43bef935 Add profile/verification UI for room members 2020-07-10 13:14:17 -04:00
miruka
4ccb774411 nio_callbacks: HTML-escape unsafe event values 2020-07-10 13:14:17 -04:00
miruka
0dbc9ce659 Fix mention CSS for display names containing < > 2020-07-10 13:14:17 -04:00
miruka
2674702a59 Fix field/area left/right press with selected text
Fix bug in HTextField & HTextArea: when all text was selected, pressing
left or right arrow keys to go to the beginning or end and deselect
didn't respond.
2020-07-10 13:14:17 -04:00
miruka
24e657d193 Protect field/area text binding if no default text 2020-07-10 13:14:17 -04:00
miruka
4752abf6e5 Add a batch set_fields method to Model 2020-07-10 13:14:17 -04:00
miruka
5476e00b9b Fix missing parentheses in marker update condition 2020-07-10 13:14:17 -04:00
miruka
3933615f67 Fix menu/popup destruction disabling keybinds 2020-07-10 13:14:17 -04:00
miruka
83047cf800 Add Utils.chunk() to split arrays in n-sized chunk 2020-07-10 13:14:17 -04:00
miruka
196d57701a Cancel device delete when popup closed 2020-07-10 13:14:17 -04:00
miruka
d701e5ea77 Improve "Sign out checked" text 2020-07-10 13:14:17 -04:00
miruka
b47d4d981f Implement session sign out (password auth only) 2020-07-10 13:14:17 -04:00
miruka
8a3d9affaa Fix signing out not cleaning up model data 2020-07-10 13:14:17 -04:00
miruka
d0c4022fa4 Fix plaintext reply source body formatting 2020-07-10 13:14:17 -04:00
vslg
3d4bfa7413 Do not use .keys() 2020-07-10 13:14:17 -04:00
vslg
d2229554a9 Do not replace existing session (#63) 2020-07-10 13:14:17 -04:00
miruka
0a2d274824 Add verified devices indicator to room header 2020-07-10 13:14:17 -04:00
miruka
90a7a3a6cf Add kineticScrollingMaxSpeed setting 2020-07-10 13:14:17 -04:00
miruka
9dc0688557 Render inline images/custom emotes
<img> tags that either have a width and height (needed for QML to render
correctly) or the data-mx-emote attribute (if they have no width/height,
we assume 32x32) will be rendered inline.

QML's support for img tags with remote src URLs seems buggy on Qt 5.15
especially, not working sometimes. We need to download and cache these
images (like done for matrix media events), and use the local path in
the img's src.
2020-07-10 13:14:17 -04:00
miruka
1a32c26b4d Don't animate "Loading messages..." when invisible 2020-07-03 15:00:07 -04:00
miruka
8a31f8a9d9 Fix responding to our own event sending wrong ID 2020-06-27 10:08:27 -04:00
miruka
b9f5ec4b72 Fix parsing user/room ID and alias with dashes
Properly highlight IDs and aliases where the server part contains a
dash, e.g. "@test:example-abc.org".
2020-06-27 06:20:09 -04:00
miruka
fedcc17c44 Correctly clear room local highlights 2020-06-26 16:26:15 -04:00
miruka
c9cc38e971 Fix QLocale error when compiling on old gcc 2020-06-26 09:56:46 -04:00
miruka
33d09c320b Fix unhandled enter on sign in and add chat pages 2020-06-26 09:28:58 -04:00
miruka
2d410bb7cc Themes: rename section scrollbar → scrollBar 2020-06-26 08:21:24 -04:00
miruka
1a93190ee2 Improve account settings avatar font size 2020-06-26 07:24:37 -04:00
miruka
475b07793d Rename Account/Room → AccountDelegate/RoomDelegate 2020-06-26 07:20:24 -04:00
miruka
0c9474598c Bump version to v0.5.2 2020-06-26 07:06:56 -04:00
miruka
604daed5fe Increase button focusline height to avoid problems 2020-06-26 06:56:29 -04:00
miruka
980e258df8 Always parent popups to window 2020-06-26 06:41:15 -04:00
miruka
74784803f5 Refresh device list: use HListView.uncheckAll() 2020-06-26 06:11:36 -04:00
miruka
d058926902 Uncheck messages before clearing event list 2020-06-26 06:11:03 -04:00
miruka
7f66ebb786 Re-add local highlights similar to 0.5.0 2020-06-26 05:59:16 -04:00
miruka
aa8dbce3a7 Re-add local unread "counter" similar to 0.5.0 2020-06-26 05:59:11 -04:00
miruka
213867750d Add unimplemented auth popup for deleting devices 2020-06-26 04:30:47 -04:00
miruka
088462c4f9 Better icons and details text for password popups 2020-06-26 04:06:01 -04:00
miruka
d40852a11c HListView: add checkedIndice property 2020-06-26 03:47:55 -04:00
miruka
a22c8ba3ad Account: remove line break after "User ID:" 2020-06-26 03:19:58 -04:00
miruka
78c04e6404 Fix flickable pages keyboard scrolling 2020-06-26 03:16:36 -04:00
miruka
2e610cf167 Correctly size the device list page 2020-06-26 02:51:31 -04:00
miruka
eca801df4c Fix laggy device list loading 2020-06-26 02:36:40 -04:00
miruka
ce1373653a Improve device list footer
- Always visible
- Add a refresh button
- Will no longer make the list slowly grow
2020-06-26 02:32:25 -04:00
miruka
cddf4ac2fe Reload section item counts on verify/blacklist 2020-06-26 02:20:12 -04:00
miruka
edc73c6952 Implement blacklisting from verification key popup 2020-06-26 02:16:00 -04:00
miruka
bcbc356a98 Implement manual key verification popup 2020-06-26 02:09:59 -04:00
miruka
d35173adc3 Correctly handle & warn about key-less devices 2020-06-25 16:10:44 -04:00
miruka
a15a101ce0 Fix error popup focusOnItemTab 2020-06-25 14:54:03 -04:00
miruka
308771f0bf Limit max device name length to 255 2020-06-25 12:37:05 -04:00
miruka
ee5675bc9b Add apply button to device renaming field 2020-06-25 12:36:36 -04:00
miruka
51327d810b Implement device renaming 2020-06-25 12:11:11 -04:00
miruka
3001131ffa Fix DeviceSection number vertical alignment 2020-06-25 11:26:21 -04:00
miruka
dcc634be04 Page & popups: standardized keyboard accept/cancel 2020-06-25 10:27:24 -04:00
miruka
476888ca84 Fix guest access event text, always said "allowed" 2020-06-25 10:11:42 -04:00
miruka
78affeddd9 Room settings avatar color: respond to name field 2020-06-25 10:06:03 -04:00
miruka
d5ea248ba1 Account page: spinners while profile is loading 2020-06-25 10:00:34 -04:00
miruka
470b0f0de2 Implement HLabeledItem loading mode 2020-06-25 09:46:26 -04:00
miruka
da4a5ab5cd Rework HBox-based pages and account settings
- Refactor everything about HBox, and adapt all the pages and popups
  that used it

- Replace HTabContainer by HTabbedBox

- Make boxes swippable

- Make esc presses in boxes click the cancel button

- Make all boxes and popups scrollable when needed

- Replace generic apply button icons in popups

- Fix tab focus for error and invite popups

- Rework (still WIP) the account settings page:
  - Use the standard tabbed design of other pages
  - Ditch the horizontal profile layout, hacky and impossible to extend
  - Add real-time coloring for the display name field

- Implement a device list in account settings (Sessions, still WIP)
2020-06-25 08:49:27 -04:00
miruka
72bd78c77e Don't keyboard-focus invisible HMenuItems 2020-06-24 16:47:51 -04:00
miruka
b9f8740954 Move room date formatting logic to utils function 2020-06-24 08:14:54 -04:00
miruka
2d8dbb172d Use fancy focus lines for buttons 2020-06-23 09:18:42 -04:00
miruka
07013d0ed4 Unify text field/area focus line into a component 2020-06-23 08:44:58 -04:00
miruka
8b0f408f34 Fix text field/area leaking arrow presses
Prevent leaking arrow presses to parent elements when the carret
is at the beginning or end of the text.
2020-06-23 06:17:52 -04:00
miruka
ad36fc72f4 Fix Connections deprecation warning on Qt 5.15
Adopt the correct behavior to get rid of
"QML Connections: Implicitly defined onFoo properties in Connections
 are deprecated. Use this syntax instead:
 function onFoo(<arguments>) { ... }"
2020-06-22 14:11:56 -04:00
miruka
ae37e13c6e Use new scrollbars for scrollviews (ie text areas) 2020-06-22 13:57:49 -04:00
miruka
783a711799 Customized themable scrollbars 2020-06-22 13:48:55 -04:00
miruka
f2f4643189 Remove event list scrollbar padding 2020-06-22 13:10:48 -04:00
miruka
e756bd2909 Set a minimum size for scrollbars 2020-06-19 12:03:04 -04:00
miruka
926f77fa91 Add MatrixClient.devices_info() method 2020-06-12 23:09:17 -04:00
miruka
bbdc16c5c9 Merge clipboard.h and clipboard.cpp 2020-06-12 14:10:11 -04:00
miruka
715a6ca530 Merge utils.h and utils.cpp 2020-06-12 14:09:47 -04:00
miruka
451abfdf25 Support MIRAGE_CACHE_DIR env variable 2020-06-11 21:50:26 -04:00
miruka
d4350f6e86 Borders for HTextArea 2020-06-06 21:54:13 -04:00
miruka
8d3ac9cd48 HTextField: support radius, have a fancier border 2020-06-06 21:45:01 -04:00
miruka
e685b0a8b7 Prefer using own account to fetch own profile 2020-06-05 08:11:40 -04:00
miruka
0f679956ec Fix topic text area inside scrollview 2020-06-05 06:33:55 -04:00
miruka
f632b4e332 Bump version to v0.5.1 2020-06-05 06:26:44 -04:00
miruka
1f441a488e Fix HFlickableColumnPage bottom padding 2020-06-05 05:53:49 -04:00
miruka
e5d64f76b7 Limit max height of room settings topic area 2020-06-05 05:48:25 -04:00
miruka
3314489a26 Make room settings pane scrollable
The new Base/ButtonLayout components will be used in the near future to
refactor other HBox-based components
2020-06-05 05:42:12 -04:00
miruka
48faac9a32 HFlickable: interactive even if nothing to scroll 2020-06-05 05:40:43 -04:00
miruka
cfee1b1e4b Fix cursor shape over text fields/areas
Fix only applies if kinetic scrolling is enabled, need WheelHandler (Qt
5.14+) otherwise
2020-06-05 01:54:42 -04:00
miruka
b81dea9bc2 Fix KeyError when forgetting a room 2020-06-05 01:39:17 -04:00
miruka
43468c25e3 Update account unread count when forgetting room 2020-06-05 01:16:27 -04:00
miruka
43ed7b2eb9 Update highlighted room when adding new chat 2020-06-05 01:07:39 -04:00
miruka
5402a332d2 Fix updating read receipt
- Find the last event that wasn't sent by us to update the marker to,
  instead of picking whichever is the most recent

- Use the proper event ID instead of ID that could be a local echo

- Wait for the current marker update request to complete before trying
  to send a new one
2020-06-04 23:12:03 -04:00
miruka
106bb3546f Topic text areas: focus next item on tab 2020-06-03 04:58:09 -04:00
miruka
7f72373afe Implement editing & saving room settings 2020-06-03 04:52:33 -04:00
miruka
00ee534150 HLabeledItem: base label/icons opacity on item's 2020-06-03 04:50:19 -04:00
miruka
9f51b3c1ca Fix field and text area defaultText binding
Break the binding when the field is focused, recreate it when focus is
lost, properly recreate it when using reset() function.
2020-06-03 04:50:10 -04:00
miruka
a6529b040c Fix handling topics containing \n, \t or <text> 2020-06-02 22:03:22 -04:00
miruka
6772f14c24 Use a text area instead of field for room topic 2020-06-02 21:52:16 -04:00
miruka
76f0c5626f Separate window urgency hint setting for mentions 2020-06-02 21:42:16 -04:00
miruka
ccd2308427 Fix new added account's order 2020-06-02 21:11:04 -04:00
miruka
241c16932f Immediatly update cached profile after changing it 2020-06-02 21:09:21 -04:00
miruka
5bf1a90242 Separate MatrixClient function to get our profile
Side-effect: don't endlessly retry anymore when getting the profile
fails for some reason
2020-06-02 20:40:44 -04:00
miruka
8ec715eab7 Improve "user not found" error messages 2020-06-02 20:30:04 -04:00
miruka
bb7178a5c4 Handle bad gateway error when starting direct chat 2020-06-02 20:24:53 -04:00
miruka
eb2c98f67f Handle MatrixNotFound errors, not UserNotFound
UserNotFound doesn't exist anymore
2020-06-02 20:19:09 -04:00
miruka
e676473f82 HLabeledTextField → extensible HLabeledItem 2020-06-02 20:14:55 -04:00
miruka
fdaf7089ab Hide popup for Python 3.7 pointless SSLError 2020-06-02 19:07:12 -04:00
miruka
283d2235dc Don't wait for server to zero unread counters 2020-06-01 18:59:49 -04:00
miruka
835d1c486f Add markRoomReadMsecDelay setting 2020-06-01 18:57:17 -04:00
miruka
f686b96511 Cross-client unread counters & send read receipts 2020-06-01 09:25:09 -04:00
miruka
d2300bf663 Update account total notif/highlight calculation 2020-05-31 19:41:05 -04:00
miruka
3791a08eea Terminology: room mention count → highlight count 2020-05-31 19:13:19 -04:00
miruka
dce3328037 Use new nio server-backed room unread counts 2020-05-31 19:06:25 -04:00
miruka
7b5aa8ffe1 Store room member read markers in model 2020-05-31 00:38:48 -04:00
miruka
160ce2643e Add type hints for all NioCallbacks methods 2020-05-31 00:11:56 -04:00
miruka
ca7a47bc19 Register nio callbacks for any class in nio.events 2020-05-30 23:39:07 -04:00
miruka
b399de6776 Remove account collapse bug workaround
Unable to reproduce the bug where collapsing an account with lots of
rooms corrupts the ListView, did updating to Qt 5.14.2 do something?

With the workaround removed, the 0.2s delay when removing batch of
ListView items (e.g. when filtering) is gone.
2020-05-30 23:08:21 -04:00
miruka
de894ab4bb Protect proxy/filter models with write_lock 2020-05-30 23:08:21 -04:00
miruka
9862e39108 HSelectableLabel: selectByMouse true by default 2020-05-30 23:08:21 -04:00
miruka
8b9681dc78 Rename HTextArea.append() → .insertAtCursor() 2020-05-30 23:08:21 -04:00
miruka
877290fc00 Handle 502 errors when inviting bad user to room 2020-05-30 23:08:21 -04:00