profile.rs (2478B)
1 use crate::error::{NetError, Result}; 2 use radroots_events_codec::parsed::RadrootsParsedData; 3 use radroots_events_codec::profile::RadrootsProfileData; 4 use radroots_nostr::prelude::{ 5 RadrootsNostrMetadata, RadrootsNostrPublicKey, radroots_nostr_fetch_metadata_for_author, 6 radroots_nostr_post_metadata_event, 7 }; 8 9 use crate::nostr_client::manager::NostrClientManager; 10 11 impl NostrClientManager { 12 pub async fn fetch_profile_event( 13 &self, 14 author: RadrootsNostrPublicKey, 15 ) -> Result<Option<RadrootsParsedData<RadrootsProfileData>>> { 16 let ev = radroots_nostr_fetch_metadata_for_author( 17 &self.inner.client, 18 author, 19 core::time::Duration::from_secs(5), 20 ) 21 .await 22 .map_err(|e| NetError::Msg(e.to_string()))?; 23 if let Some(e) = ev { 24 if let Some(meta) = radroots_nostr::event_adapters::to_profile_event_metadata(&e) { 25 return Ok(Some(meta)); 26 } 27 return Err(NetError::Msg( 28 "failed to parse kind:0 metadata content".to_string(), 29 )); 30 } 31 Ok(None) 32 } 33 34 pub fn fetch_profile_event_blocking( 35 &self, 36 author: RadrootsNostrPublicKey, 37 ) -> Result<Option<RadrootsParsedData<RadrootsProfileData>>> { 38 let rt = self.inner.rt.clone(); 39 let this = self.clone(); 40 rt.block_on(async move { this.fetch_profile_event(author).await }) 41 } 42 43 pub fn publish_profile_event_blocking( 44 &self, 45 name: Option<String>, 46 display_name: Option<String>, 47 nip05: Option<String>, 48 about: Option<String>, 49 ) -> Result<String> { 50 let rt = self.inner.rt.clone(); 51 let inner_for_task = self.inner.clone(); 52 let event_id = rt.block_on(async move { 53 let mut md = RadrootsNostrMetadata::new(); 54 if let Some(v) = name { 55 md = md.name(v); 56 } 57 if let Some(v) = display_name { 58 md = md.display_name(v); 59 } 60 if let Some(v) = nip05 { 61 md = md.nip05(v); 62 } 63 if let Some(v) = about { 64 md = md.about(v); 65 } 66 let out = radroots_nostr_post_metadata_event(&inner_for_task.client, &md) 67 .await 68 .map_err(|e| NetError::Msg(e.to_string()))?; 69 Ok::<String, NetError>(out.val.to_string()) 70 })?; 71 Ok(event_id) 72 } 73 }