Add get_about_info function

This commit is contained in:
notplants 2022-01-13 14:34:27 -05:00
parent 61fdb42027
commit 887d635683
1 changed files with 22 additions and 6 deletions

View File

@ -304,23 +304,39 @@ impl Sbot {
}
/// Get HashMap of profile info for given user
pub async fn get_profile_info(&mut self, ssb_id: &str) -> Result<HashMap<String, String>, GolgiError> {
let mut keys_to_search_for = vec!["name", "description", "image"];
self.get_about_info(ssb_id, keys_to_search_for).await
}
/// Get HashMap of name and image for given user
/// (this is can be used to display profile images of a list of users)
pub async fn get_name_and_image(&mut self, ssb_id: &str) -> Result<HashMap<String, String>, GolgiError> {
let mut keys_to_search_for = vec!["name", "image"];
self.get_about_info(ssb_id, keys_to_search_for).await
}
/// Get HashMap of about keys to values for given user
/// by iteratively searching through a stream of about messages,
/// in order of recency,
/// until we find all about messages for all needed info
/// or reach the end of the stream.
pub async fn get_profile_info(
///
/// # Arguments
///
/// * `ssb_id` - A reference to a string slice which represents the id of the user to get info about.
/// * `keys_to_search_for` - A mutable vector of string slice, which represent the about keys
/// that will be searched for. As they are found, keys are removed from the vector.
pub async fn get_about_info(
&mut self,
ssb_id: &str
ssb_id: &str,
mut keys_to_search_for: Vec<&str>
) -> Result<HashMap<String, String>, GolgiError> {
// get about_message_stream
let about_message_stream = self.get_about_message_stream(ssb_id).await?;
// now we have a stream of about messages with most recent at the front of the vector
pin_mut!(about_message_stream); // needed for iteration
let mut profile_info: HashMap<String, String> = HashMap::new();
// these are the about message keys we are looking for
// as we find values for each of these keys,
// we will remove them from this vector (as we are no longer searching for them)
let mut keys_to_search_for = vec!["name", "description", "image"];
// iterate through the stream while it still has more values and
// we still have keys we are looking for
while let Some(res) = about_message_stream.next().await {