use serde::Serialize;
use crate::client::AnkiClient;
use crate::error::Result;
use crate::types::StoreMediaParams;
#[derive(Debug)]
pub struct MediaActions<'a> {
pub(crate) client: &'a AnkiClient,
}
#[derive(Serialize)]
struct RetrieveParams<'a> {
filename: &'a str,
}
#[derive(Serialize)]
struct ListParams<'a> {
pattern: &'a str,
}
#[derive(Serialize)]
struct DeleteParams<'a> {
filename: &'a str,
}
impl<'a> MediaActions<'a> {
pub async fn store(&self, params: StoreMediaParams) -> Result<String> {
self.client.invoke("storeMediaFile", params).await
}
pub async fn retrieve(&self, filename: &str) -> Result<String> {
self.client
.invoke("retrieveMediaFile", RetrieveParams { filename })
.await
}
pub async fn list(&self, pattern: &str) -> Result<Vec<String>> {
self.client
.invoke("getMediaFilesNames", ListParams { pattern })
.await
}
pub async fn directory(&self) -> Result<String> {
self.client.invoke_without_params("getMediaDirPath").await
}
pub async fn delete(&self, filename: &str) -> Result<()> {
self.client
.invoke_void("deleteMediaFile", DeleteParams { filename })
.await
}
}