From 1c6f2119334e68b467ee4b8e4e4fabedea1f8131 Mon Sep 17 00:00:00 2001 From: Devin Ragotzy Date: Tue, 28 Jul 2020 08:59:30 -0400 Subject: [PATCH] Create media::FileMeta to represent a file and meta data --- src/client_server.rs | 14 +++++++++++--- src/database.rs | 2 +- src/database/media.rs | 24 ++++++++++++++++++++---- src/lib.rs | 2 +- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/client_server.rs b/src/client_server.rs index bac4b25..e5a6df8 100644 --- a/src/client_server.rs +++ b/src/client_server.rs @@ -4,7 +4,9 @@ use std::{ time::{Duration, SystemTime}, }; -use crate::{utils, ConduitResult, Database, Error, Ruma}; +use crate::{ + database::media::FileMeta, pdu::PduBuilder, utils, ConduitResult, Database, Error, Ruma, +}; use keys::{upload_signatures, upload_signing_keys}; use log::warn; @@ -3273,7 +3275,11 @@ pub fn get_content_route( _server_name: String, _media_id: String, ) -> ConduitResult { - if let Some((filename, content_type, file)) = db + if let Some(FileMeta { + filename, + content_type, + file, + }) = db .media .get(format!("mxc://{}/{}", body.server_name, body.media_id))? { @@ -3301,7 +3307,9 @@ pub fn get_content_thumbnail_route( _server_name: String, _media_id: String, ) -> ConduitResult { - if let Some((_, content_type, file)) = db.media.get_thumbnail( + if let Some(FileMeta { + content_type, file, .. + }) = db.media.get_thumbnail( format!("mxc://{}/{}", body.server_name, body.media_id), body.width .try_into() diff --git a/src/database.rs b/src/database.rs index 5a1ed0f..536978e 100644 --- a/src/database.rs +++ b/src/database.rs @@ -1,7 +1,7 @@ pub(self) mod account_data; pub(self) mod globals; pub(self) mod key_backups; -pub(self) mod media; +pub(crate) mod media; pub(self) mod rooms; pub(self) mod uiaa; pub(self) mod users; diff --git a/src/database/media.rs b/src/database/media.rs index cec74a6..e9dcb4a 100644 --- a/src/database/media.rs +++ b/src/database/media.rs @@ -1,7 +1,11 @@ use crate::{utils, Error, Result}; use std::mem; -pub type FileMeta = (Option, String, Vec); +pub struct FileMeta { + pub filename: Option, + pub content_type: String, + pub file: Vec, +} pub struct Media { pub(super) mediaid_file: sled::Tree, // MediaId = MXC + WidthHeight + Filename + ContentType @@ -61,7 +65,11 @@ impl Media { })?) }; - Ok(Some((filename, content_type, file.to_vec()))) + Ok(Some(FileMeta { + filename, + content_type, + file: file.to_vec(), + })) } else { Ok(None) } @@ -107,7 +115,11 @@ impl Media { ) }; - Ok(Some((filename, content_type, file.to_vec()))) + Ok(Some(FileMeta { + filename, + content_type, + file: file.to_vec(), + })) } else if let Some(r) = self.mediaid_file.scan_prefix(&original_prefix).next() { // Generate a thumbnail let (key, file) = r?; @@ -154,7 +166,11 @@ impl Media { self.mediaid_file.insert(thumbnail_key, &*thumbnail_bytes)?; - Ok(Some((filename, content_type, thumbnail_bytes))) + Ok(Some(FileMeta { + filename, + content_type, + file: thumbnail_bytes.to_vec(), + })) } else { Ok(None) } diff --git a/src/lib.rs b/src/lib.rs index cd5029c..5cd8d48 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,7 @@ pub mod push_rules; mod ruma_wrapper; mod utils; -pub use database::Database; +pub use database::{media::FileMeta, Database}; pub use error::{Error, Result}; pub use pdu::PduEvent; pub use ruma_wrapper::{ConduitResult, Ruma, RumaResponse};