mirror of
https://github.com/TheFunny/TelegramTwitterMediaBot.git
synced 2026-09-23 23:32:05 +00:00
fallback to smaller media when file too large
This commit is contained in:
@@ -14,6 +14,24 @@ impl Media {
|
||||
Media::Animated { thumbnail_url, .. } => Some(thumbnail_url),
|
||||
}
|
||||
}
|
||||
|
||||
/// A smaller variant of this media's file (used as the fallback when the
|
||||
/// primary URL or upload exceeds Telegram's size limits). None when no
|
||||
/// smaller variant exists (videos, animated gifs).
|
||||
pub fn smaller_url(&self) -> Option<&str> {
|
||||
match self {
|
||||
Media::Illustration {
|
||||
url,
|
||||
fallback_url,
|
||||
thumbnail_url,
|
||||
..
|
||||
} => fallback_url
|
||||
.as_deref()
|
||||
.or(thumbnail_url.as_deref())
|
||||
.filter(|smaller| *smaller != url),
|
||||
Media::Video { .. } | Media::Animated { .. } => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
@@ -195,6 +195,19 @@ async fn fetch_once(url: &str) -> Result<Option<Fetched>, FetchError> {
|
||||
/// fetch of a media URL is blocked (hotlink protection), the bot downloads
|
||||
/// the file itself and uploads it via multipart. Site-appropriate headers:
|
||||
/// pixiv image hosts need the `Referer` header.
|
||||
/// Returns the Content-Length of a media URL, or `None` when the server does
|
||||
/// not report one. Used to check whether a file fits Telegram's size limits
|
||||
/// before downloading/uploading it.
|
||||
pub async fn media_size(url: &str) -> Result<Option<u64>, FetchError> {
|
||||
let mut request = CLIENT.get(url);
|
||||
let lower = url.to_ascii_lowercase();
|
||||
if lower.contains("pximg.net") {
|
||||
request = request.header("Referer", "https://www.pixiv.net/");
|
||||
}
|
||||
let response = request.send().await?;
|
||||
Ok(response.content_length())
|
||||
}
|
||||
|
||||
pub async fn download_media(url: &str) -> Result<bytes::Bytes, FetchError> {
|
||||
let mut request = CLIENT.get(url);
|
||||
let lower = url.to_ascii_lowercase();
|
||||
|
||||
@@ -129,7 +129,9 @@ impl Tweet {
|
||||
title: None,
|
||||
url: original_twimg_url(&item.media_url_https),
|
||||
thumbnail_url: None,
|
||||
fallback_url: None,
|
||||
// The param-less base URL is a reduced-size variant;
|
||||
// used as the fallback when the original is too large.
|
||||
fallback_url: Some(item.media_url_https.clone()),
|
||||
}),
|
||||
"video" => media.push(Media::Video {
|
||||
title: None,
|
||||
|
||||
Reference in New Issue
Block a user