]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/activities/community/announce.rs
Adding unique constraint for activity ap_id. Fixes #1878 (#1935)
[lemmy.git] / crates / apub / src / activities / community / announce.rs
index 7db646bb21cb5de42b99e8a66d6caa515d7224d3..cc30a89f393185ba29b62346bb3c70c2b955eafd 100644 (file)
@@ -1,12 +1,12 @@
 use crate::{
   activities::{generate_activity_id, send_lemmy_activity, verify_activity, verify_is_public},
   activity_lists::AnnouncableActivities,
-  http::{is_activity_already_known, ActivityCommonFields},
+  http::ActivityCommonFields,
   insert_activity,
   objects::community::ApubCommunity,
   protocol::activities::{community::announce::AnnounceActivity, CreateOrUpdateType},
 };
-use activitystreams::{activity::kind::AnnounceType, public};
+use activitystreams_kinds::{activity::AnnounceType, public};
 use lemmy_apub_lib::{
   data::Data,
   object_id::ObjectId,
@@ -25,7 +25,7 @@ pub(crate) trait GetCommunity {
 }
 
 impl AnnounceActivity {
-  fn new(
+  pub(crate) fn new(
     object: AnnouncableActivities,
     community: &ApubCommunity,
     context: &LemmyContext,
@@ -101,13 +101,17 @@ impl ActivityHandler for AnnounceActivity {
     context: &Data<LemmyContext>,
     request_counter: &mut i32,
   ) -> Result<(), LemmyError> {
-    let object_value = serde_json::to_value(&self.object)?;
-    let object_data: ActivityCommonFields = serde_json::from_value(object_value.to_owned())?;
+    // TODO: this can probably be implemented in a cleaner way
+    match self.object {
+      // Dont insert these into activities table, as they are not activities.
+      AnnouncableActivities::Page(_) => {}
+      _ => {
+        let object_value = serde_json::to_value(&self.object)?;
+        let object_data: ActivityCommonFields = serde_json::from_value(object_value.to_owned())?;
 
-    if is_activity_already_known(context.pool(), &object_data.id).await? {
-      return Ok(());
+        insert_activity(&object_data.id, object_value, false, true, context.pool()).await?;
+      }
     }
-    insert_activity(&object_data.id, object_value, false, true, context.pool()).await?;
     self.object.receive(context, request_counter).await
   }
 }