Commit Graph

515 Commits

Author SHA1 Message Date
miruka
86f0a8a6a0 Add warning popup when old settings.json detected 2021-03-03 17:14:55 -04:00
miruka
626a43b7b0 Replace pprintpp usage by devtools.debug 2021-03-03 17:14:55 -04:00
miruka
0dadf7de97 Have split python_(remote_)debugger keybinds
python_debugger (shift+F1) will now always start pdb, and
python_remote_debugger will always start remote_pdb.
Since the new autoreload.py script doesn't break stdin like entr with
live-reload.sh did, we can now use pdb if the app is connected to a
terminal.
2021-03-03 17:14:55 -04:00
miruka
01adc71646 Catch error when sending dbus notification fails 2021-03-03 17:14:55 -04:00
miruka
98b6a7b74e Add detail tooltips in server browser stability %
When hovering on stability percentages in the server browser, a tooltip
now shows the total downtime in the past 30 days, number of incidents,
their average length and the longest's duration.
2021-03-03 17:14:55 -04:00
miruka
ae4bcffa06 settings.py: add Chat.Composer.TypingNotifications 2021-03-03 17:14:55 -04:00
miruka
50d4aae188 Remove unused ExitRequested pyotherside event 2021-03-03 17:14:55 -04:00
miruka
69a338f610 Fix handling errors in config files on startup 2021-03-03 17:14:55 -04:00
miruka
199ec7646b Watch files included from PCN files (auto-reload) 2021-03-03 17:14:55 -04:00
miruka
1a101d9888 Disable new theme test code for now 2021-03-03 17:14:55 -04:00
miruka
42f04b013e Add PCN theme system
Coexist with the old theme system for now. QML components have to be
updated to use the new system.
2021-03-03 17:14:55 -04:00
miruka
1af1d30c48 Make color module objects available to PCN 2021-03-03 17:14:55 -04:00
miruka
64c0998a68 Merge color.py and svg_colors.py
The SVG colors are now an enum of Color objects, instead of hex strings.
The "transparent" color was also added, which isn't in the standards but
works in QML.
2021-03-03 17:14:55 -04:00
miruka
97cfe7049d Add color.py module for theming 2021-03-03 17:14:55 -04:00
miruka
a53aec0ff9 Fix handling of config file deleted at runtime 2021-03-03 17:14:55 -04:00
miruka
c1dc9a80b2 Fix default data when no .gui.json file exists 2021-03-03 17:14:55 -04:00
miruka
9a813ecaa8 Fix PCN include_builtin() when running under QRC 2021-03-03 17:14:55 -04:00
miruka
1e002eb4a5 Fix flake8/mypy/isort code errors from new setup 2021-03-03 17:14:55 -04:00
miruka
3564e7a571 Turn bookmarks/aliases/at_index into Sections 2021-03-03 17:13:51 -04:00
miruka
fbd3f6f4a2 PCN: allow adding new properties at run-time 2021-03-03 17:13:51 -04:00
miruka
9348df32f7 PCN: support quoted strings as property names 2021-03-03 17:13:51 -04:00
miruka
db12036372 Use new PCN format for settings config file 2021-03-03 17:12:09 -04:00
miruka
6ce3059322 Raise error if loading a JSON fails
Don't use the default config if there's an error in a JSON config file,
a single typo could lead to an entire user settings file getting
overwritten by default data.
2021-03-03 17:12:09 -04:00
miruka
75fbf23b21 Refactor user_files module & add live reloading
- Cleaner design for the backend user_files classes and simplified
  interaction with QML
- Config and theme files will now automatically reload when changed on
  disk
- Removed manual reload keybind and button
2021-03-03 17:12:09 -04:00
miruka
8ca8f490fa JSONify ModelItemDeleted.ids for QML if needed
If a model has tuple keys, these already get turned into JSON strings
for the ModelItemSet pyotherside event (for QML and JS reasons).
Do the same for ModelItemDeleted's ids field, else the QML event handler
will be unable to find the items by IDs.
2021-03-03 17:12:09 -04:00
miruka
b38fbc6d9b Fix filtered_members models updates 2021-03-03 17:12:09 -04:00
travankor
055b68126a Add Sorted Containers to replace blist 2021-03-03 17:12:09 -04:00
travankor
1dcd6daaba Improve Python 3.9 compatibility
Blist has been unmaintained for 5+ years and is now broken on Python 3.9.
2021-03-03 17:12:09 -04:00
miruka
da75568428 Fix segfault on coroutine cancelling from QML
Since 87fcb0a773f4855cdae7212fa9448a05de57be56, it was possible to call
a Python coroutine, but cancel it (due to parent component destruction)
before Python even has time to start it.
The registred QML callbacks for this coro would then be called,
potentially causing a segfault if that callback tried to access the
parent component or its properties.
2021-03-03 17:12:09 -04:00
miruka
ac111603da Fix err with no M_CODE falling back on wrong class
When we received server errors with no matrix M_CODE, the MatrixError
class would fall back to its first subclass that had a matching HTTP
status code. This notably caused any 401 error to be interpreted as
MatrixInvalidAccessToken, and disconnect the user.
2021-03-03 17:12:09 -04:00
koudja
52b0bb18cb Add room bookmarking: bookmarks are always on top
Introduce a bookmark system for rooms:
a room bookmarked will always appear on top of every other
(for a given account).

Bookmarking can be done through context menu on targeted room
(as well as un-bookmarking) or through settings.json
(key roomBookmarkIDs) for permanent bookmark.
roomBookmarkIds is a {account_user_id: [room_id]} dict.
2021-03-03 17:12:09 -04:00
miruka
d4be4cca69 Fix incorrectly espaced HTML for redaction reason
A redacted event with a reason containing problematic HTML characters,
e.g. "<test>" would render as literal escaped HTML, e.g. "&lt;test&gt;"
2021-03-03 17:12:09 -04:00
miruka
0e3821a592 Prefix event transaction_id keys with reverse DNS
Respect the Matrix spec by using
"io.github.mirukana.mirage.transaction_id" instead of
"mirage.transaction_id".
2021-03-03 17:12:08 -04:00
miruka
aa5d522902 Swap default shift & nomod image viewer keybinds
zoomOut/zoomIn, rotateRight/rotateLeft, previousSpeed/nextSpeed:
Make them shift+Z/Z, shift+R/R, shift+S/S by default
instead of Z/Shift+Z, R/shift+R, S/shift+S
2021-03-03 17:12:08 -04:00
miruka
ee1091b4dc Don't pass Python Future objects to QML
Returning a Future doesn't work on Windows for some reason
(https://github.com/thp/pyotherside/issues/116).

Instead of using these objects from QML to cancel running coroutines,
call a Python QMLBridge function that takes a coroutine UUID and will
take care of the cancelling.
2021-03-03 17:12:08 -04:00
miruka
c861c29b73 Add nonKineticScrollingSpeed multiplicator setting 2021-03-03 17:12:08 -04:00
miruka
1df7cb8014 Add copyright header to source code files
Copyright notice as per
https://reuse.software/spec/#format-of-copyright-notices

Fixes #134
2021-03-03 17:12:08 -04:00
miruka
54234399f5 Fix "Mentions & keywords" notification level
Make it work in cases where multiple accounts are present in the room
and one of them is highlighted.
2021-03-03 17:12:08 -04:00
miruka
03e4f9b85e Make settings icon open a more complete menu 2021-03-03 17:12:08 -04:00
miruka
22e7dc7e8d Notifications: format replies properly 2021-03-03 17:12:08 -04:00
miruka
4cd562e02f Notifications: process non-message events text 2021-03-03 17:12:08 -04:00
miruka
94a623f677 Print coro infos on get_client not found error 2021-03-03 17:12:08 -04:00
miruka
7ae2ae6cd7 Notifications: turn newline symbols into real <br> 2021-03-03 17:12:08 -04:00
miruka
4a6e2ea46a Prevent duplicate notifications for the same event 2021-03-03 17:12:08 -04:00
miruka
8691a8c85b Add sender avatar to desktop notifications 2021-03-03 17:12:08 -04:00
miruka
21ccf90d23 Notifications: properly italicize emote messages 2021-03-03 17:12:08 -04:00
miruka
dcc3473ecf Don't show notification if window is focused 2021-03-03 17:12:08 -04:00
miruka
a8a25d09ee Ensure room has 2 members to hide notif. sender 2021-03-03 17:12:08 -04:00
miruka
04daae8328 Fix account unreads not updated from old events 2021-03-03 17:12:08 -04:00
miruka
4dacc3a12d Make alerts and notification push rules-aware 2021-03-03 17:12:08 -04:00
miruka
69e414b31c Add basic desktop notifications support 2021-03-03 17:12:08 -04:00
miruka
8d71e5eb87 Bump version to 0.6.4 2020-09-16 07:52:04 -04:00
miruka
0db80d312b Bump to version 0.6.3 2020-09-15 15:03:47 -04:00
miruka
d7d111705f Don't center the room list on clicks by default
Previously, clicking to select a room would make the list jump around
to become centered again. This behavior is now reserved to keyboard
navigation.

A "centerRoomListOnClick" setting has been added to allow going back
to the previous behavior.
2020-09-14 12:02:28 -04:00
miruka
2712896456 Show read marker counts on messages
Tells how many people have the message as their last seen one in the
room.
2020-09-14 11:58:37 -04:00
miruka
32679aa7f8 Abandon fetching offline presence on 400 error
It seems like some servers return a M_UNRECOGNIZED code instead of
M_FORBIDDEN or "offline" when trying to fetch the presence for a user
and it's not available.

Fixes https://github.com/mirukana/mirage/issues/116
2020-09-13 10:34:01 -04:00
miruka
a9c316fcf5 Store read receipts in event model items 2020-09-11 14:50:27 -04:00
miruka
d51d266642 Add ModelItem.notify_change() for list/dicts 2020-09-11 14:50:27 -04:00
miruka
7580ecfd64 Fix missing typing.Tuple import in model.py 2020-09-11 14:50:27 -04:00
miruka
0ccf3d03c9
Merge pull request #125 from vSLG/system-tray
Add a system tray icon
2020-09-11 13:52:20 -04:00
miruka
d48f96f219 Describe power levels <0 as "muted" in event text 2020-09-04 19:56:31 -04:00
miruka
d5212b0f84 Fix power level reset back to default not seen
Previously, changes in power level events where a key is set back to the
default and absent from the "current levels" dict (e.g. a muted user -1
is unmuted and becomes 0, the room default, thus is only present in the
"previous levels" dict) were taken into account when generating the
event text.
2020-09-04 19:51:27 -04:00
vslg
56ad0b9975 Add config option closeMinimizesToTray
Options of the system tray icon:
- Hide/show Mirage
- Quit Mirage

Draw attention to Mirage when clicking on the icon
2020-09-04 17:30:12 -03:00
miruka
acb1367f11 Fix warnings when uploading to non-E2E room
Fix these:

    <Unknown File>: media_crypt_dict is undefined.
    Adding an object with a undefined member does not create a role for it.
2020-09-04 14:57:09 -04:00
miruka
56f676e35d "X removed this event": say "message" instead
That's what was supposed to happen for non-media message events
since redactions were implemented, but seems like nio doesn't
properly keep the original event type.
2020-09-04 14:52:10 -04:00
miruka
ebfc3d3ee2 Fix redacted media events keeping their thumbnails 2020-09-04 14:47:47 -04:00
miruka
65a1324eb0 Fix initial and non-initial sync filters reversed
Issue introduced in 758edd8a6a (0.6.1)
The filter for the first sync was passed as the filter for later
syncs and vice-versa, which caused problems like redaction events never
arriving.
2020-09-04 14:40:00 -04:00
miruka
7b6478f514 Correctly handle account with invalid access token
Show a popup saying the session was signed out and cleanup
the models data, instead of spamming the users with
never-ending errors.
2020-09-04 11:25:29 -04:00
miruka
f5cb3ecaa0 Keep a {id: item} cache for ModelStore models
Accelerates the ModelStore ListView find() function,
which now just has to get an object key instead of looping through the
whole model.
2020-09-02 13:38:11 -04:00
miruka
a1b9f34958 Add setting to sort rooms lexically 2020-09-01 14:42:08 -04:00
miruka
8b37ca2524 Add a persistent zoom setting to settings.json
The zoom keybinds now modify this setting directly.
The `uiScale` property in themes now default to using this zoom setting,
since just removing it would need of annoying changes through theme
files and QML code, and is best left to until the future theming
overhaul update.
2020-09-01 14:19:40 -04:00
miruka
63ccca60cb Fix theme file finder ignoring $MIRAGE_DATA_DIR 2020-09-01 14:05:19 -04:00
miruka
d53cf0cbbe Bump version to v0.6.2 2020-08-28 10:45:37 -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
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
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
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
fbf6e48b5b Fix mentioning users without display names 2020-08-23 09:41:41 -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
8ab4ce8ad7 Bump version to v0.6.1 2020-08-21 12:10:22 -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
e0e92152d0 Fix infinite account spinner when logging in twice 2020-08-21 05:33:57 -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
f648807730 Remove unused Device model item 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
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
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
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