diff --git a/Cargo.lock b/Cargo.lock index 710b62a..c9ac9f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1283,7 +1283,7 @@ dependencies = [ [[package]] name = "oolatoocs" -version = "3.0.2" +version = "3.0.3" dependencies = [ "atrium-api", "bsky-sdk", diff --git a/Cargo.toml b/Cargo.toml index 68275e8..52e59c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oolatoocs" -version = "3.0.2" +version = "3.0.3" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/bsky.rs b/src/bsky.rs index 53c780c..4552b64 100644 --- a/src/bsky.rs +++ b/src/bsky.rs @@ -16,13 +16,6 @@ pub struct BskyReply { pub root_record_uri: String, } -pub async fn get_session(user: &str, pass: &str) -> Result> { - let agent = BskyAgent::builder().build().await?; - agent.login(user, pass).await?; - - Ok(agent) -} - pub async fn build_post_record( config: &BlueskyConfig, text: &str, diff --git a/src/lib.rs b/src/lib.rs index 0dce6f0..bb18ce1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +use bsky_sdk::BskyAgent; use log::debug; mod error; @@ -21,7 +22,7 @@ mod twitter; use twitter::{delete_tweet, generate_media_ids, post_tweet, transform_poll}; mod bsky; -use bsky::{build_post_record, generate_media_records, get_session, BskyReply}; +use bsky::{build_post_record, generate_media_records, BskyReply}; use rusqlite::Connection; @@ -32,9 +33,10 @@ pub async fn run(config: &Config) { let mastodon = get_mastodon_instance(&config.mastodon); - let bluesky = get_session(&config.bluesky.handle, &config.bluesky.password) + let bluesky = BskyAgent::builder() + .build() .await - .unwrap_or_else(|e| panic!("Cannot connect to Bsky: {}", e)); + .unwrap_or_else(|e| panic!("Can’t build Bsky Agent: {}", e)); let last_entry = read_state(&conn, None).unwrap_or_else(|e| panic!("Cannot get last toot id: {}", e)); @@ -62,6 +64,13 @@ pub async fn run(config: &Config) { panic!("Cannot delete Tweet ID ({}): {}", t.tweet_id, e) }); } + + debug!("Create Bsky session prior to deletion"); + bluesky + .login(&config.bluesky.handle, &config.bluesky.password) + .await + .unwrap_or_else(|e| panic!("Cannot login to Bsky: {}", e)); + for local_record_uri in local_record_uris.into_iter() { bluesky .delete_record(&local_record_uri) @@ -99,6 +108,14 @@ pub async fn run(config: &Config) { continue; // skip in case we can’t strip something }; + debug!("Now we need a valid Bsky session, creating it"); + if bluesky.api.com.atproto.server.get_session().await.is_err() { + bluesky + .login(&config.bluesky.handle, &config.bluesky.password) + .await + .unwrap_or_else(|e| panic!("Cannot login to Bsky: {}", e)); + } + // threads if necessary let (mut tweet_reply_to, mut record_reply_to) = toot .in_reply_to_id