feat(ap): handle Undo(Like) inbound activity
This commit is contained in:
@@ -279,6 +279,20 @@ impl Activity for UndoActivity {
|
|||||||
tracing::info!(ap_id = %ap_id_str, "undo Add (watchlist remove)");
|
tracing::info!(ap_id = %ap_id_str, "undo Add (watchlist remove)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
"Like" => {
|
||||||
|
if let Some(obj_url_str) = self.object.get("object").and_then(|o| o.as_str())
|
||||||
|
&& let Ok(obj_url) = Url::parse(obj_url_str)
|
||||||
|
&& obj_url.host_str().unwrap_or("") == data.domain
|
||||||
|
{
|
||||||
|
data.object_handler
|
||||||
|
.on_unlike(&obj_url, self.actor.inner())
|
||||||
|
.await
|
||||||
|
.unwrap_or_else(|e| {
|
||||||
|
tracing::warn!(error = %e, "failed to process unlike");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
tracing::info!(actor = %self.actor.inner(), "received Undo(Like)");
|
||||||
|
}
|
||||||
other => {
|
other => {
|
||||||
tracing::debug!(kind = %other, "ignoring Undo of unknown activity type");
|
tracing::debug!(kind = %other, "ignoring Undo of unknown activity type");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ pub trait ApObjectHandler: Send + Sync {
|
|||||||
/// `actor_url` is the AP URL of the remote actor who sent the Announce.
|
/// `actor_url` is the AP URL of the remote actor who sent the Announce.
|
||||||
async fn on_announce_received(&self, object_url: &Url, actor_url: &Url) -> anyhow::Result<()>;
|
async fn on_announce_received(&self, object_url: &Url, actor_url: &Url) -> anyhow::Result<()>;
|
||||||
|
|
||||||
|
/// Called when a remote actor removes a Like from a local thought.
|
||||||
|
async fn on_unlike(&self, object_url: &Url, actor_url: &Url) -> anyhow::Result<()>;
|
||||||
|
|
||||||
/// Total number of locally-authored posts across all users.
|
/// Total number of locally-authored posts across all users.
|
||||||
async fn count_local_posts(&self) -> anyhow::Result<u64>;
|
async fn count_local_posts(&self) -> anyhow::Result<u64>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,6 +221,10 @@ impl ApObjectHandler for ThoughtsObjectHandler {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn on_unlike(&self, _object_url: &url::Url, _actor_url: &url::Url) -> anyhow::Result<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
async fn on_announce_received(&self, object_url: &Url, actor_url: &Url) -> Result<()> {
|
async fn on_announce_received(&self, object_url: &Url, actor_url: &Url) -> Result<()> {
|
||||||
let thought_uuid = object_url
|
let thought_uuid = object_url
|
||||||
.path()
|
.path()
|
||||||
|
|||||||
Reference in New Issue
Block a user