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)
|
Ok(actor)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn fetch_avatar_and_banner(
|
pub async fn fetch_actor_avatar(
|
||||||
actor: &Actor,
|
actor: &Actor,
|
||||||
media_dir: &Path,
|
media_dir: &Path,
|
||||||
) -> Result<(Option<String>, Option<String>), FetchError> {
|
default: Option<String>,
|
||||||
let avatar = match &actor.icon {
|
) -> Option<String> {
|
||||||
|
match &actor.icon {
|
||||||
Some(icon) => {
|
Some(icon) => {
|
||||||
let (file_name, _) = fetch_file(
|
match fetch_file(&icon.url, media_dir).await {
|
||||||
&icon.url,
|
Ok((file_name, _)) => Some(file_name),
|
||||||
media_dir,
|
Err(error) => {
|
||||||
).await?;
|
log::warn!(
|
||||||
Some(file_name)
|
"failed to fetch avatar for {} ({})",
|
||||||
|
actor.id,
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
default
|
||||||
|
},
|
||||||
|
}
|
||||||
},
|
},
|
||||||
None => None,
|
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) => {
|
Some(image) => {
|
||||||
let (file_name, _) = fetch_file(
|
match fetch_file(&image.url, media_dir).await {
|
||||||
&image.url,
|
Ok((file_name, _)) => Some(file_name),
|
||||||
media_dir,
|
Err(error) => {
|
||||||
).await?;
|
log::warn!(
|
||||||
Some(file_name)
|
"failed to fetch banner for {} ({})",
|
||||||
|
actor.id,
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
default
|
||||||
|
},
|
||||||
|
}
|
||||||
},
|
},
|
||||||
None => None,
|
None => None,
|
||||||
};
|
}
|
||||||
Ok((avatar, banner))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn fetch_object(
|
pub async fn fetch_object(
|
||||||
|
|
|
@ -22,7 +22,8 @@ use crate::models::profiles::queries::{
|
||||||
use crate::models::profiles::types::{DbActorProfile, ProfileCreateData};
|
use crate::models::profiles::types::{DbActorProfile, ProfileCreateData};
|
||||||
use super::fetchers::{
|
use super::fetchers::{
|
||||||
fetch_actor,
|
fetch_actor,
|
||||||
fetch_avatar_and_banner,
|
fetch_actor_avatar,
|
||||||
|
fetch_actor_banner,
|
||||||
fetch_object,
|
fetch_object,
|
||||||
perform_webfinger_query,
|
perform_webfinger_query,
|
||||||
FetchError,
|
FetchError,
|
||||||
|
@ -66,7 +67,8 @@ async fn prepare_remote_profile_data(
|
||||||
if actor_address.is_local {
|
if actor_address.is_local {
|
||||||
return Err(ImportError::LocalObject);
|
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 (identity_proofs, extra_fields) = actor.parse_attachments();
|
||||||
let profile_data = ProfileCreateData {
|
let profile_data = ProfileCreateData {
|
||||||
username: actor.preferred_username.clone(),
|
username: actor.preferred_username.clone(),
|
||||||
|
|
|
@ -5,7 +5,7 @@ use tokio_postgres::GenericClient;
|
||||||
use crate::activitypub::{
|
use crate::activitypub::{
|
||||||
activity::Activity,
|
activity::Activity,
|
||||||
actor::Actor,
|
actor::Actor,
|
||||||
fetcher::fetchers::fetch_avatar_and_banner,
|
fetcher::fetchers::{fetch_actor_avatar, fetch_actor_banner},
|
||||||
fetcher::helpers::ImportError,
|
fetcher::helpers::ImportError,
|
||||||
vocabulary::PERSON,
|
vocabulary::PERSON,
|
||||||
};
|
};
|
||||||
|
@ -54,7 +54,8 @@ pub async fn update_remote_profile(
|
||||||
actor.public_key.public_key_pem,
|
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 (identity_proofs, extra_fields) = actor.parse_attachments();
|
||||||
let mut profile_data = ProfileUpdateData {
|
let mut profile_data = ProfileUpdateData {
|
||||||
display_name: actor.name.clone(),
|
display_name: actor.name.clone(),
|
||||||
|
|
Loading…
Reference in a new issue