Commit Graph

14300 Commits

Author SHA1 Message Date
Benjamin Bouvier
7115203a90 feat(event cache): get rid of add_initial_events() entirely 2025-05-13 10:17:21 +02:00
Jorge Martín
68fb60f223 test(ui): add more tests for fetching invite notifications in sliding sync 2025-05-13 09:10:44 +02:00
Jorge Martín
1f064fe474 test(ui): migrate notification fetching tests to use the batched methods
Also add one for the sliding sync + /context case
2025-05-13 09:10:44 +02:00
Jorge Martín
008c6f6d6c feat(ui): allow retrieving push notification events in batches 2025-05-13 09:10:44 +02:00
Yousef Moazzam
1afad3ab78 test: remove import of unused sync_timeline_event! macro 2025-05-13 09:04:55 +02:00
Yousef Moazzam
d1802086ad test: create room canonical alias events with EventFactory 2025-05-13 09:04:55 +02:00
Yousef Moazzam
cabe9632af test: add room canonical alias event method to EventFactory 2025-05-13 09:04:55 +02:00
Ivan Enderlin
08aa9c8614 doc(ui): Fix a typo in a comment. 2025-05-12 17:15:43 +02:00
Ivan Enderlin
831bba5cf0 test(ui): Add tests for push_local and push_date_divider. 2025-05-12 17:15:43 +02:00
Ivan Enderlin
d727111a51 doc(ui): Add #5000 in the CHANGELOG.md. 2025-05-12 17:15:43 +02:00
Ivan Enderlin
8d785b762e chore(ui): Make Clippy happy. 2025-05-12 17:15:43 +02:00
Ivan Enderlin
ad4ae230d5 refactor(ui): EventHandler uses regions to improve the code and avoid bugs.
This patch updates `EventHandler` to use the correct regions where
appropriate, thus reducing the complexity of the code, and removing
classes of bugs.

In the case of `Flow::Remote { position: TimelineItemPosition::At { …
}}`, we no longer need to skip the local timeline items, and to handle
the presence of the `TimelineStart` timeline item. The code is less
complex.

In the case of `Flow::Remote { position: TimelineItemPosition::End { …
}}`, that's exactly the same at the previous case.

In the case of `recycle_local_or_create_item`, the `try_fold` approach
is replaced entirely with a simple `iter_locals_region`, reducing the
size of the comments explaining the code, reducing the complexity of the
code, and reducing the surface of bugs.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
54f7963152 refactor(ui): TimelineStateTransaction works on _remotes_ and _all_ regions.
This patch updates `TimelineStateTransaction` to work on the correct
regions, _remotes_ in one place, and all regions in another place.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
b59c0b671e refactor(ui): TimelineMetadata works on the _remotes_ region.
This patch updates `TimelineMetadata` to work on the _remotes_ region
only, excluding the _start_ and the _locals_ regions. It helps to reduce
the risk of inserting items in an incorrect regions.

This patch also removes on more `rfind_event_by_id` usage, which is
nice.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
c6453a4cb3 refactor(ui): ReadReceiptTimelineUpdate works on _remotes_ region.
This patch updates `ReadReceiptTimelineUpdate` to work on the _remotes_
region only, excluding the _start_ and the _lcoals_ regions. It helps
to reduce the risk of inserting a `ReadMarker` inside the _start_ or the
_locals_ regions.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
74bf699615 refactor(ui): DateDividerAdjuster works on _remotes_ and _locals_ regions.
This patch updates `DateDividerAdjuster` to work on _remotes_ and
_locals_ regions only, excluding the _start_ region. It helps to reduce
the risk of inserting a `DateDivider` inside the _start_ region.

This patch also uses the new `push_date_divider` method, which provides
a couple of invariants.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
e1f94bf9c4 feat(ui): Define _regions_ in the Timeline.
This patch defines a new concept in the `Timeline`: Regions.

The `ObservableItems` holds all the invariants about the _position_ of the
items. It defines three regions where items can live:

1. the _start_ region, which can only contain a single `TimelineStart`,
2. the _remotes_ region, which can only contain many `Remote` timeline
   items with their decorations (only `DateDivider`s and `ReadMarker`s),
3. the _locals_ region, which can only contain many `Local` timeline items
   with their decorations (only `DateDivider`s).

The `iter_all_regions` method allows to iterate over all regions.
`iter_remotes_region` will restrict the iterator over the _remotes_
region, and so on. These iterators provide the absolute indices of the
items, so that it's harder to make mistakes when manipulating the indices of
items with operations like `insert`, `remove`, `replace` etc.

Other methods like `push_local` or `push_date_divider` insert the items
in the correct region, and check a couple of invariants.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
44a0745110 chore(base): Move the bitflags dependency in the workspace. 2025-05-12 17:15:43 +02:00
Ivan Enderlin
94b76168e8 refactor(ui): Add ObservableItemsTransaction::has_local.
This patch implements the `has_local` method on
`ObservableItemsTransaction`, which is way faster than the previous the
previous solution which was to iterate over all items to find at least
one local timeline item.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
55ea80b485 refactor(ui): Add ObservableItemsTransaction::push_local.
This patch adds the `push_local` method on `ObservableItemsTransaction`
to add semantics and hardcode the invariant in a single place for the
different timeline items.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
4e501e88ee refactor(ui): Add ObservableItemsTransaction::push_timeline_start_if_missing.
This patch adds the `push_timeline_start_if_missing` method on
`ObservableItemsTransaction` to add semantics and hardcode the
invariant in a single place for the different timeline items.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
afc02781e9 test(ui): Add a regression test.
This patch adds a regression test ensuring [this bug][4976] cannot
happen anymore.

[4976]: https://github.com/matrix-org/matrix-rust-sdk/issues/4976
2025-05-12 17:15:43 +02:00
Ivan Enderlin
c2072e1cc2 test(ui): Support index [$nth] --- date divider --- in assert_timeline_stream!. 2025-05-12 17:15:43 +02:00
Ivan Enderlin
eef99b2679 test: Add assert messages in the assert_timeline_stream macro.
This patch improves the `assert_timeline_stream` macro by adding a bunch
of assert messages in case it fails.
2025-05-12 17:15:43 +02:00
Ivan Enderlin
581d54f65f fix(ui): Offset the timeline index in the presence of a TimelineStart.
This patch fixes the insertion of a new `TimelineItem` in the presence
of a `TimelineStart` that shifts/offsets the timeline index of 1.
2025-05-12 17:15:43 +02:00
dependabot[bot]
5f5ea69a32 chore(deps): Bump tj-actions/changed-files
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 4168bb487d5b82227665ab4ec90b67ce02691741 to 480f49412651059a414a6a5c96887abb1877de8a.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](4168bb487d...480f494126)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-version: 480f49412651059a414a6a5c96887abb1877de8a
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 17:00:46 +02:00
Johannes Marbach
08800f7d60 Reduce boilerplate further 2025-05-12 10:56:57 +02:00
Johannes Marbach
eb51a7f145 Use macros to reduce boilerplate 2025-05-12 10:56:57 +02:00
Johannes Marbach
8cf09217d6 Switch to structs in yet more places 2025-05-12 10:56:57 +02:00
Johannes Marbach
f81945ad7e Fix build error 2025-05-12 10:56:57 +02:00
Johannes Marbach
c21f97274c Switch to struct 2025-05-12 10:56:57 +02:00
Johannes Marbach
da67bacfbf Add changelog 2025-05-12 10:56:57 +02:00
Johannes Marbach
175d854a9b feat(ffi): Add methods for observing account data changes
Signed-off-by: Johannes Marbach <n0-0ne+github@mailbox.org>
2025-05-12 10:56:57 +02:00
Ivan Enderlin
afabfb97b6 task(ui): Log when the room name is empty when filtering the room list. 2025-05-12 10:24:52 +02:00
Yousef Moazzam
8e4554d3c0 test: create room server ACL event with EventFactory 2025-05-12 09:30:36 +02:00
Yousef Moazzam
f1ea47f0b6 test: add room server ACL event method to EventFactory 2025-05-12 09:30:36 +02:00
Yousef Moazzam
26f1282c6a test: create room power level events with EventFactory 2025-05-10 20:35:57 +02:00
Yousef Moazzam
4053321cd0 test: add room power levels event method to EventFactory 2025-05-10 20:35:57 +02:00
Robin
561158c7bb fix(tests): Avoid depending on the local time zone in tests
This test fails when run in the Americas, because over here the Unix epoch took place in 1969 =D
2025-05-09 20:47:48 +02:00
Mauro Romito
c023745dcf crates: update Ruma to support MSC 4278
This will later be handled once the account data observation PR is ready
2025-05-09 14:41:17 +02:00
Yousef Moazzam
6ba68fe87e test: add timeline events in bulk to room builder 2025-05-09 11:51:45 +02:00
Yousef Moazzam
7afb46cc0c test: create room create event with EventFactory 2025-05-09 11:51:45 +02:00
Yousef Moazzam
93dcd07073 test: add room create event method to EventFactory 2025-05-09 11:51:45 +02:00
Yousef Moazzam
cf2f507951 test: create member event with EventFactory 2025-05-09 11:51:45 +02:00
Damir Jelić
35a2ce97d8 refactor(widget): Use streams to streamline the action processing logic 2025-05-09 11:07:41 +02:00
Ivan Enderlin
f042084bd2 doc: Generate doc with --generate-link-to-definition.
This patch adds the `--generate-link-to-definition`
argument to `rustdoc` for `docs.rs`. This is using
https://github.com/rust-lang/rust/pull/84176 to add links in the source
code page.
2025-05-08 13:08:32 +02:00
Doug
be6d5f9bd9 ffi: Add support for the login hints with OIDC. 2025-05-08 12:10:16 +02:00
Doug
506060f23d sdk: Add support for generic OAuth login hints.
See https://github.com/element-hq/matrix-authentication-service/pull/4512
2025-05-08 12:10:16 +02:00
Richard van der Hoff
55d475df04 Merge pull request #4988 from matrix-org/rav/history_sharing/better_sender_data
crypto: improve SenderData stored with room key bundle data
2025-05-07 22:31:48 +01:00
Richard van der Hoff
f349a66292 crypto: improve SenderData stored with room key bundle data
If we already have cross-signing details for the owner of the device at the
point we receive the to-device message, we should store that rather than just
the device info.
2025-05-07 22:16:57 +01:00