Adding pictrs thumbnail caching for urls and embeds.
This commit is contained in:
parent
bd26e4e9c1
commit
2fbd44c59d
3 changed files with 32 additions and 22 deletions
|
@ -18,7 +18,7 @@ use crate::db::user_mention_view::*;
|
||||||
use crate::db::user_view::*;
|
use crate::db::user_view::*;
|
||||||
use crate::db::*;
|
use crate::db::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
extract_usernames, fetch_iframely_and_pictshare_data, generate_random_string, naive_from_unix,
|
extract_usernames, fetch_iframely_and_pictrs_data, generate_random_string, naive_from_unix,
|
||||||
naive_now, remove_slurs, send_email, slur_check, slurs_vec_to_str,
|
naive_now, remove_slurs, send_email, slur_check, slurs_vec_to_str,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ impl Perform for Oper<CreatePost> {
|
||||||
|
|
||||||
// Fetch Iframely and Pictshare cached image
|
// Fetch Iframely and Pictshare cached image
|
||||||
let (iframely_title, iframely_description, iframely_html, pictshare_thumbnail) =
|
let (iframely_title, iframely_description, iframely_html, pictshare_thumbnail) =
|
||||||
fetch_iframely_and_pictshare_data(data.url.to_owned());
|
fetch_iframely_and_pictrs_data(data.url.to_owned());
|
||||||
|
|
||||||
let post_form = PostForm {
|
let post_form = PostForm {
|
||||||
name: data.name.to_owned(),
|
name: data.name.to_owned(),
|
||||||
|
@ -452,7 +452,7 @@ impl Perform for Oper<EditPost> {
|
||||||
|
|
||||||
// Fetch Iframely and Pictshare cached image
|
// Fetch Iframely and Pictshare cached image
|
||||||
let (iframely_title, iframely_description, iframely_html, pictshare_thumbnail) =
|
let (iframely_title, iframely_description, iframely_html, pictshare_thumbnail) =
|
||||||
fetch_iframely_and_pictshare_data(data.url.to_owned());
|
fetch_iframely_and_pictrs_data(data.url.to_owned());
|
||||||
|
|
||||||
let post_form = PostForm {
|
let post_form = PostForm {
|
||||||
name: data.name.to_owned(),
|
name: data.name.to_owned(),
|
||||||
|
|
|
@ -187,25 +187,35 @@ pub fn fetch_iframely(url: &str) -> Result<IframelyResponse, failure::Error> {
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug, Clone)]
|
||||||
pub struct PictshareResponse {
|
pub struct PictrsResponse {
|
||||||
status: String,
|
files: Vec<PictrsFile>,
|
||||||
url: String,
|
msg: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fetch_pictshare(image_url: &str) -> Result<PictshareResponse, failure::Error> {
|
#[derive(Deserialize, Debug, Clone)]
|
||||||
|
pub struct PictrsFile {
|
||||||
|
file: String,
|
||||||
|
delete_token: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fetch_pictrs(image_url: &str) -> Result<PictrsResponse, failure::Error> {
|
||||||
is_image_content_type(image_url)?;
|
is_image_content_type(image_url)?;
|
||||||
|
|
||||||
let fetch_url = format!(
|
let fetch_url = format!(
|
||||||
"http://pictshare/api/geturl.php?url={}",
|
"http://pictrs:8080/image/download?url={}",
|
||||||
utf8_percent_encode(image_url, NON_ALPHANUMERIC)
|
utf8_percent_encode(image_url, NON_ALPHANUMERIC) // TODO this might not be needed
|
||||||
);
|
);
|
||||||
let text = isahc::get(&fetch_url)?.text()?;
|
let text = isahc::get(&fetch_url)?.text()?;
|
||||||
let res: PictshareResponse = serde_json::from_str(&text)?;
|
let res: PictrsResponse = serde_json::from_str(&text)?;
|
||||||
Ok(res)
|
if res.msg == "ok" {
|
||||||
|
Ok(res)
|
||||||
|
} else {
|
||||||
|
Err(format_err!("{}", &res.msg))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fetch_iframely_and_pictshare_data(
|
fn fetch_iframely_and_pictrs_data(
|
||||||
url: Option<String>,
|
url: Option<String>,
|
||||||
) -> (
|
) -> (
|
||||||
Option<String>,
|
Option<String>,
|
||||||
|
@ -225,20 +235,20 @@ fn fetch_iframely_and_pictshare_data(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Fetch pictshare thumbnail
|
// Fetch pictrs thumbnail
|
||||||
let pictshare_thumbnail = match iframely_thumbnail_url {
|
let pictrs_thumbnail = match iframely_thumbnail_url {
|
||||||
Some(iframely_thumbnail_url) => match fetch_pictshare(&iframely_thumbnail_url) {
|
Some(iframely_thumbnail_url) => match fetch_pictrs(&iframely_thumbnail_url) {
|
||||||
Ok(res) => Some(res.url),
|
Ok(res) => Some(res.files[0].file.to_owned()),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("pictshare err: {}", e);
|
error!("pictrs err: {}", e);
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// Try to generate a small thumbnail if iframely is not supported
|
// Try to generate a small thumbnail if iframely is not supported
|
||||||
None => match fetch_pictshare(&url) {
|
None => match fetch_pictrs(&url) {
|
||||||
Ok(res) => Some(res.url),
|
Ok(res) => Some(res.files[0].file.to_owned()),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("pictshare err: {}", e);
|
error!("pictrs err: {}", e);
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -248,7 +258,7 @@ fn fetch_iframely_and_pictshare_data(
|
||||||
iframely_title,
|
iframely_title,
|
||||||
iframely_description,
|
iframely_description,
|
||||||
iframely_html,
|
iframely_html,
|
||||||
pictshare_thumbnail,
|
pictrs_thumbnail,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
None => (None, None, None, None),
|
None => (None, None, None, None),
|
||||||
|
|
Loading…
Reference in a new issue