post.rs (2870B)
1 use crate::error::{NetError, Result}; 2 use radroots_events::post::RadrootsPost; 3 use radroots_events_codec::parsed::RadrootsParsedData; 4 use radroots_nostr::prelude::{ 5 radroots_nostr_build_post_event, radroots_nostr_build_post_reply_event, 6 radroots_nostr_fetch_post_events, radroots_nostr_send_event, 7 }; 8 9 use crate::nostr_client::manager::NostrClientManager; 10 11 impl NostrClientManager { 12 pub async fn publish_post_event(&self, content: String) -> Result<String> { 13 let builder = radroots_nostr_build_post_event(content); 14 let out = radroots_nostr_send_event(&self.inner.client, builder) 15 .await 16 .map_err(|e| NetError::Msg(e.to_string()))?; 17 Ok(out.val.to_string()) 18 } 19 20 pub fn publish_post_event_blocking(&self, content: String) -> Result<String> { 21 let rt = self.inner.rt.clone(); 22 let this = self.clone(); 23 rt.block_on(async move { this.publish_post_event(content).await }) 24 } 25 26 pub async fn publish_post_reply_event( 27 &self, 28 parent_event_id_hex: String, 29 parent_author_hex: String, 30 content: String, 31 root_event_id_hex: Option<String>, 32 ) -> Result<String> { 33 let builder = radroots_nostr_build_post_reply_event( 34 &parent_event_id_hex, 35 &parent_author_hex, 36 content, 37 root_event_id_hex.as_deref(), 38 ) 39 .map_err(|e| NetError::Msg(e.to_string()))?; 40 41 let out = radroots_nostr_send_event(&self.inner.client, builder) 42 .await 43 .map_err(|e| NetError::Msg(e.to_string()))?; 44 45 Ok(out.val.to_string()) 46 } 47 48 pub fn publish_post_reply_event_blocking( 49 &self, 50 parent_event_id_hex: String, 51 parent_author_hex: String, 52 content: String, 53 root_event_id_hex: Option<String>, 54 ) -> Result<String> { 55 let rt = self.inner.rt.clone(); 56 let this = self.clone(); 57 rt.block_on(async move { 58 this.publish_post_reply_event( 59 parent_event_id_hex, 60 parent_author_hex, 61 content, 62 root_event_id_hex, 63 ) 64 .await 65 }) 66 } 67 68 pub async fn fetch_post_events( 69 &self, 70 limit: u16, 71 since_unix: Option<u64>, 72 ) -> Result<Vec<RadrootsParsedData<RadrootsPost>>> { 73 let items = radroots_nostr_fetch_post_events(&self.inner.client, limit, since_unix) 74 .await 75 .map_err(|e| NetError::Msg(e.to_string()))?; 76 Ok(items) 77 } 78 79 pub fn fetch_post_events_blocking( 80 &self, 81 limit: u16, 82 since_unix: Option<u64>, 83 ) -> Result<Vec<RadrootsParsedData<RadrootsPost>>> { 84 let rt = self.inner.rt.clone(); 85 let this = self.clone(); 86 rt.block_on(async move { this.fetch_post_events(limit, since_unix).await }) 87 } 88 }