mirror of
https://github.com/TheFunny/TelegramTwitterMediaBot.git
synced 2026-09-26 23:52:05 +00:00
refactor(x-media): drop Media's write-only title field
Every adapter set title (mostly None) on all three Media variants and nothing ever read it: the bot's CachedMedia carries kind/file_id/url, and the one read was misskey's own test. Removing it also drops misskey's DriveFile.name, which existed only to feed it. Fetched::title (the post's own headline, which captions do use) is untouched.
This commit is contained in:
@@ -37,18 +37,15 @@ impl Media {
|
||||
#[derive(Debug)]
|
||||
pub enum Media {
|
||||
Illustration {
|
||||
title: Option<String>,
|
||||
url: String,
|
||||
thumbnail_url: Option<String>,
|
||||
fallback_url: Option<String>,
|
||||
},
|
||||
Video {
|
||||
title: Option<String>,
|
||||
url: String,
|
||||
thumbnail_url: String,
|
||||
},
|
||||
Animated {
|
||||
title: Option<String>,
|
||||
url: String,
|
||||
thumbnail_url: String,
|
||||
},
|
||||
|
||||
@@ -458,7 +458,6 @@ fn image(url: &str) -> Option<Media> {
|
||||
}
|
||||
Some(if url.ends_with(".gif") {
|
||||
Media::Animated {
|
||||
title: None,
|
||||
url,
|
||||
// Left empty on purpose: the `@518w.jpg` variant is unverified for
|
||||
// animated sources, and Telegram generates a frame preview itself.
|
||||
@@ -466,7 +465,6 @@ fn image(url: &str) -> Option<Media> {
|
||||
}
|
||||
} else {
|
||||
Media::Illustration {
|
||||
title: None,
|
||||
// Written before `url` moves so the formatting borrows it.
|
||||
thumbnail_url: Some(format!("{url}{THUMB_SUFFIX}")),
|
||||
url,
|
||||
|
||||
@@ -73,7 +73,6 @@ pub async fn fetch_from_url(url: &str) -> Result<Fetched, FetchError> {
|
||||
_ => String::new(),
|
||||
};
|
||||
media.push(Media::Video {
|
||||
title: None,
|
||||
url: mp4_path.to_string_lossy().into_owned(),
|
||||
thumbnail_url,
|
||||
});
|
||||
@@ -354,7 +353,6 @@ impl Post {
|
||||
match embed {
|
||||
model::Media::Images { images } => {
|
||||
media.extend(images.into_iter().map(|image| Media::Illustration {
|
||||
title: None,
|
||||
url: image.fullsize,
|
||||
thumbnail_url: Some(image.thumb),
|
||||
fallback_url: None,
|
||||
@@ -365,7 +363,6 @@ impl Post {
|
||||
thumbnail,
|
||||
} => {
|
||||
media.push(Media::Video {
|
||||
title: None,
|
||||
url: playlist,
|
||||
thumbnail_url: thumbnail,
|
||||
});
|
||||
|
||||
@@ -160,21 +160,17 @@ fn caption(url: &str, author_url: &str, author: &str, text: &str) -> String {
|
||||
/// are skipped (twitter's `_ => {}` precedent). GIF must be matched before
|
||||
/// the generic image arm.
|
||||
fn media_from_file(file: &model::DriveFile) -> Option<Media> {
|
||||
let title = file.name.clone();
|
||||
match file.mime_type.as_str() {
|
||||
"image/gif" => Some(Media::Animated {
|
||||
title,
|
||||
url: file.url.clone(),
|
||||
thumbnail_url: file.thumbnail_url.clone().unwrap_or_default(),
|
||||
}),
|
||||
mime if mime.starts_with("image/") => Some(Media::Illustration {
|
||||
title,
|
||||
url: file.url.clone(),
|
||||
thumbnail_url: file.thumbnail_url.clone(),
|
||||
fallback_url: None,
|
||||
}),
|
||||
mime if mime.starts_with("video/") => Some(Media::Video {
|
||||
title,
|
||||
url: file.url.clone(),
|
||||
thumbnail_url: file.thumbnail_url.clone().unwrap_or_default(),
|
||||
}),
|
||||
@@ -253,12 +249,10 @@ mod tests {
|
||||
assert_eq!(fetched.media.len(), 1);
|
||||
match &fetched.media[0] {
|
||||
Media::Illustration {
|
||||
title,
|
||||
url,
|
||||
thumbnail_url,
|
||||
fallback_url,
|
||||
} => {
|
||||
assert_eq!(title.as_deref(), Some("pic.webp"));
|
||||
assert_eq!(url, "https://media.misskeyusercontent.jp/io/a.webp");
|
||||
assert_eq!(
|
||||
thumbnail_url.as_deref(),
|
||||
|
||||
@@ -30,6 +30,4 @@ pub(crate) struct DriveFile {
|
||||
pub(crate) thumbnail_url: Option<String>,
|
||||
#[serde(default, rename = "isSensitive")]
|
||||
pub(crate) is_sensitive: bool,
|
||||
#[serde(default)]
|
||||
pub(crate) name: Option<String>,
|
||||
}
|
||||
|
||||
@@ -149,7 +149,6 @@ impl PixivAPI {
|
||||
match self.ugoira_video(illust_id).await {
|
||||
Ok(Some((mp4_path, _keep_alive))) => {
|
||||
illustration.media.push(Media::Video {
|
||||
title: None,
|
||||
url: mp4_path,
|
||||
thumbnail_url: model.image_urls.medium.clone(),
|
||||
});
|
||||
|
||||
@@ -235,7 +235,6 @@ impl Illustration {
|
||||
.original
|
||||
.clone()
|
||||
.map(|original| Media::Illustration {
|
||||
title: None,
|
||||
url: original,
|
||||
thumbnail_url: Some(page.image_urls.medium.clone()),
|
||||
fallback_url: Some(page.image_urls.large.clone()),
|
||||
@@ -248,7 +247,6 @@ impl Illustration {
|
||||
.or(model.image_urls.original.clone())
|
||||
{
|
||||
media.push(Media::Illustration {
|
||||
title: None,
|
||||
url: original,
|
||||
thumbnail_url: Some(model.image_urls.medium.clone()),
|
||||
fallback_url: Some(model.image_urls.large.clone()),
|
||||
|
||||
@@ -236,7 +236,6 @@ impl Tweet {
|
||||
for item in json.media_details {
|
||||
match item.media_type.as_str() {
|
||||
"photo" => media.push(Media::Illustration {
|
||||
title: None,
|
||||
url: original_twimg_url(&item.media_url_https),
|
||||
thumbnail_url: None,
|
||||
// The param-less base URL is a reduced-size variant;
|
||||
@@ -244,12 +243,10 @@ impl Tweet {
|
||||
fallback_url: Some(item.media_url_https.clone()),
|
||||
}),
|
||||
"video" => media.push(Media::Video {
|
||||
title: None,
|
||||
url: mp4_variant(&item),
|
||||
thumbnail_url: item.media_url_https,
|
||||
}),
|
||||
"animated_gif" => media.push(Media::Animated {
|
||||
title: None,
|
||||
url: mp4_variant(&item),
|
||||
thumbnail_url: item.media_url_https,
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user