recency sorter handles recency stamp _and_ latest event's timestamp.
This patch revisits a feature we have disabled a couple of days ago: the `recency` sorter was initially only supporting the recency stamp, then later the recency stamp _and_ the latest event's timestamp. It was however buggy and we had to revert it. Now it's time to re-introduce it but with a different approach. The previous rules were: 1. if two rooms have a latest event, use their latest event's timestamps as their _scores, 2. if one of room has a latest event, use the recency stamp as their _scores_ for both rooms. Rule 2 was buggy because one room was sometimes using its latest event's timestamp, and sometimes its recency stamp, based on what it was compared to. It was an error! The new rules are the following: 1. unchanged 2. if one room has a latest event, use its latest event's timestamp as its _score_, and use no _score_ for the other room, 3. if two rooms have NO latest event, use the recency stamp as their _scores_. It means that a room with no latest event will always be sorted _after_ a room with a latest event. It can feel cruel, but it should be an edge case. When a room is synchronised, it should receive events, which should trigger the computation of a latest event. Note that this patch also renames _rank_ to _score_, as I consider it's a better vocabulary. It could be confusing to use _rank_ as one can expect all rooms to be indexed and get a rank, but it's not the case. _Score_ sounds better.
Matrix Rust SDK
The Matrix Rust SDK is a collection of libraries that make it easier to build Matrix clients in Rust.
Development of the SDK is proudly sponsored and maintained by Element. Element uses the SDK in their next-generation mobile apps Element X on iOS and Android and has plans to introduce it to the web and desktop clients as well.
The SDK is also the basis for multiple Matrix projects and we welcome contributions from all.
Purpose
The SDK takes care of the low-level details like encryption, syncing, and room state, so you can focus on your app's logic and UI. Whether you're writing a small bot, a desktop client, or something in between, the SDK is designed to be flexible, async-friendly, and ready to use out of the box.
Project structure
The Matrix Rust SDK is made up of several crates that build on top of each other. The following crates are expected to be usable as direct dependencies:
- matrix-sdk-ui – A high-level client library that makes it easy to build full-featured UI clients with minimal setup. Check out our reference client, multiverse, for an example.
- matrix-sdk – A mid-level client library, ideal for building bots, custom clients, or higher-level abstractions. You can find example usage in the examples directory.
- matrix-sdk-crypto – A standalone encryption state machine with no network I/O, providing end-to-end encryption support for Matrix clients and libraries. See the crypto tutorial for a step-by-step introduction.
All other crates are effectively internal-only and only structured as crates for organizational purposes and to improve compilation times. Direct usage of them is discouraged.
Status
The library is considered production ready and backs multiple client implementations such as Element X [1] [2], Fractal and iamb. Client developers should feel confident to build upon it.
Bindings
The higher-level crates of the Matrix Rust SDK can be embedded in other environments such as Swift, Kotlin, JavaScript, and Node.js. Check out the bindings/ directory to learn more about how to integrate the SDK into your language of choice.