Commit Graph

13223 Commits

Author SHA1 Message Date
Ivan Enderlin acff6c2e1d doc(base): Fix an intra-link in the documentation. 2025-04-11 10:32:08 +02:00
Ivan Enderlin 1013843071 refactor(base): Create the timeline::build response processor.
This patch does the following things:

1. moves the `BaseClient::handle_timeline` method as the
   `timeline::build` response processor.
2. moves the `BaseClient::update_push_room_context` method as a private
   function of the `timeline` response processor module,
3. moves the `BaseClient::get_push_room_context` method as a public
   function of the `timeline` response processor module.

The scope of the `timeline::build` processor is a bit too broad, but at
least the number of methods on `BaseClient` are greatly reduced.
2025-04-11 10:32:08 +02:00
Ivan Enderlin a0bfd3e21e chore(clippy): Make Clippy happy. 2025-04-11 10:32:08 +02:00
Ivan Enderlin 68352e8339 chore(base): Rename variables for the sake of clarity.
Don't know what `event`, `e`, `e`, `e` or `r` represent? Me neither.
This patch tries to fix that.
2025-04-11 10:32:08 +02:00
Ivan Enderlin 6a5e24a64a refactor(base): Create the verification::process_if_candidate response processor.
This patch creates a new `verification::process_if_candidate` response
process. The idea is the check whether a `AnySyncTimelineEvent` suits to
be a verification event that must be processed.

This piece of code was repeated in three different places in the code.
Now it's unique.
2025-04-11 10:32:08 +02:00
Ivan Enderlin db6d1b4cd6 refactor(base): BaseClient::handle_timeline no longer handle state events.
This patch removes the `ignore_state_events` argument from
`BaseClient::handle_timeline`. This method no longer handles state
events. Consequently, the `user_ids` and `ambiguity_cache` arguments are
also removed.

This patch updates the flow to use the new
`state_events::collect_sync_from_timeline` processor, and to re-use the
`state_events::dispatch_and_get_new_users` processor.

The positive impact of this patch is that it re-uses existing code
(hurray). However, the downside is that state events are deserialized
twice for the moment.
2025-04-11 10:32:08 +02:00
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