mirror of
https://framagit.org/veretcle/oolatoocs.git
synced 2025-07-21 13:24:18 +02:00
💥: now incompatible with Twitter
This commit is contained in:
82
src/lib.rs
82
src/lib.rs
@@ -7,7 +7,7 @@ mod config;
|
||||
pub use config::{parse_toml, Config};
|
||||
|
||||
mod state;
|
||||
use state::{delete_state, read_all_state, read_state, write_state, TootTweetRecord};
|
||||
use state::{delete_state, read_all_state, read_state, write_state, TootRecord};
|
||||
pub use state::{init_db, migrate_db};
|
||||
|
||||
mod mastodon;
|
||||
@@ -17,9 +17,6 @@ use mastodon::{get_mastodon_instance, get_mastodon_timeline_since, get_status_ed
|
||||
mod utils;
|
||||
use utils::{generate_multi_tweets, strip_everything};
|
||||
|
||||
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};
|
||||
|
||||
@@ -48,20 +45,13 @@ pub async fn run(config: &Config) {
|
||||
// a date has been found
|
||||
if d > t.datetime.unwrap() {
|
||||
debug!("Last toot date is posterior to the previously written tweet, deleting…");
|
||||
let (local_tweet_ids, local_record_uris) = read_all_state(&conn, t.toot_id)
|
||||
.unwrap_or_else(|e| {
|
||||
let local_record_uris =
|
||||
read_all_state(&conn, t.toot_id).unwrap_or_else(|e| {
|
||||
panic!(
|
||||
"Cannot fetch all tweets associated with Toot ID {}: {}",
|
||||
"Cannot fetch all records associated with Toot ID {}: {}",
|
||||
t.toot_id, e
|
||||
)
|
||||
});
|
||||
for local_tweet_id in local_tweet_ids.into_iter() {
|
||||
delete_tweet(&config.twitter, local_tweet_id)
|
||||
.await
|
||||
.unwrap_or_else(|e| {
|
||||
panic!("Cannot delete Tweet ID ({}): {}", t.tweet_id, e)
|
||||
});
|
||||
}
|
||||
for local_record_uri in local_record_uris.into_iter() {
|
||||
bluesky
|
||||
.delete_record(&local_record_uri)
|
||||
@@ -100,38 +90,20 @@ pub async fn run(config: &Config) {
|
||||
};
|
||||
|
||||
// threads if necessary
|
||||
let (mut tweet_reply_to, mut record_reply_to) = toot
|
||||
.in_reply_to_id
|
||||
.and_then(|t| {
|
||||
read_state(&conn, Some(t.parse::<u64>().unwrap()))
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(|s| {
|
||||
(
|
||||
s.tweet_id,
|
||||
BskyReply {
|
||||
record_uri: s.record_uri.to_owned(),
|
||||
root_record_uri: s.root_record_uri.to_owned(),
|
||||
},
|
||||
)
|
||||
})
|
||||
})
|
||||
.unzip();
|
||||
let mut record_reply_to = toot.in_reply_to_id.and_then(|t| {
|
||||
read_state(&conn, Some(t.parse::<u64>().unwrap()))
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(|s| BskyReply {
|
||||
record_uri: s.record_uri.to_owned(),
|
||||
root_record_uri: s.root_record_uri.to_owned(),
|
||||
})
|
||||
});
|
||||
|
||||
// if the toot is too long, we cut it in half here
|
||||
if let Some((first_half, second_half)) = generate_multi_tweets(&tweet_content) {
|
||||
tweet_content = second_half;
|
||||
// post the first half
|
||||
let tweet_reply_id =
|
||||
post_tweet(&config.twitter, &first_half, vec![], tweet_reply_to, None)
|
||||
.await
|
||||
.unwrap_or_else(|e| {
|
||||
panic!(
|
||||
"Cannot post the first half of {} for Twitter: {}",
|
||||
&toot.id, e
|
||||
)
|
||||
});
|
||||
|
||||
let record = build_post_record(
|
||||
&config.bluesky,
|
||||
&first_half,
|
||||
@@ -150,9 +122,8 @@ pub async fn run(config: &Config) {
|
||||
// write it to db
|
||||
write_state(
|
||||
&conn,
|
||||
TootTweetRecord {
|
||||
TootRecord {
|
||||
toot_id: toot.id.parse::<u64>().unwrap(),
|
||||
tweet_id: tweet_reply_id,
|
||||
record_uri: record_reply_id.data.uri.to_owned(),
|
||||
root_record_uri: record_reply_to
|
||||
.as_ref()
|
||||
@@ -164,8 +135,8 @@ pub async fn run(config: &Config) {
|
||||
)
|
||||
.unwrap_or_else(|e| {
|
||||
panic!(
|
||||
"Cannot store Toot/Tweet/Record ({}/{}/{}): {}",
|
||||
&toot.id, tweet_reply_id, &record_reply_id.data.uri, e
|
||||
"Cannot store Toot/Tweet/Record ({}/{}): {}",
|
||||
&toot.id, &record_reply_id.data.uri, e
|
||||
)
|
||||
});
|
||||
|
||||
@@ -177,28 +148,12 @@ pub async fn run(config: &Config) {
|
||||
v.root_record_uri.clone()
|
||||
}),
|
||||
});
|
||||
|
||||
tweet_reply_to = Some(tweet_reply_id);
|
||||
};
|
||||
|
||||
// treats poll if any
|
||||
let in_poll = toot.poll.map(|p| transform_poll(&p));
|
||||
|
||||
// treats medias
|
||||
let record_medias = generate_media_records(&bluesky, &toot.media_attachments).await;
|
||||
let tweet_medias = generate_media_ids(&config.twitter, &toot.media_attachments).await;
|
||||
|
||||
// posts corresponding tweet
|
||||
let tweet_id = post_tweet(
|
||||
&config.twitter,
|
||||
&tweet_content,
|
||||
tweet_medias,
|
||||
tweet_reply_to,
|
||||
in_poll,
|
||||
)
|
||||
.await
|
||||
.unwrap_or_else(|e| panic!("Cannot Tweet {}: {}", toot.id, e));
|
||||
|
||||
let record = build_post_record(
|
||||
&config.bluesky,
|
||||
&tweet_content,
|
||||
@@ -217,9 +172,8 @@ pub async fn run(config: &Config) {
|
||||
// writes the current state of the tweet
|
||||
write_state(
|
||||
&conn,
|
||||
TootTweetRecord {
|
||||
TootRecord {
|
||||
toot_id: toot.id.parse::<u64>().unwrap(),
|
||||
tweet_id,
|
||||
record_uri: created_record.data.uri.clone(),
|
||||
root_record_uri: record_reply_to
|
||||
.as_ref()
|
||||
@@ -229,6 +183,6 @@ pub async fn run(config: &Config) {
|
||||
datetime: None,
|
||||
},
|
||||
)
|
||||
.unwrap_or_else(|e| panic!("Cannot store Toot/Tweet ({}/{}): {}", &toot.id, tweet_id, e));
|
||||
.unwrap_or_else(|e| panic!("Cannot store Toot/Tweet ({}): {}", &toot.id, e));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user