From 7672cc8473ad02746599953130c985a34b9f4b2f Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Sat, 14 Sep 2024 20:43:56 -0700 Subject: [PATCH] use OwnedMxcUri in media service Not using `MxcData` because it borrows it's fields, and so we wouldn't be able to return an owned `MxcData` from functions that read the db. --- src/api/client_server/media.rs | 22 +++++++++++----------- src/api/server_server.rs | 4 ++-- src/database/key_value/media.rs | 6 +++--- src/service/media.rs | 10 +++++----- src/service/media/data.rs | 6 ++++-- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/api/client_server/media.rs b/src/api/client_server/media.rs index cd117232..ab11894c 100644 --- a/src/api/client_server/media.rs +++ b/src/api/client_server/media.rs @@ -159,7 +159,7 @@ pub(crate) async fn create_content_route( services() .media .create( - mxc.to_string(), + mxc.clone().into(), body.filename .clone() .map(|filename| ContentDisposition { @@ -350,7 +350,7 @@ pub(crate) async fn get_remote_content( services() .media .create( - mxc.to_string(), + mxc.clone().into(), response.content.content_disposition.as_ref(), response.content.content_type.clone(), &response.content.file, @@ -455,7 +455,7 @@ async fn get_content_route_ruma( .. }, file, - )) = services().media.get(mxc.to_string()).await? + )) = services().media.get(mxc.clone().into()).await? { Ok(authenticated_media_client::get_content::v1::Response { file, @@ -581,7 +581,7 @@ async fn get_content_as_filename_route_ruma( .. }, file, - )) = services().media.get(mxc.to_string()).await? + )) = services().media.get(mxc.clone().into()).await? { Ok(authenticated_media_client::get_content_as_filename::v1::Response { file, @@ -842,8 +842,10 @@ async fn get_content_thumbnail_route_ruma( .. }, file, - )) = - services().media.get_thumbnail(mxc.to_string(), width, height).await? + )) = services() + .media + .get_thumbnail(mxc.clone().into(), width, height) + .await? { return Ok(make_response(file, content_type)); } @@ -872,7 +874,7 @@ async fn get_content_thumbnail_route_ruma( services() .media .upload_thumbnail( - mxc.to_string(), + mxc.clone().into(), None, resp.content.content_type.clone(), width, @@ -901,10 +903,8 @@ async fn get_content_thumbnail_route_ruma( .. }, file, - )) = services() - .media - .get_thumbnail(mxc.to_string(), width, height) - .await? + )) = + services().media.get_thumbnail(mxc.into(), width, height).await? { return Ok(make_response(file, content_type)); } diff --git a/src/api/server_server.rs b/src/api/server_server.rs index dbfa6615..8065ac70 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -2062,7 +2062,7 @@ pub(crate) async fn media_download_route( content_type, }, file, - )) = services().media.get(mxc.to_string()).await? + )) = services().media.get(mxc.into()).await? else { return Err(Error::BadRequest( ErrorKind::NotYetUploaded, @@ -2109,7 +2109,7 @@ pub(crate) async fn media_thumbnail_route( .. }, file, - )) = services().media.get_thumbnail(mxc.to_string(), width, height).await? + )) = services().media.get_thumbnail(mxc.into(), width, height).await? else { return Err(Error::BadRequest( ErrorKind::NotYetUploaded, diff --git a/src/database/key_value/media.rs b/src/database/key_value/media.rs index 1748b360..5ecb0388 100644 --- a/src/database/key_value/media.rs +++ b/src/database/key_value/media.rs @@ -1,4 +1,4 @@ -use ruma::api::client::error::ErrorKind; +use ruma::{api::client::error::ErrorKind, OwnedMxcUri}; use crate::{ database::KeyValueDatabase, @@ -88,7 +88,7 @@ impl TryFrom<&MediaFileKey> for MediaFileKeyParts { impl service::media::Data for KeyValueDatabase { fn create_file_metadata( &self, - mxc: String, + mxc: OwnedMxcUri, width: u32, height: u32, meta: &FileMeta, @@ -121,7 +121,7 @@ impl service::media::Data for KeyValueDatabase { fn search_file_metadata( &self, - mxc: String, + mxc: OwnedMxcUri, width: u32, height: u32, ) -> Result<(FileMeta, MediaFileKey)> { diff --git a/src/service/media.rs b/src/service/media.rs index c03fd92f..fa626d45 100644 --- a/src/service/media.rs +++ b/src/service/media.rs @@ -1,7 +1,7 @@ use std::io::Cursor; use image::imageops::FilterType; -use ruma::http_headers::ContentDisposition; +use ruma::{http_headers::ContentDisposition, OwnedMxcUri}; use tokio::{ fs::File, io::{AsyncReadExt, AsyncWriteExt}, @@ -46,7 +46,7 @@ impl Service { #[tracing::instrument(skip(self, file))] pub(crate) async fn create( &self, - mxc: String, + mxc: OwnedMxcUri, content_disposition: Option<&ContentDisposition>, content_type: Option, file: &[u8], @@ -69,7 +69,7 @@ impl Service { #[tracing::instrument(skip(self, file))] pub(crate) async fn upload_thumbnail( &self, - mxc: String, + mxc: OwnedMxcUri, content_disposition: Option, content_type: Option, width: u32, @@ -93,7 +93,7 @@ impl Service { #[tracing::instrument(skip(self))] pub(crate) async fn get( &self, - mxc: String, + mxc: OwnedMxcUri, ) -> Result)>> { if let Ok((meta, key)) = self.db.search_file_metadata(mxc, 0, 0) { let path = services().globals.get_media_file(&key); @@ -224,7 +224,7 @@ impl Service { #[tracing::instrument(skip(self))] pub(crate) async fn get_thumbnail( &self, - mxc: String, + mxc: OwnedMxcUri, width: u32, height: u32, ) -> Result)>> { diff --git a/src/service/media/data.rs b/src/service/media/data.rs index 64fbdbbf..e5fe4767 100644 --- a/src/service/media/data.rs +++ b/src/service/media/data.rs @@ -1,10 +1,12 @@ +use ruma::OwnedMxcUri; + use super::{FileMeta, MediaFileKey}; use crate::Result; pub(crate) trait Data: Send + Sync { fn create_file_metadata( &self, - mxc: String, + mxc: OwnedMxcUri, width: u32, height: u32, meta: &FileMeta, @@ -12,7 +14,7 @@ pub(crate) trait Data: Send + Sync { fn search_file_metadata( &self, - mxc: String, + mxc: OwnedMxcUri, width: u32, height: u32, ) -> Result<(FileMeta, MediaFileKey)>;