refactor: separate function for media ids

This commit is contained in:
VC
2022-11-05 07:57:03 +01:00
parent df75520175
commit de758c7bda
5 changed files with 68 additions and 48 deletions

View File

@@ -13,16 +13,17 @@ mod twitter;
use twitter::*;
mod util;
use crate::util::generate_media_ids;
mod state;
pub use state::{init_db, migrate_db};
use state::{read_state, write_state, TweetToToot};
use elefren::{prelude::*, status_builder::StatusBuilder};
use log::{debug, error, info, warn};
use log::{debug, info};
use rusqlite::Connection;
use std::{borrow::Cow, sync::Arc};
use tokio::{fs::remove_file, spawn, sync::Mutex, task::JoinHandle};
use std::sync::Arc;
use tokio::{spawn, sync::Mutex, task::JoinHandle};
/// This is where the magic happens
#[tokio::main]
@@ -106,46 +107,11 @@ pub async fn run(config: Config) {
// build basic status by just yielding text and dereferencing contained urls
let mut status_text = build_basic_status(tweet);
let mut status_medias: Vec<String> = vec![];
// reupload the attachments if any
if let Some(m) = &tweet.extended_entities {
for media in &m.media {
let local_tweet_media_path =
match get_tweet_media(media, &scootaloo_cache_path).await {
Ok(m) => m,
Err(e) => {
error!("Cannot get tweet media for {}: {}", &media.url, e);
continue;
}
};
// building associative media list
let (media_url, status_medias) =
generate_media_ids(tweet, &scootaloo_cache_path, &mastodon).await;
let mastodon_media_ids = match mastodon
.media(Cow::from(local_tweet_media_path.to_owned()))
{
Ok(m) => {
remove_file(&local_tweet_media_path)
.await
.unwrap_or_else(|e|
warn!("Attachment for {} has been uploaded, but Im unable to remove the existing file: {}", &local_tweet_media_path, e)
);
m.id
}
Err(e) => {
error!(
"Attachment {} cannot be uploaded to Mastodon Instance: {}",
&local_tweet_media_path, e
);
continue;
}
};
status_medias.push(mastodon_media_ids);
// last step, removing the reference to the media from with the toots text
status_text = status_text.replace(&media.url, "");
}
}
// finished reuploading attachments, now lets do the toot baby!
status_text = status_text.replace(&media_url, "");
debug!("Building corresponding Mastodon status");
@@ -157,6 +123,9 @@ pub async fn run(config: Config) {
status_builder.in_reply_to(&i);
}
// can be activated for test purposes
// status_builder.visibility(elefren::status_builder::Visibility::Private);
let status = status_builder
.build()
.unwrap_or_else(|_| panic!("Cannot build status with text {}", &status_text));