diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f279ac..1543d12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - Ignore errors when importing activities from outbox. +- Make activity limit in outbox fetcher adjustable. ## [1.21.0] - 2023-04-12 diff --git a/mitra-cli/src/cli.rs b/mitra-cli/src/cli.rs index e80483d..a946a9c 100644 --- a/mitra-cli/src/cli.rs +++ b/mitra-cli/src/cli.rs @@ -283,6 +283,8 @@ impl RefetchActor { #[derive(Parser)] pub struct ReadOutbox { actor_id: String, + #[clap(long, default_value_t = 5)] + limit: usize, } impl ReadOutbox { @@ -295,6 +297,7 @@ impl ReadOutbox { config, db_client, &self.actor_id, + self.limit, ).await?; Ok(()) } diff --git a/src/activitypub/fetcher/fetchers.rs b/src/activitypub/fetcher/fetchers.rs index 9da8afd..d4858a6 100644 --- a/src/activitypub/fetcher/fetchers.rs +++ b/src/activitypub/fetcher/fetchers.rs @@ -228,11 +228,10 @@ pub async fn fetch_object( Ok(object) } -const OUTBOX_PAGE_SIZE_LIMIT: usize = 5; - pub async fn fetch_outbox( instance: &Instance, outbox_url: &str, + limit: usize, ) -> Result, FetchError> { #[derive(Deserialize)] struct Collection { @@ -248,6 +247,6 @@ pub async fn fetch_outbox( let page_json = send_request(instance, &collection.first).await?; let page: CollectionPage = serde_json::from_str(&page_json)?; let activities = page.ordered_items.into_iter() - .take(OUTBOX_PAGE_SIZE_LIMIT).collect(); + .take(limit).collect(); Ok(activities) } diff --git a/src/activitypub/fetcher/helpers.rs b/src/activitypub/fetcher/helpers.rs index c600ce5..416bdf6 100644 --- a/src/activitypub/fetcher/helpers.rs +++ b/src/activitypub/fetcher/helpers.rs @@ -307,10 +307,11 @@ pub async fn import_from_outbox( config: &Config, db_client: &mut impl DatabaseClient, actor_id: &str, + limit: usize, ) -> Result<(), HandlerError> { let instance = config.instance(); let actor = fetch_actor(&instance, actor_id).await?; - let activities = fetch_outbox(&instance, &actor.outbox).await?; + let activities = fetch_outbox(&instance, &actor.outbox, limit).await?; log::info!("fetched {} activities", activities.len()); for activity in activities { let activity_actor = activity["actor"].as_str()