activitypub: transmogrifier: implement support for Listen activities
This commit is contained in:
parent
1f9de2a8cd
commit
172c74a77b
|
@ -430,6 +430,36 @@ def handle_incoming(
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_incoming(
|
||||||
|
%{"type" => "Listen", "object" => %{"type" => "Audio"} = object} = data,
|
||||||
|
options
|
||||||
|
) do
|
||||||
|
actor = Containment.get_actor(data)
|
||||||
|
|
||||||
|
data =
|
||||||
|
Map.put(data, "actor", actor)
|
||||||
|
|> fix_addressing
|
||||||
|
|
||||||
|
with {:ok, %User{} = user} <- User.get_or_fetch_by_ap_id(data["actor"]) do
|
||||||
|
options = Keyword.put(options, :depth, (options[:depth] || 0) + 1)
|
||||||
|
object = fix_object(object, options)
|
||||||
|
|
||||||
|
params = %{
|
||||||
|
to: data["to"],
|
||||||
|
object: object,
|
||||||
|
actor: user,
|
||||||
|
context: nil,
|
||||||
|
local: false,
|
||||||
|
published: data["published"],
|
||||||
|
additional: Map.take(data, ["cc", "id"])
|
||||||
|
}
|
||||||
|
|
||||||
|
ActivityPub.listen(params)
|
||||||
|
else
|
||||||
|
_e -> :error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def handle_incoming(
|
def handle_incoming(
|
||||||
%{"type" => "Follow", "object" => followed, "actor" => follower, "id" => id} = data,
|
%{"type" => "Follow", "object" => followed, "actor" => follower, "id" => id} = data,
|
||||||
_options
|
_options
|
||||||
|
@ -765,7 +795,8 @@ def prepare_object(object) do
|
||||||
# internal -> Mastodon
|
# internal -> Mastodon
|
||||||
# """
|
# """
|
||||||
|
|
||||||
def prepare_outgoing(%{"type" => "Create", "object" => object_id} = data) do
|
def prepare_outgoing(%{"type" => activity_type, "object" => object_id} = data)
|
||||||
|
when activity_type in ["Create", "Listen"] do
|
||||||
object =
|
object =
|
||||||
object_id
|
object_id
|
||||||
|> Object.normalize()
|
|> Object.normalize()
|
||||||
|
|
|
@ -177,6 +177,35 @@ test "it works for incoming questions" do
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it works for incoming listens" do
|
||||||
|
data = %{
|
||||||
|
"@context" => "https://www.w3.org/ns/activitystreams",
|
||||||
|
"to" => ["https://www.w3.org/ns/activitystreams#Public"],
|
||||||
|
"cc" => [],
|
||||||
|
"type" => "Listen",
|
||||||
|
"id" => "http://mastodon.example.org/users/admin/listens/1234/activity",
|
||||||
|
"actor" => "http://mastodon.example.org/users/admin",
|
||||||
|
"object" => %{
|
||||||
|
"type" => "Audio",
|
||||||
|
"id" => "http://mastodon.example.org/users/admin/listens/1234",
|
||||||
|
"attributedTo" => "http://mastodon.example.org/users/admin",
|
||||||
|
"title" => "lain radio episode 1",
|
||||||
|
"artist" => "lain",
|
||||||
|
"album" => "lain radio",
|
||||||
|
"length" => 180_000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data)
|
||||||
|
|
||||||
|
object = Object.normalize(activity)
|
||||||
|
|
||||||
|
assert object.data["title"] == "lain radio episode 1"
|
||||||
|
assert object.data["artist"] == "lain"
|
||||||
|
assert object.data["album"] == "lain radio"
|
||||||
|
assert object.data["length"] == 180_000
|
||||||
|
end
|
||||||
|
|
||||||
test "it rewrites Note votes to Answers and increments vote counters on question activities" do
|
test "it rewrites Note votes to Answers and increments vote counters on question activities" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue