From a8a8f8c13fd53839286af2b143124850927a80ae Mon Sep 17 00:00:00 2001 From: VC Date: Mon, 9 Jan 2023 12:45:38 +0100 Subject: [PATCH] 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?;