Trait MediaStore

Source
pub trait MediaStore: AsyncTraitDeps {
    type Error: Debug + Into<MediaStoreError>;

    // 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 'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: '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 'life0: 'async_trait,
             Self: '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 'life0: 'async_trait,
             'life1: 'async_trait,
             Self: 'async_trait;
    fn clean<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             Self: 'async_trait;
}
Expand description

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

Required Associated Types§

Source

type Error: Debug + Into<MediaStoreError>

The error type used by this media 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 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Try to take a lock using the given store.

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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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 'life0: 'async_trait, Self: '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 'life0: 'async_trait, 'life1: 'async_trait, Self: '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<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Clean up the media cache with the current MediaRetentionPolicy.

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

Implementors§