Replace actor image fetchers with a single function

This commit is contained in:
silverpill 2022-10-19 19:33:34 +00:00
parent dbe54f0924
commit 36730be03b
3 changed files with 45 additions and 53 deletions

View file

@ -144,50 +144,35 @@ pub async fn fetch_actor(
Ok(actor)
}
pub async fn fetch_actor_avatar(
pub async fn fetch_actor_images(
actor: &Actor,
media_dir: &Path,
default: Option<String>,
) -> Option<String> {
match &actor.icon {
Some(icon) => {
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,
}
}
pub async fn fetch_actor_banner(
actor: &Actor,
media_dir: &Path,
default: Option<String>,
) -> Option<String> {
match &actor.image {
Some(image) => {
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,
}
default_avatar: Option<String>,
default_banner: Option<String>,
) -> (Option<String>, Option<String>) {
let maybe_avatar = if let Some(icon) = &actor.icon {
match fetch_file(&icon.url, media_dir).await {
Ok((file_name, _)) => Some(file_name),
Err(error) => {
log::warn!("failed to fetch avatar ({})", error);
default_avatar
},
}
} else {
None
};
let maybe_banner = if let Some(image) = &actor.image {
match fetch_file(&image.url, media_dir).await {
Ok((file_name, _)) => Some(file_name),
Err(error) => {
log::warn!("failed to fetch banner ({})", error);
default_banner
},
}
} else {
None
};
(maybe_avatar, maybe_banner)
}
pub async fn fetch_object(

View file

@ -25,8 +25,7 @@ use crate::models::profiles::queries::{
use crate::models::profiles::types::{DbActorProfile, ProfileCreateData};
use super::fetchers::{
fetch_actor,
fetch_actor_avatar,
fetch_actor_banner,
fetch_actor_images,
fetch_object,
perform_webfinger_query,
FetchError,
@ -70,8 +69,12 @@ async fn create_remote_profile(
if actor_address.is_local(&instance.host()) {
return Err(ImportError::LocalObject);
};
let avatar = fetch_actor_avatar(&actor, media_dir, None).await;
let banner = fetch_actor_banner(&actor, media_dir, None).await;
let (maybe_avatar, maybe_banner) = fetch_actor_images(
&actor,
media_dir,
None,
None,
).await;
let (identity_proofs, payment_options, extra_fields) =
actor.parse_attachments();
let mut profile_data = ProfileCreateData {
@ -79,8 +82,8 @@ async fn create_remote_profile(
hostname: Some(actor_address.hostname),
display_name: actor.name.clone(),
bio: actor.summary.clone(),
avatar,
banner,
avatar: maybe_avatar,
banner: maybe_banner,
identity_proofs,
payment_options,
extra_fields,

View file

@ -5,7 +5,7 @@ use tokio_postgres::GenericClient;
use crate::activitypub::{
activity::Activity,
actors::types::Actor,
fetcher::fetchers::{fetch_actor_avatar, fetch_actor_banner},
fetcher::fetchers::fetch_actor_images,
fetcher::helpers::ImportError,
vocabulary::PERSON,
};
@ -57,16 +57,20 @@ pub async fn update_remote_profile(
actor.public_key.public_key_pem,
);
};
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 (maybe_avatar, maybe_banner) = fetch_actor_images(
&actor,
media_dir,
profile.avatar_file_name,
profile.banner_file_name,
).await;
let (identity_proofs, payment_options, extra_fields) =
actor.parse_attachments();
let mut profile_data = ProfileUpdateData {
display_name: actor.name.clone(),
bio: actor.summary.clone(),
bio_source: actor.summary.clone(),
avatar,
banner,
avatar: maybe_avatar,
banner: maybe_banner,
identity_proofs,
payment_options,
extra_fields,