Commit Graph

11667 Commits

Author SHA1 Message Date
Ivan Enderlin
b0c1eda682 refactor(base): Create the state_events::dispatch_and_get_new_users response processor.
This patch extracts the `BaseClient::handle_state` method as a new
response processor named `state_events::dispatch_and_get_new_users`.
It appears that we can do something more elegant with the returned new
users. See the next patch.
2025-04-11 10:32:08 +02:00
Ivan Enderlin
afecd6d508 chore(base): Simplify code by calling iter::zip instead of Iterator::zip.
This patch uses `iter::zip` to replace `Iterator::zip`. It does exactly
the same, it's just shorter.
2025-04-11 10:32:08 +02:00
Ivan Enderlin
52b490f5b6 chore(base): Remove allow(unused_mut) for the context.
This is used everytime now :-).
2025-04-11 10:32:08 +02:00
Ivan Enderlin
097558ca1b chore(base): Rewrite code to avoid an allocation and calling twice the same function.
This patch rewrites `e2e::decrypt::sync_timeline_event` to avoid calling
a `verification` twice with the same arguments, and to avoid a string
allocation (the `to_string`).

Also, I wasn't comfortable with the `starts_with` which wasn't included
a trailing `.`. At least now we rely on strongly typed event type.
2025-04-11 10:32:08 +02:00
Ivan Enderlin
2194a81d74 refactor(base): Create the e2ee::decrypt::sync_timeline_event response processor.
This patch extracts the `BaseClient::decrypt_sync_room_event` method
into the new `e2ee::decrypt::sync_timeline_event` response processor.
2025-04-11 10:32:08 +02:00
Ivan Enderlin
37146da27a chore(base): Rename from_sync_v3 to …_v2.
The version of something is 3 but the sync version is 2. Confusing.
2025-04-11 10:32:08 +02:00
Mauro Romito
9300f47b40 feat(bindings): join_rule in NotificationItem 2025-04-11 10:29:59 +02:00
Mauro Romito
52f0aafb1e feat(bindings): expose is_public in notifications 2025-04-11 10:29:59 +02:00
dependabot[bot]
bfbbe89989 chore(deps): Bump crossbeam-channel from 0.5.13 to 0.5.15
Bumps [crossbeam-channel](https://github.com/crossbeam-rs/crossbeam) from 0.5.13 to 0.5.15.
- [Release notes](https://github.com/crossbeam-rs/crossbeam/releases)
- [Changelog](https://github.com/crossbeam-rs/crossbeam/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crossbeam-rs/crossbeam/compare/crossbeam-channel-0.5.13...crossbeam-channel-0.5.15)

---
updated-dependencies:
- dependency-name: crossbeam-channel
  dependency-version: 0.5.15
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-10 16:52:10 +02:00
Richard van der Hoff
d25e236a75 Merge pull request #4917 from matrix-org/rav/tracing_improvements
Cleanups and extensions to tracing span logic
2025-04-10 11:47:53 +01:00
Damir Jelić
ab90c1b945 refactor(sdk): Migrate away from the backoff crate to the backon crate
Since backon also has WASM support, this should mean that we can get rid
of the WASM specific HTTP client implementation.
2025-04-10 11:58:06 +02:00
Jorge Martín
005e506c9b refactor(ffi): expose Room::member_with_sender_info.
Reuse this for `RoomPreview` too, removing `RoomMembershipDetails`, which contained the same info.
2025-04-10 09:48:15 +02:00
Jorge Martín
3fe457db83 refactor(room): change Room::own_membership_details to member_with_sender_info.
The function will now return the previously added `RoomMemberWithSenderInfo` struct.
2025-04-10 09:48:15 +02:00
Jorge Martín
69ab855efa refactor(room): add RoomMemberWithSenderInfo struct.
This will hold the info for both the room member whose sender id was provided and the sender of the `m.room.member` event from which the `RoomMember` is built.
2025-04-10 09:48:15 +02:00
Richard van der Hoff
66c7ba60a9 sdk: reduce clobber attached to tracing spans for http requests
We don't need to list the `server_versions` every time we do an http
request. Further, `config` is listed under both `skip` and `fields`, which ends
up being a no-op. I don't think it's very useful (and is quite noisy), so
let's remove it.
2025-04-09 19:55:38 +01:00
Richard van der Hoff
3e320b8289 sdk: propagate tracing span for outgoing requests
In parallel to a sliding sync request, we also check for and send pending outgoing
requests from the crypto stack. Currently, these drop the tracing span, which
loses valuable data. We should propagate the span.

We also add an extra layer of instrumentation so that we can differentiate
between the results of the sliding sync itself, and the outgoing requests.
2025-04-09 19:55:38 +01:00
Richard van der Hoff
2922389037 UI: Allow attaching a parent tracing span for sync service
Currently, if you have two clients both syncing away inside the same process,
it's approximately impossible to see which logs belong to which client. It
would be much better if we could use a tracing span to distinguish the two
clients.

I expect this to be mostly useful in integration tests, but it might be useful
elsewhere too.
2025-04-09 19:54:01 +01:00
Damir Jelić
68e3cdebdd chore: Bump the blake3 version 2025-04-09 16:37:40 +02:00
Damir Jelić
511cf78d51 chore: Bump the rusqlite version 2025-04-09 16:37:40 +02:00
Damir Jelić
f4eea708fa chore: Update the ByteSize crate version we're using 2025-04-09 16:37:40 +02:00
Richard van der Hoff
1d3107ebcb multiverse: reduce redraw rate
This reduces the framerate from ~62fps to 10fps.

This is a workaround for a problem in my terminal, so apologies for inflicting
it on everyone else, but here we are, and 10fps seems like it should be enough
for anyone.

The problem in question is specifically when I try to select some text by
dragging the mouse (eg, to copy a generated recovery key). If I start a drag,
but a redraw happens before the mouse has moved [a certain distance?], then the
drag doesn't work, and nothing gets selected. By reducing the framerate, I have
a much better chance of successfully starting a drag.
2025-04-09 16:10:31 +02:00
Richard van der Hoff
073b4bae03 multiverse: allow recovery keys with h or l in them
Currently, `h` and `l` are intercepted by the parent view to change tab,
meaning it's impossible to enter a recovery key which contains those
characters.

The fix here is very blunt: it just disables `h` and `l` for tab-changing. I
considered making it dependent on which tab is open, or what's going on in the
'Encryption' tab, but given you need to know about the alternatives (tab/cursor
keys) to switch away from the Encryption tab, I don't think that makes sense.
2025-04-09 14:53:36 +02:00
Richard van der Hoff
35e13b8730 Merge pull request #4903 from matrix-org/rav/history_sharing/upload_bundle_prep
crypto: prep work for sharing room key history bundles
2025-04-09 10:40:42 +01:00
Damir Jelić
f266fb9c38 chore(ffi): Update the changelog so it conforms to our cargo-release setup 2025-04-09 11:26:59 +02:00
Damir Jelić
2dfd334ade chore: Include the matrix-sdk-ffi crate in the release process 2025-04-09 11:26:59 +02:00
Damir Jelić
89d0cc5a76 chore: Add a missing PR link in one of the changelogs 2025-04-09 09:16:53 +02:00
Stefan Ceriu
628440632d chore(ffi): move reactions from EventTimelineItem to MsgLikeContent to keep in line with the UI crate types 2025-04-08 17:47:17 +03:00
Stefan Ceriu
16a3d9d78b chore(ffi): introduce MsgLike Content and Kind and move mappings 2025-04-08 17:47:17 +03:00
Stefan Ceriu
d89a7d6c18 chore(ffi): move MsgLike related types to their own file 2025-04-08 17:47:17 +03:00
Stefan Ceriu
87c70789fe chore(ffi): move replies to their own file 2025-04-08 17:47:17 +03:00
Damir Jelić
9cde7f46bc docs: Use the github background color for the logo on dark themes 2025-04-08 16:13:59 +02:00
Damir Jelić
3e2b95cdb9 doc: Update the main readme
Now with a logo.
2025-04-08 14:26:20 +02:00
Richard van der Hoff
dc3bd69af1 crypto: rename MaybeEncryptedRoomKey::Withheld to MissingSession
This is only used to indicate missing sessions, and the `code` is no longer
used, so let's rename the variant and remove the redundant field.
2025-04-08 12:47:08 +01:00
Richard van der Hoff
da14cef6c1 crypto: Factor out a EncryptForDevicesResultBuilder
We want to re-use all this logic, so putting it in a separate type will
help. Plus I think it's cleaner.
2025-04-08 12:47:08 +01:00
Ivan Enderlin
a1ac363383 refactor(base): Create account_data::for_room response processor.
This patch moves the `handle_room_account_data` method as the new
`account_data::for_room` response processor.

Instead of taking the `BaseClient` to fetch the room in `on_room_info`,
it now takes a `BaseStateStore`, which is safer and more straight to
the point.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
9e5ef57a5f refactor(base): AccountDataProcessor becomes a response processor.
This patch changes `AccountDataProcessor` to
`processors::account_data::global`. The next patch will introduce a
per-room account data processor, hence the renaming to `Global` to make
the difference between the twos.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
da86552648 refactor(base): Remove a pub(crate).
This patch removes a `pub(crate)`. This is a private method only.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
c0f4e90965 refactor(base): Rename a couple of variables.
This patch renames a couple of variables because it's important
to understand that those stripped state events are coming from the
`invite_state` value of a sliding sync response. This is a pretty
important detail.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
cf393bf8e1 refactor(base): verification must be behind e2e-encryption. 2025-04-08 13:20:31 +02:00
Ivan Enderlin
2ee0e175fa refactor(base): Create the state_events::collect_* response processors.
This patch creates the `state_events::collect_sync`
and `collect_stripped` response processors. It
removes the `BaseClient::deserialize_state_events` and
`deserialize_stripped_state_events` methods. It also removes a couple of
`Vec` allocations and a couple of clones.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
5c011a8400 refactor(base): Create the changes::save_and_apply response processor.
This patch creates the `changes::save_and_apply` response
processor. It consists of moving `BaseClient::apply_changes` plus
the code that is always around. This patch helps to remove the
`BaseClient::load_previous_ignored_user_list` method.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
b6b0c556b9 doc(crypto): Fix typos. 2025-04-08 13:20:31 +02:00
Ivan Enderlin
0c5f0b8d26 chore(base): Remove the with_e2ee internal module.
Just because it's clearer.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
e7e15ca280 refactor(base): Create the tracked_users response processor.
This patch creates the new `tracked_users::update_if_necessary` response
processor, and uses it in two places where the code was duplicated.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
222cffd502 chore(base): Move e2ee.rs to e2ee/to_device.rs. 2025-04-08 13:20:31 +02:00
Ivan Enderlin
cbef772eaa refactor(base): Move handle_room_member_event_for_profiles as a processor.
This patch moves the `handle_room_member_event_for_profiles`
function inside the collection of response processors under the name
`profiles::upsert_or_delete`.
2025-04-08 13:20:31 +02:00
Ivan Enderlin
e7e9c7bcf2 refactor(base): Use response_processors::Context everywhere.
This patch updates codes in `BaseClient` to use `Context` as much as
possible.
2025-04-08 13:20:31 +02:00
Richard van der Hoff
f1ea3e64d0 crypto: new result type for encrypt_session_for
Reduce the size of the tuple that this thing returns by defining a new result
type.

I haven't put the `share_infos` in the struct, because I'm going to reuse the
same struct for another method where `share_infos` aren't needed.
2025-04-08 12:18:21 +01:00
Richard van der Hoff
257deb4b94 crypto: factor out collect_recipients_for_share_strategy
For cases where we don't have a whole `EncryptionSettings`, we need
a finer-grained method.
2025-04-08 12:18:21 +01:00
Jorge Martín
3ece8e62b5 refactor(ffi): export NotificationItem::thread_id in the FFI layer 2025-04-08 11:53:39 +02:00