feat: enhance watchlist handling with entry discriminator and update broadcast methods
This commit is contained in:
@@ -36,9 +36,11 @@ impl ApObjectHandler for CompositeObjectHandler {
|
||||
actor_url: &Url,
|
||||
object: serde_json::Value,
|
||||
) -> anyhow::Result<()> {
|
||||
let is_watchlist = object.get("watchlistEntry").and_then(|v| v.as_bool()) == Some(true)
|
||||
|| (object.get("movieTitle").is_some() && object.get("rating").is_none());
|
||||
if object.get("rating").is_some() {
|
||||
self.review.on_create(ap_id, actor_url, object).await
|
||||
} else if object.get("movieTitle").is_some() {
|
||||
} else if is_watchlist {
|
||||
self.watchlist.on_create(ap_id, actor_url, object).await
|
||||
} else {
|
||||
tracing::debug!(ap_id = %ap_id, "ignoring Create for unknown object type");
|
||||
|
||||
@@ -214,7 +214,7 @@ impl ActivityPubEventHandler {
|
||||
let json = serde_json::to_value(obj)?;
|
||||
|
||||
self.ap_service
|
||||
.broadcast_add_to_followers(user_id.value(), ap_id, json)
|
||||
.broadcast_to_followers(user_id.value(), ap_id, json)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
@@ -227,7 +227,7 @@ impl ActivityPubEventHandler {
|
||||
use crate::urls::watchlist_entry_url;
|
||||
let ap_id = watchlist_entry_url(&self.base_url, user_id.value(), movie_id.value());
|
||||
self.ap_service
|
||||
.broadcast_undo_add_to_followers(user_id.value(), ap_id)
|
||||
.broadcast_delete_to_followers(user_id.value(), ap_id)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -115,6 +115,10 @@ pub struct WatchlistObject {
|
||||
pub(crate) poster_url: Option<String>,
|
||||
#[serde(default)]
|
||||
pub(crate) tag: Vec<ApHashtag>,
|
||||
/// Discriminator so Movies Diary instances distinguish this from a review Note.
|
||||
/// Non-Movies-Diary apps ignore unknown fields.
|
||||
#[serde(default)]
|
||||
pub(crate) watchlist_entry: bool,
|
||||
}
|
||||
|
||||
pub fn watchlist_to_ap_object(
|
||||
@@ -160,6 +164,7 @@ pub fn watchlist_to_ap_object(
|
||||
external_metadata_id,
|
||||
poster_url,
|
||||
tag,
|
||||
watchlist_entry: true,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user