use std::{rc::Rc, sync::Arc};
use matrix_sdk_base::media::store::MediaService;
use matrix_sdk_store_encryption::StoreCipher;
use crate::{
media_store::{
error::IndexeddbMediaStoreError, migrations::open_and_upgrade_db, IndexeddbMediaStore,
},
serializer::{IndexedTypeSerializer, SafeEncodeSerializer},
};
pub struct IndexeddbMediaStoreBuilder {
database_name: String,
store_cipher: Option<Arc<StoreCipher>>,
}
impl Default for IndexeddbMediaStoreBuilder {
fn default() -> Self {
Self { database_name: Self::DEFAULT_DATABASE_NAME.to_owned(), store_cipher: None }
}
}
impl IndexeddbMediaStoreBuilder {
pub const DEFAULT_DATABASE_NAME: &'static str = "media";
pub fn database_name(mut self, name: String) -> Self {
self.database_name = name;
self
}
pub fn store_cipher(mut self, store_cipher: Arc<StoreCipher>) -> Self {
self.store_cipher = Some(store_cipher);
self
}
pub async fn build(self) -> Result<IndexeddbMediaStore, IndexeddbMediaStoreError> {
Ok(IndexeddbMediaStore {
inner: Rc::new(open_and_upgrade_db(&self.database_name).await?),
serializer: IndexedTypeSerializer::new(SafeEncodeSerializer::new(self.store_cipher)),
media_service: MediaService::new(),
})
}
}