Andy Balaam
d061e7a5b2
refactor(tests): Pass decryption_settings in to send_and_receive_encrypted_to_device_test_helper
...
To allow passing in different values in future tests.
2025-07-24 15:08:13 +01:00
Andy Balaam
f4619c91d3
refactor(tests): Re-use send_and_receive_encrypted_to_device_test_helper in 2 more tests
2025-07-24 15:08:13 +01:00
Andy Balaam
227f6eab85
refactor(tests): Take a reference to content in send_and_receive_encrypted_to_device_test_helper
...
This will allow us to re-use it in more tests.
2025-07-24 15:08:13 +01:00
Andy Balaam
16d7c3c094
refactor(crypto): Extract a method to check for to-device events from dehydrated devices
2025-07-24 15:08:13 +01:00
Andy Balaam
c238a0edb8
refactor(crypto): Pass DecryptionSettings in to OlmMachine::decrypt_to_device_event
...
This will be used in the next commit, but it was very noisy, so I
separated it out into this commit to make the next one easier to read.
2025-07-24 15:08:13 +01:00
dragonfly1033
822b709107
feat(sdk): Leaving a room now leaves its predecessors as well
...
Signed-off-by: Shrey Patel shreyp@element.io
2025-07-24 13:56:05 +02:00
Michael Goldenberg
ada68e1114
feat(indexeddb): add IndexedDB-backed impl for EventCacheStore::find_event_relations
...
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net >
2025-07-23 18:03:06 +02:00
Michael Goldenberg
c9137f0cad
fix(indexeddb): Updates::PushItems performs an update if any provided item already exists
...
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net >
2025-07-23 18:03:06 +02:00
Michael Goldenberg
4e0dab959a
feat(indexeddb): add IndexedDB-backed impl for EventCacheStore::save_event
...
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net >
2025-07-23 18:03:06 +02:00
Michael Goldenberg
e862ded147
feat(indexeddb): add IndexedDB-backed impl for EventCacheStore::find_event
...
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net >
2025-07-23 18:03:06 +02:00
Michael Goldenberg
5cb033ad91
feat(indexeddb): add IndexedDB-backed impl for EventCacheStore::filter_duplicated_events
...
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net >
2025-07-23 18:03:06 +02:00
Kévin Commaille
0e622cc5a1
Upgrade Ruma (phase 3)
...
This upgrade introduces support for room version 12[1].
[1]: https://matrix.org/blog/2025/07/security-predisclosure/ )
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr >
2025-07-23 14:32:05 +00:00
Jorge Martín
6d562eff2f
fix: Restore the previous behaviour for calculating the timeout for syncs
2025-07-23 15:55:31 +02:00
Jorge Martín
af2e15e02f
refactor(ffi): Add the default read_timeout value to the FFI layer
2025-07-23 15:55:31 +02:00
Jorge Martín
79aa5aaf16
refactor: Remove the default timeout when downloading media, rely on read_timeout instead
...
Users with poor network connectivity complained their downloads were cancelled for no good reason after 30s before (the default `timeout` value).
2025-07-23 15:55:31 +02:00
Jorge Martín
0833ffdef2
refactor: Add RequestConfig::read_timeout to cancel network connections that have been stale for longer than the specified timeout
2025-07-23 15:55:31 +02:00
Jorge Martín
16f7239215
refactor: Make RequestConfig::timeout optional
...
This allows us to remove the default timeout on a per-request basis
2025-07-23 15:55:31 +02:00
Doug
da946e51dd
ffi: Update Client::get_url to return raw data and to throw on HTTP errors
...
Client::get_url is there for SDK consumers to be able to use the
existing HTTP stack (configuration and all) however in practice it was a
bit weird:
- Responses came back as strings limiting the types of resource that
could be fetched (as well as requiring the string to be converted back
to data before handed to a JSON decoder).
- HTTP errors weren't being raised and instead you would find the (e.g.
404) error response in the Ok case.
This patch fixes both of these issues.
2025-07-23 15:24:49 +02:00
Benjamin Bouvier
cba711dbdf
feat(timeline): add support for sending sticker/polls in thread automatically too
2025-07-23 15:05:23 +02:00
Benjamin Bouvier
e87e9331c1
feat!(timeline): infer the reply type automatically when sending a media gallery
2025-07-23 15:05:23 +02:00
Benjamin Bouvier
6e9fc70d13
refactor(timeline): homogeneize naming of replied_to vs in_reply_to
2025-07-23 15:05:23 +02:00
Benjamin Bouvier
e2148e46bc
feat!(timeline): infer the reply type automatically when sending an attachment
2025-07-23 15:05:23 +02:00
Benjamin Bouvier
d1163b75bf
feat!(timeline): Timeline::send_reply() automatically includes the thread relationship too
2025-07-23 15:05:23 +02:00
Benjamin Bouvier
5ae7d0f60f
feat(timeline): Timeline::send() automatically includes the thread relationship for thread foci
2025-07-23 15:05:23 +02:00
Benjamin Bouvier
6f067d5510
doc(event cache): add a code comment indicating why room updates processing isn't happening concurrently
2025-07-23 11:21:09 +02:00
Benjamin Bouvier
d6fe654814
bench: add a benchmark for measuring the time it takes to handle a sync update in the event cache
2025-07-23 11:21:09 +02:00
Benjamin Bouvier
2710510786
refactor(base): use let chains where the comment said to do so \o/
2025-07-23 09:57:50 +02:00
Benjamin Bouvier
35a8528712
chore(base): clippy fixes
2025-07-23 09:57:50 +02:00
Benjamin Bouvier
f9735c75d3
chore(base): rustfmt 2024 edition
2025-07-23 09:57:50 +02:00
Benjamin Bouvier
15e6b81835
chore(base): upgrade matrix-rust-sdk-base to edition 2024
2025-07-23 09:57:50 +02:00
Damir Jelić
bcb4ab4b10
contrib: Set our check command to check instead of clippy
...
Clippy is a bit too heavy to be used as the check on save command in
this repo.
Let's set a better default.
2025-07-22 15:20:37 +02:00
Kévin Commaille
4931c0749e
Upgrade Ruma again
...
This patch updates our `Raw` API usage since the newly added `JsonCastable` that disallows Raw casts that are known to fail deserialization.
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr >
2025-07-22 12:59:26 +00:00
Kévin Commaille
37626b5ad9
Bump Ruma
...
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr >
2025-07-22 14:00:53 +02:00
Benjamin Bouvier
d19616da03
chore!: bump the MSRV to 1.88
...
let-chains ftw
2025-07-22 12:15:33 +02:00
Ivan Enderlin
7c8f870d16
Revert "fix(sdk): Disable OrderTracker for the moment."
...
This reverts commit c5f2460e02 .
2025-07-22 10:24:27 +02:00
Benjamin Bouvier
b482ccd318
feat(sqlite): make sqlite's implementation of load_all_chunks_metadata even faster
...
See the updated code comment.
2025-07-21 17:41:06 +02:00
Ivan Enderlin
165ec9db1b
bench: Add a benchmark for EventCacheStore::load_all_chunks_metadata.
2025-07-21 10:31:44 +02:00
Ivan Enderlin
6f42210d6a
feat(sqlite): Improve throughput of load_all_chunks_metadata by 1140%.
...
This patch changes the query used by
`SqliteEventCacheStore::load_all_chunks_metadata`. It was the cause of
severe slowness. The new query improves the throughput by +1140% and the
time by -91.916%. The benchmark will follow in the next patch.
Metrics for 10'000 events (with 1 gap every 80 events).
- Before:
- throughput: 20.686 Kelem/s,
- time: 483.43 ms.
- After:
- throughput: 253.52 Kelem/s,
- time: 39.478 ms.
This query will visit all chunks of a linked chunk with ID
`hashed_linked_chunk_id`. For each chunk, it collects its ID
(`ChunkIdentifier`), previous chunk, next chunk, and number of
events (`num_events`). If it's a gap, `num_events` is equal to 0,
otherwise it counts the number of events in `event_chunks` where
`event_chunks.chunk_id = linked_chunks.id`.
Why not using a `(LEFT) JOIN` + `COUNT`? Because for gaps, the entire
`event_chunks` will be traversed every time. It's extremely inefficient.
To speed that up, we could use an `INDEX` but it will consume more
storage space. Finally, traversing an `INDEX` boils down to traverse a
B-tree, which is O(log n), whilst this `CASE` approach is O(1). This
solution is nice trade-off and offers great performance.
2025-07-21 10:31:44 +02:00
Kévin Commaille
6125580275
feat: Add Account::fetch_account_data_static
...
It uses the statically-known type from the `StaticEventContent`
implementation to call `fetch_account_data()`.
This is the equivalent of `Account::account_data()` but for fetching
from the server. It avoids the need to cast to the proper type after.
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr >
2025-07-18 16:01:07 +02:00
Kévin Commaille
8b3e295429
refactor(test): Use EventBuilder::into_raw_timeline rather than into_event
...
We need the full event so its better to build it an cast it to a sync
event than the opposite.
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr >
2025-07-18 16:01:07 +02:00
Kévin Commaille
1e568efbb5
refactor: Remove unnecessary Raw casting
...
The types are already correct so there is no need for casting.
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr >
2025-07-18 16:01:07 +02:00
Andy Balaam
f89ced3ded
task(sliding_sync): Avoid logging the entire sliding sync response at the DEBUG level
...
Signed-off-by: Damir Jelić <poljar@termina.org.uk >
Co-authored-by: Damir Jelić <poljar@termina.org.uk >
Co-authored-by: Jonas Platte <jplatte@matrix.org >
2025-07-18 13:18:04 +00:00
Damir Jelić
a5fbcf1491
Merge pull request #5322 from matrix-org/poljar/shared-history/out-of-order
...
feat(sdk): Add a tasks that listens for historic room keys if they arrive out of order
2025-07-17 16:52:13 +02:00
Yorusaka Miyabi
8923e58ee3
feat(ffi): Expose legacy SSO support infomation
...
Currently Element X can't distinguish the cases where a homeserver only
supports legacy SSO without OIDC (and password login isn't avaliable),
and other server unreachable scenarios.
This patch exposes legacy SSO support infomation so that Element X side
can give a dedicated error message when it encounters a homeserver that
can only support legacy SSO.
Signed-off-by: Yorusaka Miyabi <23130178+ShadowRZ@users.noreply.github.com >
2025-07-17 16:42:27 +02:00
Damir Jelić
f14994baa9
test(sdk): Test if we accept historic room key bundles arriving out of order
2025-07-17 16:39:31 +02:00
Damir Jelić
d42d0f3e17
test(sdk): Add a bunch more useful mock helpers
2025-07-17 16:39:17 +02:00
Damir Jelić
e4849d5cab
test(sdk): Don't expect a default access token in a bunch of methods
...
The mocks can be configured to expect a default access token separately,
this seems to have been a copy/paste error.
2025-07-17 16:39:17 +02:00
Damir Jelić
65aec7ee7f
test(sdk): Add a method for two test clients to exchange E2EE identities
2025-07-17 16:39:17 +02:00
Damir Jelić
a6868386d0
test(sdk): Allow the test client to enable shared history
2025-07-17 16:39:17 +02:00
Damir Jelić
b3c1ca1577
Use the invite details when deciding if we should accept a bundle
2025-07-17 16:39:17 +02:00