Ignore errors when fetching avatar or banner of remote actor
This commit is contained in:
parent
e581f8efae
commit
5b0cfe1f6b
3 changed files with 43 additions and 21 deletions
|
@ -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(
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in a new issue