Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

event cache/timeline: reuse the Paginator when running back-paginations #3373

Merged
merged 8 commits into from
May 16, 2024
41 changes: 9 additions & 32 deletions bindings/matrix-sdk-ffi/src/timeline/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@ use anyhow::{Context, Result};
use as_variant::as_variant;
use eyeball_im::VectorDiff;
use futures_util::{pin_mut, StreamExt};
use matrix_sdk::attachment::{
AttachmentConfig, AttachmentInfo, BaseAudioInfo, BaseFileInfo, BaseImageInfo,
BaseThumbnailInfo, BaseVideoInfo, Thumbnail,
use matrix_sdk::{
attachment::{
AttachmentConfig, AttachmentInfo, BaseAudioInfo, BaseFileInfo, BaseImageInfo,
BaseThumbnailInfo, BaseVideoInfo, Thumbnail,
},
event_cache::paginator::PaginatorState,
};
use matrix_sdk_ui::timeline::{EventItemOrigin, PaginationStatus, Profile, TimelineDetails};
use matrix_sdk_ui::timeline::{EventItemOrigin, Profile, TimelineDetails};
use mime::Mime;
use ruma::{
events::{
Expand Down Expand Up @@ -160,7 +163,7 @@ impl Timeline {
self.inner.fetch_members().await
}

pub fn subscribe_to_back_pagination_status(
pub async fn subscribe_to_back_pagination_status(
bnjbvr marked this conversation as resolved.
Show resolved Hide resolved
&self,
listener: Box<dyn PaginationStatusListener>,
) -> Result<Arc<TaskHandle>, ClientError> {
Expand Down Expand Up @@ -588,7 +591,7 @@ pub trait TimelineListener: Sync + Send {

#[uniffi::export(callback_interface)]
pub trait PaginationStatusListener: Sync + Send {
fn on_update(&self, status: PaginationStatus);
fn on_update(&self, status: PaginatorState);
}

#[derive(Clone, uniffi::Object)]
Expand Down Expand Up @@ -978,32 +981,6 @@ impl SendAttachmentJoinHandle {
}
}

#[derive(uniffi::Enum)]
pub enum PaginationOptions {
SimpleRequest { event_limit: u16, wait_for_token: bool },
UntilNumItems { event_limit: u16, items: u16, wait_for_token: bool },
}

impl From<PaginationOptions> for matrix_sdk_ui::timeline::PaginationOptions<'static> {
fn from(value: PaginationOptions) -> Self {
use matrix_sdk_ui::timeline::PaginationOptions as Opts;
let (wait_for_token, mut opts) = match value {
PaginationOptions::SimpleRequest { event_limit, wait_for_token } => {
(wait_for_token, Opts::simple_request(event_limit))
}
PaginationOptions::UntilNumItems { event_limit, items, wait_for_token } => {
(wait_for_token, Opts::until_num_items(event_limit, items))
}
};

if wait_for_token {
opts = opts.wait_for_token();
}

opts
}
}

/// A [`TimelineItem`](super::TimelineItem) that doesn't correspond to an event.
#[derive(uniffi::Enum)]
pub enum VirtualTimelineItem {
Expand Down
7 changes: 1 addition & 6 deletions crates/matrix-sdk-ui/src/timeline/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

use std::{collections::BTreeSet, sync::Arc};

use eyeball::SharedObservable;
use futures_util::{pin_mut, StreamExt};
use matrix_sdk::{event_cache::RoomEventCacheUpdate, executor::spawn, Room};
use ruma::{events::AnySyncTimelineEvent, RoomVersionId};
Expand All @@ -28,10 +27,7 @@ use super::{
queue::send_queued_messages,
Error, Timeline, TimelineDropHandle, TimelineFocus,
};
use crate::{
timeline::{event_item::RemoteEventOrigin, PaginationStatus},
unable_to_decrypt_hook::UtdHookManager,
};
use crate::{timeline::event_item::RemoteEventOrigin, unable_to_decrypt_hook::UtdHookManager};

/// Builder that allows creating and configuring various parts of a
/// [`Timeline`].
Expand Down Expand Up @@ -314,7 +310,6 @@ impl TimelineBuilder {

let timeline = Timeline {
inner,
back_pagination_status: SharedObservable::new(PaginationStatus::Idle),
msg_sender,
event_cache: room_event_cache,
drop_handle: Arc::new(TimelineDropHandle {
Expand Down
5 changes: 0 additions & 5 deletions crates/matrix-sdk-ui/src/timeline/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

use std::{pin::Pin, sync::Arc, task::Poll};

use eyeball::SharedObservable;
use eyeball_im::VectorDiff;
use futures_core::Stream;
use imbl::Vector;
Expand Down Expand Up @@ -96,7 +95,6 @@ pub use self::{
event_type_filter::TimelineEventTypeFilter,
inner::default_event_filter,
item::{TimelineItem, TimelineItemKind},
pagination::{PaginationOptions, PaginationOutcome, PaginationStatus},
polls::PollResult,
reactions::ReactionSenderData,
sliding_sync_ext::SlidingSyncRoomExt,
Expand Down Expand Up @@ -130,9 +128,6 @@ pub struct Timeline {

/// References to long-running tasks held by the timeline.
drop_handle: Arc<TimelineDropHandle>,

/// Observable for whether a backward pagination is currently running.
pub(crate) back_pagination_status: SharedObservable<PaginationStatus>,
}

// Implements hash etc
Expand Down
Loading