common api: implement scrobbling
This commit is contained in:
parent
172c74a77b
commit
2c82d8603b
2 changed files with 57 additions and 0 deletions
|
@ -212,6 +212,24 @@ defmodule Pleroma.Web.CommonAPI do
|
||||||
|> check_expiry_date()
|
|> check_expiry_date()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def listen(user, %{"title" => _} = data) do
|
||||||
|
with visibility <- data["visibility"] || "public",
|
||||||
|
{to, cc} <- get_to_and_cc(user, [], nil, visibility, nil),
|
||||||
|
listen_data <-
|
||||||
|
Map.take(data, ["album", "artist", "title", "length"])
|
||||||
|
|> Map.put("type", "Audio"),
|
||||||
|
{:ok, activity} <-
|
||||||
|
ActivityPub.listen(%{
|
||||||
|
actor: user,
|
||||||
|
to: to,
|
||||||
|
object: listen_data,
|
||||||
|
context: Utils.generate_context_id(),
|
||||||
|
additional: %{cc: cc}
|
||||||
|
}) do
|
||||||
|
{:ok, activity}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def post(user, %{"status" => _} = data) do
|
def post(user, %{"status" => _} = data) do
|
||||||
with {:ok, draft} <- Pleroma.Web.CommonAPI.ActivityDraft.create(user, data) do
|
with {:ok, draft} <- Pleroma.Web.CommonAPI.ActivityDraft.create(user, data) do
|
||||||
draft.changes
|
draft.changes
|
||||||
|
|
|
@ -510,4 +510,43 @@ defmodule Pleroma.Web.CommonAPITest do
|
||||||
assert {:error, "Already voted"} == CommonAPI.vote(other_user, object, [1])
|
assert {:error, "Already voted"} == CommonAPI.vote(other_user, object, [1])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "listen/2" do
|
||||||
|
test "returns a valid activity" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, activity} =
|
||||||
|
CommonAPI.listen(user, %{
|
||||||
|
"title" => "lain radio episode 1",
|
||||||
|
"album" => "lain radio",
|
||||||
|
"artist" => "lain",
|
||||||
|
"length" => 180_000
|
||||||
|
})
|
||||||
|
|
||||||
|
object = Object.normalize(activity)
|
||||||
|
|
||||||
|
assert object.data["title"] == "lain radio episode 1"
|
||||||
|
|
||||||
|
assert Visibility.get_visibility(activity) == "public"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "respects visibility=private" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, activity} =
|
||||||
|
CommonAPI.listen(user, %{
|
||||||
|
"title" => "lain radio episode 1",
|
||||||
|
"album" => "lain radio",
|
||||||
|
"artist" => "lain",
|
||||||
|
"length" => 180_000,
|
||||||
|
"visibility" => "private"
|
||||||
|
})
|
||||||
|
|
||||||
|
object = Object.normalize(activity)
|
||||||
|
|
||||||
|
assert object.data["title"] == "lain radio episode 1"
|
||||||
|
|
||||||
|
assert Visibility.get_visibility(activity) == "private"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue