diff --git a/src/lib.rs b/src/lib.rs index 77efeef..efc4c63 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,7 +4,7 @@ pub use config::{parse_toml, Config}; mod state; pub use state::init_db; #[allow(unused_imports)] -use state::{read_state, write_state}; +use state::{read_state, write_state, TweetToToot}; mod mastodon; use mastodon::get_mastodon_timeline_since; @@ -38,9 +38,17 @@ pub async fn run(config: &Config) { }; // if we wanted to cut toot in half, now would be the right time to do so // treating medias (nothing for now) - let _tweet_id = post_tweet(&config.twitter, &tweet_content, &[]) + let tweet_id = post_tweet(&config.twitter, &tweet_content, &[]) .await .unwrap_or_else(|e| panic!("Cannot Tweet {}: {}", toot.id, e)); - return; + + write_state( + &conn, + TweetToToot { + tweet_id, + toot_id: toot.id.parse::().unwrap(), + }, + ) + .unwrap_or_else(|e| panic!("Cannot store Toot/Tweet ({}/{}): {}", &toot.id, tweet_id, e)); } } diff --git a/src/state.rs b/src/state.rs index 5deabfc..43d1de1 100644 --- a/src/state.rs +++ b/src/state.rs @@ -36,7 +36,6 @@ pub fn read_state( } /// Writes last treated tweet id and toot id to the db -#[allow(dead_code)] pub fn write_state(conn: &Connection, t: TweetToToot) -> Result<(), Box> { debug!("Write struct {:?}", t); conn.execute( diff --git a/src/twitter.rs b/src/twitter.rs index 8d1901c..283d2d7 100644 --- a/src/twitter.rs +++ b/src/twitter.rs @@ -14,7 +14,14 @@ pub struct Tweet { } #[derive(Deserialize, Debug)] -pub struct TweetResponse {} +pub struct TweetResponse { + pub data: TweetResponseData, +} + +#[derive(Deserialize, Debug)] +pub struct TweetResponseData { + pub id: String, +} /// This function returns the OAuth1 Token object from TwitterConfig fn get_token(config: &TwitterConfig) -> Token { @@ -39,14 +46,14 @@ pub async fn post_tweet( _medias: &[u64], ) -> Result> { let uri = "https://api.twitter.com/2/tweets"; - let token = get_token(config); let empty_request = EmptyRequest {}; // Why? Because fuck you, that’s why! + let token = get_token(config); + let tweet = Tweet { text: content.to_string(), }; let client = Client::new(); - let res = client .post(uri) .header( @@ -55,9 +62,9 @@ pub async fn post_tweet( ) .json(&tweet) .send() + .await? + .json::() .await?; - println!("{:?}", res.text().await.unwrap()); - - Ok(0) + Ok(res.data.id.parse::().unwrap()) }