Ignore errors when fetching avatar or banner of remote actor

This commit is contained in:
silverpill 2022-07-22 23:02:14 +00:00
parent e581f8efae
commit 5b0cfe1f6b
3 changed files with 43 additions and 21 deletions

View file

@ -133,31 +133,50 @@ pub async fn fetch_actor(
Ok(actor)
}
pub async fn fetch_avatar_and_banner(
pub async fn fetch_actor_avatar(
actor: &Actor,
media_dir: &Path,
) -> Result<(Option<String>, Option<String>), FetchError> {
let avatar = match &actor.icon {
default: Option<String>,
) -> Option<String> {
match &actor.icon {
Some(icon) => {
let (file_name, _) = fetch_file(
&icon.url,
media_dir,
).await?;
Some(file_name)
match fetch_file(&icon.url, media_dir).await {
Ok((file_name, _)) => Some(file_name),
Err(error) => {
log::warn!(
"failed to fetch avatar for {} ({})",
actor.id,
error,
);
default
},
}
},
None => None,
};
let banner = match &actor.image {
}
}
pub async fn fetch_actor_banner(
actor: &Actor,
media_dir: &Path,
default: Option<String>,
) -> Option<String> {
match &actor.image {
Some(image) => {
let (file_name, _) = fetch_file(
&image.url,
media_dir,
).await?;
Some(file_name)
match fetch_file(&image.url, media_dir).await {
Ok((file_name, _)) => Some(file_name),
Err(error) => {
log::warn!(
"failed to fetch banner for {} ({})",
actor.id,
error,
);
default
},
}
},
None => None,
};
Ok((avatar, banner))
}
}
pub async fn fetch_object(

View file

@ -22,7 +22,8 @@ use crate::models::profiles::queries::{
use crate::models::profiles::types::{DbActorProfile, ProfileCreateData};
use super::fetchers::{
fetch_actor,
fetch_avatar_and_banner,
fetch_actor_avatar,
fetch_actor_banner,
fetch_object,
perform_webfinger_query,
FetchError,
@ -66,7 +67,8 @@ async fn prepare_remote_profile_data(
if actor_address.is_local {
return Err(ImportError::LocalObject);
};
let (avatar, banner) = fetch_avatar_and_banner(&actor, media_dir).await?;
let avatar = fetch_actor_avatar(&actor, media_dir, None).await;
let banner = fetch_actor_banner(&actor, media_dir, None).await;
let (identity_proofs, extra_fields) = actor.parse_attachments();
let profile_data = ProfileCreateData {
username: actor.preferred_username.clone(),

View file

@ -5,7 +5,7 @@ use tokio_postgres::GenericClient;
use crate::activitypub::{
activity::Activity,
actor::Actor,
fetcher::fetchers::fetch_avatar_and_banner,
fetcher::fetchers::{fetch_actor_avatar, fetch_actor_banner},
fetcher::helpers::ImportError,
vocabulary::PERSON,
};
@ -54,7 +54,8 @@ pub async fn update_remote_profile(
actor.public_key.public_key_pem,
);
};
let (avatar, banner) = fetch_avatar_and_banner(&actor, media_dir).await?;
let avatar = fetch_actor_avatar(&actor, media_dir, profile.avatar_file_name).await;
let banner = fetch_actor_banner(&actor, media_dir, profile.banner_file_name).await;
let (identity_proofs, extra_fields) = actor.parse_attachments();
let mut profile_data = ProfileUpdateData {
display_name: actor.name.clone(),