Trait EventCacheStore

Source
pub trait EventCacheStore: AsyncTraitDeps {
    type Error: Debug + Into<EventCacheStoreError>;

Show 17 methods // Required methods fn try_take_leased_lock<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, lease_duration_ms: u32, key: &'life1 str, holder: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<bool, Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn handle_linked_chunk_updates<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, updates: Vec<Update<Event, Gap>>, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn load_last_chunk<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, ) -> Pin<Box<dyn Future<Output = Result<(Option<RawChunk<Event, Gap>>, ChunkIdentifierGenerator), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn load_previous_chunk<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, before_chunk_identifier: ChunkIdentifier, ) -> Pin<Box<dyn Future<Output = Result<Option<RawChunk<Event, Gap>>, Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn clear_all_rooms_chunks<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn filter_duplicated_events<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, events: Vec<OwnedEventId>, ) -> Pin<Box<dyn Future<Output = Result<Vec<OwnedEventId>, Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn add_media_content<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, content: Vec<u8>, ignore_policy: IgnoreMediaRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn replace_media_key<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, from: &'life1 MediaRequestParameters, to: &'life2 MediaRequestParameters, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn get_media_content<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>, Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn remove_media_content<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_media_content_for_uri<'life0, 'life1, 'async_trait>( &'life0 self, uri: &'life1 MxcUri, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>, Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn remove_media_content_for_uri<'life0, 'life1, 'async_trait>( &'life0 self, uri: &'life1 MxcUri, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn set_media_retention_policy<'life0, 'async_trait>( &'life0 self, policy: MediaRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn media_retention_policy(&self) -> MediaRetentionPolicy; fn set_ignore_media_retention_policy<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, ignore_policy: IgnoreMediaRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn clean_up_media_cache<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; // Provided method fn remove_room<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>> where Self: Sync + 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait { ... }
}
Expand description

An abstract trait that can be used to implement different store backends for the event cache of the SDK.

Required Associated Types§

Source

type Error: Debug + Into<EventCacheStoreError>

The error type used by this event cache store.

Required Methods§

Source

fn try_take_leased_lock<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, lease_duration_ms: u32, key: &'life1 str, holder: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<bool, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Try to take a lock using the given store.

Source

fn handle_linked_chunk_updates<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, updates: Vec<Update<Event, Gap>>, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

An Update reflects an operation that has happened inside a linked chunk. The linked chunk is used by the event cache to store the events in-memory. This method aims at forwarding this update inside this store.

Source

fn load_last_chunk<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, ) -> Pin<Box<dyn Future<Output = Result<(Option<RawChunk<Event, Gap>>, ChunkIdentifierGenerator), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Load the last chunk of the LinkedChunk holding all events of the room identified by room_id.

This is used to iteratively load events for the EventCache.

Source

fn load_previous_chunk<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, before_chunk_identifier: ChunkIdentifier, ) -> Pin<Box<dyn Future<Output = Result<Option<RawChunk<Event, Gap>>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Load the chunk before the chunk identified by before_chunk_identifier of the LinkedChunk holding all events of the room identified by room_id

This is used to iteratively load events for the EventCache.

Source

fn clear_all_rooms_chunks<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Clear persisted events for all the rooms.

This will empty and remove all the linked chunks stored previously, using the above Self::handle_linked_chunk_updates methods.

Source

fn filter_duplicated_events<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, events: Vec<OwnedEventId>, ) -> Pin<Box<dyn Future<Output = Result<Vec<OwnedEventId>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Given a set of event ID, remove the unique events and return the duplicated events.

Source

fn add_media_content<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, content: Vec<u8>, ignore_policy: IgnoreMediaRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Add a media file’s content in the media store.

§Arguments
  • request - The MediaRequest of the file.

  • content - The content of the file.

Source

fn replace_media_key<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, from: &'life1 MediaRequestParameters, to: &'life2 MediaRequestParameters, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Replaces the given media’s content key with another one.

This should be used whenever a temporary (local) MXID has been used, and it must now be replaced with its actual remote counterpart (after uploading some content, or creating an empty MXC URI).

⚠ No check is performed to ensure that the media formats are consistent, i.e. it’s possible to update with a thumbnail key a media that was keyed as a file before. The caller is responsible of ensuring that the replacement makes sense, according to their use case.

This should not raise an error when the from parameter points to an unknown media, and it should silently continue in this case.

§Arguments
  • from - The previous MediaRequest of the file.

  • to - The new MediaRequest of the file.

Source

fn get_media_content<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get a media file’s content out of the media store.

§Arguments
  • request - The MediaRequest of the file.
Source

fn remove_media_content<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Remove a media file’s content from the media store.

§Arguments
  • request - The MediaRequest of the file.
Source

fn get_media_content_for_uri<'life0, 'life1, 'async_trait>( &'life0 self, uri: &'life1 MxcUri, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get a media file’s content associated to an MxcUri from the media store.

In theory, there could be several files stored using the same URI and a different MediaFormat. This API is meant to be used with a media file that has only been stored with a single format.

If there are several media files for a given URI in different formats, this API will only return one of them. Which one is left as an implementation detail.

§Arguments
  • uri - The MxcUri of the media file.
Source

fn remove_media_content_for_uri<'life0, 'life1, 'async_trait>( &'life0 self, uri: &'life1 MxcUri, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Remove all the media files’ content associated to an MxcUri from the media store.

This should not raise an error when the uri parameter points to an unknown media, and it should return an Ok result in this case.

§Arguments
  • uri - The MxcUri of the media files.
Source

fn set_media_retention_policy<'life0, 'async_trait>( &'life0 self, policy: MediaRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Set the MediaRetentionPolicy to use for deciding whether to store or keep media content.

§Arguments
  • policy - The MediaRetentionPolicy to use.
Source

fn media_retention_policy(&self) -> MediaRetentionPolicy

Get the current MediaRetentionPolicy.

Source

fn set_ignore_media_retention_policy<'life0, 'life1, 'async_trait>( &'life0 self, request: &'life1 MediaRequestParameters, ignore_policy: IgnoreMediaRetentionPolicy, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Set whether the current MediaRetentionPolicy should be ignored for the media.

The change will be taken into account in the next cleanup.

§Arguments
  • request - The MediaRequestParameters of the file.

  • ignore_policy - Whether the current MediaRetentionPolicy should be ignored.

Source

fn clean_up_media_cache<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Clean up the media cache with the current MediaRetentionPolicy.

If there is already an ongoing cleanup, this is a noop.

Provided Methods§

Source

fn remove_room<'life0, 'life1, 'async_trait>( &'life0 self, room_id: &'life1 RoomId, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: Sync + 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Remove all data tied to a given room from the cache.

Implementors§