feat: add copyprofile subcommand

This commit is contained in:
VC
2022-12-01 08:27:44 +01:00
parent 25f98581a5
commit 0f5ab4158c
5 changed files with 156 additions and 11 deletions

View File

@@ -1,5 +1,6 @@
use crate::{twitter::get_tweet_media, ScootalooError};
use base64::encode;
use egg_mode::tweet::Tweet;
use futures::{stream, stream::StreamExt};
use log::{error, info, warn};
@@ -71,6 +72,27 @@ pub async fn generate_media_ids(
(media_url, media_ids)
}
/// Transforms the media into a base64 equivalent
pub async fn base64_media(u: &str) -> Result<String, Box<dyn Error>> {
let mut response = reqwest::get(u).await?;
let mut buffer = Vec::new();
while let Some(chunk) = response.chunk().await? {
copy(&mut &*chunk, &mut buffer).await?;
}
let content_type = response
.headers()
.get("content-type")
.ok_or_else(|| ScootalooError::new(&format!("Cannot get media content type for {}", u)))?
.to_str()?;
let encoded_f = encode(buffer);
Ok(format!("data:{};base64,{}", content_type, encoded_f))
}
/// Gets and caches Twitter Media inside the determined temp dir
pub async fn cache_media(u: &str, t: &str) -> Result<String, Box<dyn Error>> {
// create dir
@@ -129,4 +151,17 @@ mod tests {
remove_dir_all(TMP_DIR).unwrap();
}
#[tokio::test]
async fn test_base64_media() {
let img = base64_media(
"https://forum.nintendojo.fr/styles/prosilver/theme/images/ndfr_casual.png",
)
.await
.unwrap();
assert!(img.starts_with("data:image/png;base64,"));
assert!(img.ends_with("="));
}
}