Commit Graph

2497 Commits

Author SHA1 Message Date
Kévin Commaille 30de5372eb Upgrade Ruma after api::Error breaking change
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-04-07 10:17:42 +02:00
Kévin Commaille ba451b67c9 Upgrade Ruma after RoomAliases removal
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-04-07 10:17:42 +02:00
Valere Fedronic fcce02fc11 feat(widget): Support for avatars in calls via msc4039 (#6354)
Allows to get the avatars in Element Call widget !
Using
[MSC4039](https://github.com/nordeck/matrix-spec-proposals/blob/nic/feat/widgetapi-upload-files/proposals/4039-widget-api-media.md)

Counter part of web support:
- https://github.com/element-hq/element-web/pull/32755
- https://github.com/element-hq/element-call/pull/3780

Needs a EC PR to support passing data as base64 via the widget json API
- https://github.com/element-hq/element-call/pull/3818
2026-04-02 13:35:22 +03:00
Bertin Philippe 32e9626e0f feat(ffi): expose event types and content (#6387)
Signed-off-by: Philippe Bertin <pbertin@teladochealth.com>
2026-04-02 09:14:57 +02:00
Kévin Commaille 644c5e8a4c Upgrade Ruma to commit after PushCondition breaking changes
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-04-01 10:20:21 +01:00
Kévin Commaille 34d5e6da2a Upgrade Ruma to commit after UserIdentifier breaking changes
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-04-01 10:20:21 +01:00
Kévin Commaille 5936a7285f Upgrade Ruma to commit after push Action breaking changes
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-04-01 10:20:21 +01:00
Doug 0afd7c9528 fix: Update the iOS platform version to match the deployment target. 2026-04-01 11:12:18 +03:00
Benjamin Bouvier 388ced09a6 Merge pull request #6344 from matrix-org/bnjbvr/automatic-backpagination-unread-counts
feat(event cache): automatic back-pagination for unread counts, MVP
2026-04-01 09:26:55 +02:00
Damir Jelić 16c1b9b57f chore: Bump rand 2026-03-31 16:57:50 +02:00
Benjamin Bouvier 9913cce946 Merge branch 'main' into bnjbvr/automatic-backpagination-unread-counts 2026-03-31 15:55:44 +02:00
Jorge Martín 5d2eab119d feat: Improve getting homeserver capabilities
This extracts the `/capabilities` logic to its own `HomeserverCapabilities` component in the SDK that can be manually asked to fetch, cache locally and return these capabilities.
2026-03-31 15:25:37 +02:00
Benjamin Bouvier 950fcd289d refactor(ffi): only start with a reset diff if the timeline isn't empty 2026-03-31 11:17:34 +02:00
Bertin Philippe 2214aded9d feat(ffi): expose Client.sync() (#6359)
### Expose sync v2 API through FFI via `Client.sync()` and
`Client.sync_once()` #6348

Mobile clients can now sync using the traditional `/sync` v2 endpoint
through the FFI bindings, without requiring Sliding Sync (MSC4186)
support on the homeserver.

This PR introduces a new API (non-breaking change).

#### Implementation notes

I chose to expose only the **list of room IDs** (invited, joined, left,
knocked) in the `SyncResponse`, rather than forwarding the full per-room
event payloads. This keeps the FFI surface simple. Clients that need
room details can query them through the existing `Room` APIs after being
notified of changes via the listener.

Two entry points are provided:

- **`Client.sync(settings, listener)`** starts a continuous sync loop,
returning a `TaskHandle` for cancellation. The `SyncListener` callback
fires after each successful sync response.
- **`Client.sync_once(settings)`** performs a single sync call, useful
for initial sync or one-off use cases.

`SyncSettings` exposes `timeout_ms` and `full_state`.

Signed-off-by: Philippe Bertin <pbertin@teladochealth.com>
2026-03-31 10:40:54 +02:00
Jorge Martín e65d4c44b4 fix(ffi): Replace libloading with jvm-getter for getting a JVM
The `libloading` approach only works on Android 12+
2026-03-30 11:17:58 +02:00
Benjamin Bouvier bf9ffd7d09 refactor(event cache): make EventCache::config/config_mut sync by using a sync lock
There wasn't good reason to use an async lock, as this lock is always
super short-lived, it can be sync, which avoids complications in the
subsequent commit when calling sync init code.
2026-03-30 10:40:31 +02:00
Benjamin Bouvier 9f18d76355 feat(event cache): add a feature toggle to enable automatic back-pagination 2026-03-30 10:40:30 +02:00
Andrew Ferrazzutti 83c6a7fdf4 Fix location & name of the built shared object 2026-03-30 10:31:07 +02:00
Andrew Ferrazzutti 67fbba1e87 Tweak suggested ANDROID_NDK path
- Remove redundant trailing slash
- Clarify what the version component may be
2026-03-30 10:31:07 +02:00
Andrew Ferrazzutti 9c66221830 Fix crypto-ffi build instructions in README
- Change the example config file to not make it appear as though it
  processes environment variables
- Remove the `ar` setting from the example config file, as that setting
  is deprecated and unused (see
  https://doc.rust-lang.org/cargo/reference/config.html#targettriplear)
- Replace references of `.cargo/config` to `.cargo/config.toml`, as the
  former is deprecated
- Add example of how to set the linker through an environment variable
- Add instruction to include the NDK binary tools directory to PATH,
  because builds may fail without it
  (see https://github.com/matrix-org/matrix-rust-sdk/issues/4042)
2026-03-30 10:31:07 +02:00
Philippe Bertin f00d09597c feat(ffi): expose Room.send_state_event_raw() for sending arbitrary state events
Closes #6349

Signed-off-by: Philippe Bertin <pbertin@teladochealth.com>
2026-03-30 10:27:00 +02:00
Daniel Salinas c708ed18c0 No reqwest::Certificate on wasm platforms 2026-03-27 09:06:43 +01:00
Stefan Ceriu fd572d9b33 fix(ffi): manually enter the runtime on background tasks spawning paths instead of forcing async constructors 2026-03-25 16:46:42 +02:00
Stefan Ceriu 1dd413e4bc feat(ui): subscribe to room event cache for live thread updates
When ThreadListService is created it now immediately spawns a background
task (via the client's TaskMonitor) that subscribes to the room event
cache and listens for RoomEventCacheUpdate::UpdateTimelineEvents.

For every incoming event that carries an m.thread relation pointing to a
root we are already tracking, the service rebuilds a ThreadListItemEvent via the
existing build_latest_event helper and replaces latest_event on the matching
ThreadListItem and increments num_replies by 1
2026-03-25 16:46:42 +02:00
Stefan Ceriu fe45ba5cc2 feat(ui): enrich ThreadListItem with root_event, latest_event and num_replies
Introduce ThreadListItemEvent as a shared struct for both the thread
root and the latest reply, replacing the previous flat fields on
ThreadListItem

The `latest_event` is populated from the bundled thread summary returned by the
server alongside the root event, as is the number of replies.
2026-03-25 16:46:42 +02:00
Stefan Ceriu 96b82a4f5d chore(docs): add ThreadListService UI and FFI changelog entries. 2026-03-24 14:51:59 +02:00
Stefan Ceriu 84bdf604e5 change(ui): remove the Room::load_thread_list method in favor of the new ThreadListService 2026-03-24 14:51:59 +02:00
Stefan Ceriu 56b13806bd feat(ffi): expose the newly introduced ThreadListService 2026-03-24 14:51:59 +02:00
Stefan Ceriu b6edf826b0 feat(ui): introduce a new ThreadListService
`ThreadListService` is the FFI-facing wrapper around
[`matrix_sdk_ui::timeline::thread_list_service::ThreadListService`]. It
maintains an observable list of [`ThreadListItem`]s and exposes a
pagination state publisher, making it straightforward to build reactive UIs
on top of the thread list.
2026-03-24 14:51:59 +02:00
Jorge Martín 46462599c0 fix(sdk): Custom certificates on Android after the rustls upgrade
Add separate methods and field to temporarily apply these custom certs using the webkpi approach.
2026-03-23 14:05:22 +01:00
Valere Fedronic 2a00401e79 feat(rtc): get active call consus intent (audio/video) (#6274)
<!-- description of the changes in this PR -->

Depends on: https://github.com/ruma/ruma/pull/2414

Partity with web/js-sdk.
Allows to get the consus intent for the current call using the
membership `m.call.intent`

EW use it to change the icon in the room list
<img width="298" height="117" alt="image"
src="https://github.com/user-attachments/assets/21e59f69-e099-40a6-ae27-d9246df35b64"
/>


- [x] I've documented the public API Changes in the appropriate
`CHANGELOG.md` files.
- [ ] This PR was made with the help of AI.

<!-- Sign-off, if not part of the commits -->
<!-- See CONTRIBUTING.md if you don't know what this is -->
Signed-off-by:
2026-03-23 10:42:45 +01:00
Stefan Ceriu 39255c0542 chore(live_location): expose the inner beacon_infos location sharing session start timestamp. 2026-03-20 15:26:19 +02:00
Jorge Martín 29aa3c2e08 fix(ffi): Using rustls in Android
It turns out on Android, rustls needs [a custom setup](https://github.com/rustls/rustls-platform-verifier#android) and adding the `rustls-platform-verifier-android` library that's [not available on Maven](https://github.com/rustls/rustls-platform-verifier/issues/115).

Then, from the Android clients we'd need to call some exposed JNI function so we can provide a JVM context from where Rust can take the `Application` component and access its contents to read its credentials storage. Thanks to some tricks we can use `libloading` to simulate this call from Rust itself and properly initialise the platform verifier.

Note self-signed certificates will no longer work with these changes on Android, and providing them in `ClientBuilder::add_root_certificates` will make most requests fail. This can be handled separately.
2026-03-18 17:07:55 +01:00
Andy Balaam 60ce062ac5 Shorten the impl of reset on IdentityResetHandle 2026-03-18 12:59:45 +00:00
Ivan Enderlin daa1120286 chore(ui): Always enable the latest event Room List sorter.
This patch removes the `enable_latest_event_sorter` flag in
`RoomList::entry_with_dynamic_adapters_with`. This sorter is now stable
enough, we can always enable it.
2026-03-18 10:47:31 +01:00
Stefan Ceriu 4ad046d4b8 change(thread_list): update public documentation 2026-03-17 19:29:28 +02:00
Stefan Ceriu 33c156f231 feat(threads): convert the types exposed from Room.list_threads to UI crates TimelineItem types
... and closer to what we do for latest events, reply details etc.
2026-03-17 19:29:28 +02:00
Stefan Ceriu 9405908eb8 fix(ffi): actually expose the ThreadRoot details over FFI 2026-03-17 19:29:28 +02:00
Stefan Ceriu 290650c6b1 change(live_location): Move LiveLocation out of TimelineItemContent and into MsgLikeKind
... so that it has access to `MsgLikeContent` reactions
2026-03-17 13:39:29 +02:00
Jorge Martín d0980b6608 refactor(ffi): Remove unnecessary match branch in ffi::Client::new
This was just instantiating a value that was never used.
2026-03-16 14:22:49 +01:00
Hugh Nimmo-Smith acda2e88e3 Add HumanQrLoginError::UnsupportedQrCodeType and HumanQrGrantLoginError::UnsupportedQrCodeType 2026-03-13 08:10:19 +01:00
Damir Jelić 3f7d53a3ce feat(ffi): Add some more getters to the QRcodeData struct 2026-03-12 15:13:38 +01:00
Stefan Ceriu 791f4bc871 feat(sentry): add final app version and platform configuration options next to the sentry dsn 2026-03-11 15:59:32 +02:00
Kévin Commaille f25af6be6b fix(ffi): Don't assume that all redacted state events have an empty content
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-03-11 10:34:41 +01:00
Stefan Ceriu 0cdaf8d794 change(live_location): emit the last becon_info asset type when subscribing to live location shares instead of none 2026-03-11 09:02:37 +02:00
Stefan Ceriu 6b414b7791 change(location_sharing): make the asset type non-optional as per original MSC instructions
- https://github.com/matrix-org/matrix-spec-proposals/blob/matthew/location/proposals/3488-location.md
- `If m.asset is missing from the location's content the client should render it as m.self as that will be the most common use case. Otherwise, if it's not missing but the type is invalid or unknown the client should attempt to render it as a generic location. Clients should be able to distinguish between m.self and explicit assets for this feature to be correctly implemented as interpreting everything as m.self is unwanted.`
- this aligns the behavior with the newly introduced live location asset type handling
2026-03-11 09:02:37 +02:00
mgoldenberg b65e450813 Support TLS v1.3 on all platforms (#6053)
**Note:** _this pull request has a companion pull request in the
[`complement-crypto`](https://github.com/matrix-org/complement-crypto/pull/229)
repository, which must be merged in conjunction with this one._

_Before merging, this should be tested in conjunction with the Element X
iOS client to ensure that TLS v1.3 is working properly._ @stefanceriu
has agreed to work on this.

## Overview

The primary change in this pull request upgrades the `reqwest`
dependency to its latest version, which defaults to using `rustls` with
support for `rustls-platform-verifier` instead of `native-tls` (see
[`reqwest@0.13.0`](https://github.com/seanmonstar/reqwest/releases/tag/v0.13.0)).
The benefit here is that `rustls` supports TLS v1.3 on all platforms,
whereas [`native-tls` does
not](https://github.com/sfackler/rust-native-tls/pull/278).

Additionally, this pull request makes `rustls` the default TLS
implementation in all the crates in this repository.

This will be particularly helpful with element-hq/element-x-ios#786.

## Changes

- `reqwest` bumped to `0.13.1`
- The API for adding/replacing certificates has changed a bit, so this
required some updating in `HttpSettings::make_client`
- `oauth2-reqwest` added in favor of `oauth2/reqwest` 
    - This is required in order to be compatible with `reqwest^0.13`
- _**`oauth2-reqwest` is currently in alpha release, so it probably
makes sense to let this stabilize a bit.**_ For details, see
https://github.com/ramosbugs/oauth2-rs/issues/333#issuecomment-3906712203.
- `getrandom` bumped to `0.3.4`
    - This is required in order to be compatible with `oauth2@5.1.0`
- `proptest` bumped to `1.9.0`
    - This is required in order to be compatible with `getrandom@0.3.4` 
- Make `rustls` the default TLS implementation

## Questions

### Mirror feature flag names?

A number of feature flags have been replaced in the dependencies above.

1. _**`reqwest/rustls-tls` => `reqwest/rustls`**_ - this is simply a
name change, but is semantically identical (see
[`reqwest@0.13.0`](https://github.com/seanmonstar/reqwest/releases/tag/v0.13.0)).
2. _**`getrandom/js` => `getrandom/wasm_js`**_ - the semantics here have
changed slightly, but it seems to just make it easier to enable the
`wasm_js` backend (see
[`getrandom@0.3.4`](https://github.com/rust-random/getrandom/blob/master/CHANGELOG.md#major-change-to-wasm_js-backend)).

At any rate, I have updated references to these flags in each of the
various `Cargo.toml` files, but have not changed the names of our
exposed features to mimic those in the dependencies.

Any thoughts or preferences on whether to mirror those names? That
would, of course, result in a breaking change.

### Default to using `rustls`? Deprecate `native-tls`?

Now that the dependencies have all been bumped, we can use `rustls` on
all platforms. Should this be the new default given that `native-tls`
will very likely never support TLS v1.3 on Apple devices? And should
`native-tls` be deprecated as a result?

**UPDATE:** _The consensus here seems to be that we should default to
using `rustls`, but that `native-tls` should still be available._

---
Fixes #5800.


- [ ] Public API changes documented in changelogs (optional)

Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>

---------

Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2026-03-10 13:38:18 +01:00
Andy Balaam 9de2d70bad Provide recover_and_fix_backup method to fix backup if needed (#6252)
Part of https://github.com/element-hq/element-meta/issues/3059
2026-03-09 13:32:04 +00:00
Kévin Commaille 5e1c917459 refactor(sdk): Take a UrlOrQuery in MatrixAuth::login_with_sso_callback
To make it more convenient to use with `LocalServerBuilder` /
`LocalServerRedirectHandle`.

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-03-09 11:49:51 +01:00
Kévin Commaille 698ffba88e Upgrade Ruma after report_content breaking change
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2026-03-09 09:18:19 +00:00