Create media::FileMeta to represent a file and meta data

next
Devin Ragotzy 2020-07-28 08:59:30 -04:00 committed by timokoesters
parent 2da48b941d
commit 1c6f211933
No known key found for this signature in database
GPG Key ID: 24DA7517711A2BA4
4 changed files with 33 additions and 9 deletions

View File

@ -4,7 +4,9 @@ use std::{
time::{Duration, SystemTime}, 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 keys::{upload_signatures, upload_signing_keys};
use log::warn; use log::warn;
@ -3273,7 +3275,11 @@ pub fn get_content_route(
_server_name: String, _server_name: String,
_media_id: String, _media_id: String,
) -> ConduitResult<get_content::Response> { ) -> ConduitResult<get_content::Response> {
if let Some((filename, content_type, file)) = db if let Some(FileMeta {
filename,
content_type,
file,
}) = db
.media .media
.get(format!("mxc://{}/{}", body.server_name, body.media_id))? .get(format!("mxc://{}/{}", body.server_name, body.media_id))?
{ {
@ -3301,7 +3307,9 @@ pub fn get_content_thumbnail_route(
_server_name: String, _server_name: String,
_media_id: String, _media_id: String,
) -> ConduitResult<get_content_thumbnail::Response> { ) -> ConduitResult<get_content_thumbnail::Response> {
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), format!("mxc://{}/{}", body.server_name, body.media_id),
body.width body.width
.try_into() .try_into()

View File

@ -1,7 +1,7 @@
pub(self) mod account_data; pub(self) mod account_data;
pub(self) mod globals; pub(self) mod globals;
pub(self) mod key_backups; pub(self) mod key_backups;
pub(self) mod media; pub(crate) mod media;
pub(self) mod rooms; pub(self) mod rooms;
pub(self) mod uiaa; pub(self) mod uiaa;
pub(self) mod users; pub(self) mod users;

View File

@ -1,7 +1,11 @@
use crate::{utils, Error, Result}; use crate::{utils, Error, Result};
use std::mem; use std::mem;
pub type FileMeta = (Option<String>, String, Vec<u8>); pub struct FileMeta {
pub filename: Option<String>,
pub content_type: String,
pub file: Vec<u8>,
}
pub struct Media { pub struct Media {
pub(super) mediaid_file: sled::Tree, // MediaId = MXC + WidthHeight + Filename + ContentType 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 { } else {
Ok(None) 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() { } else if let Some(r) = self.mediaid_file.scan_prefix(&original_prefix).next() {
// Generate a thumbnail // Generate a thumbnail
let (key, file) = r?; let (key, file) = r?;
@ -154,7 +166,11 @@ impl Media {
self.mediaid_file.insert(thumbnail_key, &*thumbnail_bytes)?; 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 { } else {
Ok(None) Ok(None)
} }

View File

@ -6,7 +6,7 @@ pub mod push_rules;
mod ruma_wrapper; mod ruma_wrapper;
mod utils; mod utils;
pub use database::Database; pub use database::{media::FileMeta, Database};
pub use error::{Error, Result}; pub use error::{Error, Result};
pub use pdu::PduEvent; pub use pdu::PduEvent;
pub use ruma_wrapper::{ConduitResult, Ruma, RumaResponse}; pub use ruma_wrapper::{ConduitResult, Ruma, RumaResponse};