mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-15 19:45:34 -04:00
Imagine the room list has the viewport set to the range `0..=19`. The user scrolls quickly to `50..=69` to see something below and immediately scrolls back to its initial position, without stopping the scroll at any moment in between. The app using this API might update the viewport from `0..=19` to… `0..=19`. Updating the viewport, updates the `visible_rooms` sliding sync list. Since a list is modified, the current sync-loop iteration is skipped over and a new one restarts, i.e. the current in-flight request is cancelled… for nothing. This patch prevents this situation. The current viewport ranges is stored in `RoomListService`. `RoomListService::apply_input` used to return `Result<(), Error>`, now it returns `Result<InputResult, Error>`. The `InputResult` enum is a new type. It represents whether an input has been applied or ignored, which must be differentiate from errors. So now, if the viewport changes and it's not different from the previous value, `InputResult::Ignored` is returned.