mirror of https://github.com/LemmyNet/lemmy.git
Add `published` field to outgoing activities (ref #4529)
parent
2fd81067c7
commit
1d5b474c05
|
@ -2633,6 +2633,7 @@ version = "0.19.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"activitypub_federation",
|
"activitypub_federation",
|
||||||
"actix-web",
|
"actix-web",
|
||||||
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
"encoding",
|
"encoding",
|
||||||
"enum-map",
|
"enum-map",
|
||||||
|
@ -2645,6 +2646,7 @@ dependencies = [
|
||||||
"lemmy_db_views_moderator",
|
"lemmy_db_views_moderator",
|
||||||
"lemmy_utils",
|
"lemmy_utils",
|
||||||
"mime",
|
"mime",
|
||||||
|
"moka",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"pretty_assertions",
|
"pretty_assertions",
|
||||||
"regex",
|
"regex",
|
||||||
|
|
|
@ -30,6 +30,7 @@ use activitypub_federation::{
|
||||||
traits::{ActivityHandler, Actor},
|
traits::{ActivityHandler, Actor},
|
||||||
};
|
};
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
|
use chrono::{DateTime, Local, Utc};
|
||||||
use lemmy_api_common::{
|
use lemmy_api_common::{
|
||||||
context::LemmyContext,
|
context::LemmyContext,
|
||||||
send_activity::{ActivityChannel, SendActivityData},
|
send_activity::{ActivityChannel, SendActivityData},
|
||||||
|
@ -204,8 +205,9 @@ where
|
||||||
{
|
{
|
||||||
info!("Saving outgoing activity to queue {}", activity.id());
|
info!("Saving outgoing activity to queue {}", activity.id());
|
||||||
|
|
||||||
|
let activity = WithPublished::new(activity);
|
||||||
let form = SentActivityForm {
|
let form = SentActivityForm {
|
||||||
ap_id: activity.id().clone().into(),
|
ap_id: activity.inner.id().clone().into(),
|
||||||
data: serde_json::to_value(activity)?,
|
data: serde_json::to_value(activity)?,
|
||||||
sensitive,
|
sensitive,
|
||||||
send_inboxes: send_targets
|
send_inboxes: send_targets
|
||||||
|
@ -223,6 +225,24 @@ where
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Wrapper struct that adds `published` field with timestamp to outgoing activities. Important that
|
||||||
|
/// the timestamp includes milliseconds and timezone.
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct WithPublished<T> {
|
||||||
|
published: DateTime<Utc>,
|
||||||
|
#[serde(flatten)]
|
||||||
|
inner: T,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> WithPublished<T> {
|
||||||
|
pub fn new(inner: T) -> WithPublished<T> {
|
||||||
|
Self {
|
||||||
|
published: Local::now().into(),
|
||||||
|
inner,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn handle_outgoing_activities(context: Data<LemmyContext>) {
|
pub async fn handle_outgoing_activities(context: Data<LemmyContext>) {
|
||||||
while let Some(data) = ActivityChannel::retrieve_activity().await {
|
while let Some(data) = ActivityChannel::retrieve_activity().await {
|
||||||
if let Err(e) = match_outgoing_activities(data, &context.reset_request_count()).await {
|
if let Err(e) = match_outgoing_activities(data, &context.reset_request_count()).await {
|
||||||
|
|
Loading…
Reference in New Issue