From 90a9df220a38147a4e5ecab3589632bb168515f1 Mon Sep 17 00:00:00 2001 From: VC Date: Mon, 9 Jan 2023 12:45:18 +0100 Subject: [PATCH 1/2] chore: bump version to 1.1.4, megalodon to 0.3.6 --- Cargo.lock | 6 +++--- Cargo.toml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6272ade..71080e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -858,9 +858,9 @@ dependencies = [ [[package]] name = "megalodon" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7bc4427c44dc9c4b439da7bcd15a87b51e21340a12ef5a4f7eac90fc247886" +checksum = "3b39bd378603a46216457c1c95c54f8dec37959a02c06a59cc33d00fc71a0ba0" dependencies = [ "async-trait", "chrono", @@ -1343,7 +1343,7 @@ dependencies = [ [[package]] name = "scootaloo" -version = "1.1.3" +version = "1.1.4" dependencies = [ "base64", "clap", diff --git a/Cargo.toml b/Cargo.toml index a0faf2a..278c292 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "scootaloo" -version = "1.1.3" +version = "1.1.4" authors = ["VC "] edition = "2021" @@ -17,7 +17,7 @@ rusqlite = "^0.27" isolang = "^2" tokio = { version = "^1", features = ["rt"]} futures = "^0.3" -megalodon = "^0.3.3" +megalodon = "^0.3.6" html-escape = "^0.2" reqwest = "^0.11" log = "^0.4" From a8a8f8c13fd53839286af2b143124850927a80ae Mon Sep 17 00:00:00 2001 From: VC Date: Mon, 9 Jan 2023 12:45:38 +0100 Subject: [PATCH 2/2] fix: wait until media is uploaded --- src/util.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/util.rs b/src/util.rs index 31c01ed..88029ba 100644 --- a/src/util.rs +++ b/src/util.rs @@ -6,6 +6,7 @@ use futures::{stream, stream::StreamExt}; use log::{error, info, warn}; use megalodon::{ entities::UploadMedia::{AsyncAttachment, Attachment}, + error, mastodon::Mastodon, megalodon::Megalodon, }; @@ -55,7 +56,7 @@ pub async fn generate_media_ids( let id = match mastodon_media { Attachment(m) => m.id, - AsyncAttachment(m) => m.id, + AsyncAttachment(m) => wait_until_uploaded(&mastodon, &m.id).await?, }; Ok::(id) @@ -81,6 +82,23 @@ pub async fn generate_media_ids( (media_url, media_ids) } +/// Wait on uploaded medias when necessary +async fn wait_until_uploaded(client: &Mastodon, id: &str) -> Result { + loop { + let res = client.get_media(id.to_string()).await; + return match res { + Ok(res) => Ok(res.json.id), + Err(err) => match err { + error::Error::OwnError(ref own_err) => match own_err.kind { + error::Kind::HTTPPartialContentError => continue, + _ => Err(err), + }, + _ => Err(err), + }, + }; + } +} + /// Transforms the media into a base64 equivalent pub async fn base64_media(u: &str) -> Result> { let mut response = reqwest::get(u).await?;