mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-04-28 11:09:51 -04:00
* event cache: move it to the main SDK crate * event cache: add requested Debug impl to `RoomEventCacheUpdate` Somehow the compiler asked for it now... * event cache: add missing copyright notice to store file * event cache: use a weak reference to the client internally This will make it possible to have the `Client` own an `EventCache` without a reference cycle. * event cache: move the spawned task to its own function * event cache: move RwLock from EventCache::inner to the only mutable field inside EventCacheInner * event cache: have the Client own *the* event cache The goal is to have a unique EventCache instance overall, that's available from everywhere in the SDK, notably when creating timelines for rooms. Because the event cache only owns a weak reference to the client, it means the Client still can be dropped, In turn, this will close its sender of `RoomUpdates`, which will gracefully close the task spawned in `EventCache::new` after it's done handling the latest updates. * event cache: process room updates one at a time * timeline: use the client-wide event cache instead of spawning one per timeline This now means that we're passing the "initial events" to the event cache just before initializing the timeline. As a result, there might be previous events that the event cache saw (coming from sync), but now we can't decide where to put them; drop previously known events in that case. * event cache: hey, turns out we don't even need the weak back-link Keeping it as a separate commit, to make it easier to revert later. * event cache: remove unused errors Keeping the error type and results, though, because we might have store errors soonish. * fixup! event cache: move the spawned task to its own function * event cache: manually subscribe to the event cache It was a bad idea to have it enabled by default, since some users may not be interested in all updates for all rooms (e.g. bots). Instead, we make it so that the event cache must be explicitly subscribed to, and we do it in two cases: - in the UI `TimelineBuilder::build` method, because we're interested in updates to the current room, - in the `RoomListService`, because we *will* be interested in updates to room derived data (e.g. unread counts, read receipts, and so on). This avoids a bit of fiddling when creating the event cache in the client. This is resilient when a parent Client is forked into a child Client, because the child `EventCache` share the same subscription as the parent's.
Experiments
This directory contains experiments, work-in-progress crates, or other code and documentation, that
do not fall under the same stability guarantees as the main crates (matrix-sdk,
matrix-sdk-crypto, etc.).
Lab projects might be abandoned and possibly removed at any time.
That said, this directory is meant to freely explore unconventional or interesting ways the Matrix Rust SDK can evolve, feel free to propose an experiment.
Current experiments
- rrrepl: a Read Receipts REPL, to help with client-side computation of read-receipts. Useful for debugging.
Archived experiments
Link to PR that deleted the experiment from the repo, newest first: