rename FileMeta::file to Option<content>
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
838e4b9d8d
commit
167559bb27
2 changed files with 31 additions and 23 deletions
|
@ -200,12 +200,13 @@ pub(crate) async fn get_content_route(
|
||||||
let mxc = format!("mxc://{}/{}", body.server_name, body.media_id);
|
let mxc = format!("mxc://{}/{}", body.server_name, body.media_id);
|
||||||
|
|
||||||
if let Some(FileMeta {
|
if let Some(FileMeta {
|
||||||
|
content,
|
||||||
content_type,
|
content_type,
|
||||||
file,
|
|
||||||
content_disposition,
|
content_disposition,
|
||||||
}) = services().media.get(&mxc).await?
|
}) = services().media.get(&mxc).await?
|
||||||
{
|
{
|
||||||
let content_disposition = Some(make_content_disposition(&content_type, content_disposition, None));
|
let content_disposition = Some(make_content_disposition(&content_type, content_disposition, None));
|
||||||
|
let file = content.expect("content");
|
||||||
|
|
||||||
Ok(get_content::v3::Response {
|
Ok(get_content::v3::Response {
|
||||||
file,
|
file,
|
||||||
|
@ -282,8 +283,8 @@ pub(crate) async fn get_content_as_filename_route(
|
||||||
let mxc = format!("mxc://{}/{}", body.server_name, body.media_id);
|
let mxc = format!("mxc://{}/{}", body.server_name, body.media_id);
|
||||||
|
|
||||||
if let Some(FileMeta {
|
if let Some(FileMeta {
|
||||||
|
content,
|
||||||
content_type,
|
content_type,
|
||||||
file,
|
|
||||||
content_disposition,
|
content_disposition,
|
||||||
}) = services().media.get(&mxc).await?
|
}) = services().media.get(&mxc).await?
|
||||||
{
|
{
|
||||||
|
@ -293,6 +294,7 @@ pub(crate) async fn get_content_as_filename_route(
|
||||||
Some(body.filename.clone()),
|
Some(body.filename.clone()),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
let file = content.expect("content");
|
||||||
Ok(get_content_as_filename::v3::Response {
|
Ok(get_content_as_filename::v3::Response {
|
||||||
file,
|
file,
|
||||||
content_type,
|
content_type,
|
||||||
|
@ -371,8 +373,8 @@ pub(crate) async fn get_content_thumbnail_route(
|
||||||
let mxc = format!("mxc://{}/{}", body.server_name, body.media_id);
|
let mxc = format!("mxc://{}/{}", body.server_name, body.media_id);
|
||||||
|
|
||||||
if let Some(FileMeta {
|
if let Some(FileMeta {
|
||||||
|
content,
|
||||||
content_type,
|
content_type,
|
||||||
file,
|
|
||||||
content_disposition,
|
content_disposition,
|
||||||
}) = services()
|
}) = services()
|
||||||
.media
|
.media
|
||||||
|
@ -388,6 +390,7 @@ pub(crate) async fn get_content_thumbnail_route(
|
||||||
.await?
|
.await?
|
||||||
{
|
{
|
||||||
let content_disposition = Some(make_content_disposition(&content_type, content_disposition, None));
|
let content_disposition = Some(make_content_disposition(&content_type, content_disposition, None));
|
||||||
|
let file = content.expect("content");
|
||||||
|
|
||||||
Ok(get_content_thumbnail::v3::Response {
|
Ok(get_content_thumbnail::v3::Response {
|
||||||
file,
|
file,
|
||||||
|
|
|
@ -20,10 +20,9 @@ use crate::services;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct FileMeta {
|
pub struct FileMeta {
|
||||||
#[allow(dead_code)]
|
pub content: Option<Vec<u8>>,
|
||||||
pub content_disposition: Option<String>,
|
|
||||||
pub content_type: Option<String>,
|
pub content_type: Option<String>,
|
||||||
pub file: Vec<u8>,
|
pub content_disposition: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Default)]
|
#[derive(Serialize, Default)]
|
||||||
|
@ -132,16 +131,16 @@ impl Service {
|
||||||
/// Downloads a file.
|
/// Downloads a file.
|
||||||
pub async fn get(&self, mxc: &str) -> Result<Option<FileMeta>> {
|
pub async fn get(&self, mxc: &str) -> Result<Option<FileMeta>> {
|
||||||
if let Ok((content_disposition, content_type, key)) = self.db.search_file_metadata(mxc, 0, 0) {
|
if let Ok((content_disposition, content_type, key)) = self.db.search_file_metadata(mxc, 0, 0) {
|
||||||
let mut file = Vec::new();
|
let mut content = Vec::new();
|
||||||
let path = self.get_media_file(&key);
|
let path = self.get_media_file(&key);
|
||||||
BufReader::new(fs::File::open(path).await?)
|
BufReader::new(fs::File::open(path).await?)
|
||||||
.read_to_end(&mut file)
|
.read_to_end(&mut content)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Ok(Some(FileMeta {
|
Ok(Some(FileMeta {
|
||||||
content_disposition,
|
content: Some(content),
|
||||||
content_type,
|
content_type,
|
||||||
file,
|
content_disposition,
|
||||||
}))
|
}))
|
||||||
} else {
|
} else {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
|
@ -283,29 +282,35 @@ impl Service {
|
||||||
|
|
||||||
if let Ok((content_disposition, content_type, key)) = self.db.search_file_metadata(mxc, width, height) {
|
if let Ok((content_disposition, content_type, key)) = self.db.search_file_metadata(mxc, width, height) {
|
||||||
// Using saved thumbnail
|
// Using saved thumbnail
|
||||||
let mut file = Vec::new();
|
let mut content = Vec::new();
|
||||||
let path = self.get_media_file(&key);
|
let path = self.get_media_file(&key);
|
||||||
fs::File::open(path).await?.read_to_end(&mut file).await?;
|
fs::File::open(path)
|
||||||
|
.await?
|
||||||
|
.read_to_end(&mut content)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(Some(FileMeta {
|
Ok(Some(FileMeta {
|
||||||
content_disposition,
|
content: Some(content),
|
||||||
content_type,
|
content_type,
|
||||||
file: file.clone(),
|
content_disposition,
|
||||||
}))
|
}))
|
||||||
} else if let Ok((content_disposition, content_type, key)) = self.db.search_file_metadata(mxc, 0, 0) {
|
} else if let Ok((content_disposition, content_type, key)) = self.db.search_file_metadata(mxc, 0, 0) {
|
||||||
// Generate a thumbnail
|
// Generate a thumbnail
|
||||||
let mut file = Vec::new();
|
let mut content = Vec::new();
|
||||||
let path = self.get_media_file(&key);
|
let path = self.get_media_file(&key);
|
||||||
fs::File::open(path).await?.read_to_end(&mut file).await?;
|
fs::File::open(path)
|
||||||
|
.await?
|
||||||
|
.read_to_end(&mut content)
|
||||||
|
.await?;
|
||||||
|
|
||||||
if let Ok(image) = image::load_from_memory(&file) {
|
if let Ok(image) = image::load_from_memory(&content) {
|
||||||
let original_width = image.width();
|
let original_width = image.width();
|
||||||
let original_height = image.height();
|
let original_height = image.height();
|
||||||
if width > original_width || height > original_height {
|
if width > original_width || height > original_height {
|
||||||
return Ok(Some(FileMeta {
|
return Ok(Some(FileMeta {
|
||||||
content_disposition,
|
content: Some(content),
|
||||||
content_type,
|
content_type,
|
||||||
file: file.clone(),
|
content_disposition,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,16 +355,16 @@ impl Service {
|
||||||
f.write_all(&thumbnail_bytes).await?;
|
f.write_all(&thumbnail_bytes).await?;
|
||||||
|
|
||||||
Ok(Some(FileMeta {
|
Ok(Some(FileMeta {
|
||||||
content_disposition,
|
content: Some(thumbnail_bytes),
|
||||||
content_type,
|
content_type,
|
||||||
file: thumbnail_bytes.clone(),
|
content_disposition,
|
||||||
}))
|
}))
|
||||||
} else {
|
} else {
|
||||||
// Couldn't parse file to generate thumbnail, send original
|
// Couldn't parse file to generate thumbnail, send original
|
||||||
Ok(Some(FileMeta {
|
Ok(Some(FileMeta {
|
||||||
content_disposition,
|
content: Some(content),
|
||||||
content_type,
|
content_type,
|
||||||
file: file.clone(),
|
content_disposition,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue