From ccf8c65c80cbf08d35d7a34d0687090f6cfbf2eb Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Sat, 17 Jul 2021 14:47:03 +0200 Subject: [PATCH] memes have their file name as image description --- CHANGELOG.md | 9 +++------ Cargo.toml | 2 +- src/responder.rs | 30 +++++++++++++++++++++--------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ca0bf1..9166ae7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,3 @@ -# 0.2.4 -- fix match = "contains" commands matching when keyword is at the start of message, and there are invalid characters after it. -- add tests -- only 1 meme per message -- add Xd and xd commands -- add match_case option +# 0.2.5 +- DATABASE FORMAT CHANGE! +- memes will now have their file name as the image description. diff --git a/Cargo.toml b/Cargo.toml index 23a8e82..aa9e012 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruff" -version = "0.2.4" +version = "0.2.5" authors = ["LordMZTE "] edition = "2018" diff --git a/src/responder.rs b/src/responder.rs index 5289521..e557d19 100644 --- a/src/responder.rs +++ b/src/responder.rs @@ -31,15 +31,22 @@ struct CachedMeme { mime: Mime, /// file size of the meme size: UInt, + /// file name of the meme + meme_name: String, } impl CachedMeme { - fn into_message_type(self, name: String) -> Option { - let Self { mxc, mime, size } = self; + fn into_message_type(self) -> Option { + let Self { + mxc, + mime, + size, + meme_name, + } = self; match mime.type_() { mime::IMAGE => Some(MessageType::Image(ImageMessageEventContent::plain( - name, + meme_name, mxc, Some(Box::new({ let mut info = ImageInfo::new(); @@ -49,7 +56,7 @@ impl CachedMeme { })), ))), mime::VIDEO => Some(MessageType::Video(VideoMessageEventContent::plain( - name, + meme_name, mxc, Some(Box::new({ let mut info = VideoInfo::new(); @@ -80,7 +87,6 @@ pub async fn on_msg(msg: &str, room: Room, bot: &Bot) -> anyhow::Result<()> { if meme.matches(msg) { bot.meme_count.fetch_add(1, Ordering::SeqCst); - let meme_name = &meme.keyword; if let Some(meme) = meme.get_meme(bot).await? { match meme.id.parse::() { Err(e) => { @@ -93,7 +99,7 @@ pub async fn on_msg(msg: &str, room: Room, bot: &Bot) -> anyhow::Result<()> { Ok(id) => { if let Some(ivec) = bot.memecache.get(id.to_le_bytes())? { let cached = bincode::deserialize::(&ivec)?; - send_meme(&room, cached, meme_name.clone()).await?; + send_meme(&room, cached).await?; } else { info!("Meme {} not found in cache, uploading...", id); let resp = bot @@ -121,12 +127,18 @@ pub async fn on_msg(msg: &str, room: Room, bot: &Bot) -> anyhow::Result<()> { mime, size: UInt::new(size as u64) .context("Meme has file size over allowed limit!")?, + meme_name: meme + .link + .split('/') + .last() + .unwrap_or(&meme.link) + .to_string(), }; bot.memecache .insert(id.to_le_bytes(), bincode::serialize(&cached)?)?; - send_meme(&room, cached, meme_name.clone()).await?; + send_meme(&room, cached).await?; } else { error!( "Couldn't guess MIME type of meme '{}', skipping.", @@ -156,9 +168,9 @@ pub async fn on_msg(msg: &str, room: Room, bot: &Bot) -> anyhow::Result<()> { Ok(()) } -async fn send_meme(room: &Joined, cached: CachedMeme, meme_name: String) -> anyhow::Result<()> { +async fn send_meme(room: &Joined, cached: CachedMeme) -> anyhow::Result<()> { let msg_ty = cached - .into_message_type(meme_name) + .into_message_type() .context("Found meme that is neither image nor video!")?; room.send(