forked from AkkomaGang/akkoma
Merge branch 'feature/funkwhale-audio' into 'develop'
Add support for funkwhale Audio activity Closes #764 and #1624 See merge request pleroma/pleroma!2287
This commit is contained in:
parent
01a3f145d5
commit
b0a9a02af3
7 changed files with 124 additions and 4 deletions
|
@ -229,7 +229,8 @@ def fix_url(%{"url" => url} = object) when is_map(url) do
|
||||||
Map.put(object, "url", url["href"])
|
Map.put(object, "url", url["href"])
|
||||||
end
|
end
|
||||||
|
|
||||||
def fix_url(%{"type" => "Video", "url" => url} = object) when is_list(url) do
|
def fix_url(%{"type" => object_type, "url" => url} = object)
|
||||||
|
when object_type in ["Video", "Audio"] and is_list(url) do
|
||||||
first_element = Enum.at(url, 0)
|
first_element = Enum.at(url, 0)
|
||||||
|
|
||||||
link_element = Enum.find(url, fn x -> is_map(x) and x["mimeType"] == "text/html" end)
|
link_element = Enum.find(url, fn x -> is_map(x) and x["mimeType"] == "text/html" end)
|
||||||
|
@ -398,7 +399,7 @@ def handle_incoming(
|
||||||
%{"type" => "Create", "object" => %{"type" => objtype} = object} = data,
|
%{"type" => "Create", "object" => %{"type" => objtype} = object} = data,
|
||||||
options
|
options
|
||||||
)
|
)
|
||||||
when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer"] do
|
when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer", "Audio"] do
|
||||||
actor = Containment.get_actor(data)
|
actor = Containment.get_actor(data)
|
||||||
|
|
||||||
data =
|
data =
|
||||||
|
|
|
@ -421,7 +421,7 @@ def get_reply_to(%{data: %{"object" => _object}} = activity, _) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_content(%{data: %{"type" => object_type}} = object)
|
def render_content(%{data: %{"type" => object_type}} = object)
|
||||||
when object_type in ["Video", "Event"] do
|
when object_type in ["Video", "Event", "Audio"] do
|
||||||
with name when not is_nil(name) and name != "" <- object.data["name"] do
|
with name when not is_nil(name) and name != "" <- object.data["name"] do
|
||||||
"<p><a href=\"#{object.data["id"]}\">#{name}</a></p>#{object.data["content"]}"
|
"<p><a href=\"#{object.data["id"]}\">#{name}</a></p>#{object.data["content"]}"
|
||||||
else
|
else
|
||||||
|
|
44
test/fixtures/tesla_mock/funkwhale_audio.json
vendored
Normal file
44
test/fixtures/tesla_mock/funkwhale_audio.json
vendored
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"id": "https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871",
|
||||||
|
"type": "Audio",
|
||||||
|
"name": "Compositions - Test Audio for Pleroma",
|
||||||
|
"attributedTo": "https://channels.tests.funkwhale.audio/federation/actors/compositions",
|
||||||
|
"published": "2020-03-11T10:01:52.714918+00:00",
|
||||||
|
"to": "https://www.w3.org/ns/activitystreams#Public",
|
||||||
|
"url": [
|
||||||
|
{
|
||||||
|
"type": "Link",
|
||||||
|
"mimeType": "audio/ogg",
|
||||||
|
"href": "https://channels.tests.funkwhale.audio/api/v1/listen/3901e5d8-0445-49d5-9711-e096cf32e515/?upload=42342395-0208-4fee-a38d-259a6dae0871&download=false"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Link",
|
||||||
|
"mimeType": "text/html",
|
||||||
|
"href": "https://channels.tests.funkwhale.audio/library/tracks/74"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"content": "<p>This is a test Audio for Pleroma.</p>",
|
||||||
|
"mediaType": "text/html",
|
||||||
|
"tag": [
|
||||||
|
{
|
||||||
|
"type": "Hashtag",
|
||||||
|
"name": "#funkwhale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Hashtag",
|
||||||
|
"name": "#test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Hashtag",
|
||||||
|
"name": "#tests"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"summary": "#funkwhale #test #tests",
|
||||||
|
"@context": [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1",
|
||||||
|
{
|
||||||
|
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
44
test/fixtures/tesla_mock/funkwhale_channel.json
vendored
Normal file
44
test/fixtures/tesla_mock/funkwhale_channel.json
vendored
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"id": "https://channels.tests.funkwhale.audio/federation/actors/compositions",
|
||||||
|
"outbox": "https://channels.tests.funkwhale.audio/federation/actors/compositions/outbox",
|
||||||
|
"inbox": "https://channels.tests.funkwhale.audio/federation/actors/compositions/inbox",
|
||||||
|
"preferredUsername": "compositions",
|
||||||
|
"type": "Person",
|
||||||
|
"name": "Compositions",
|
||||||
|
"followers": "https://channels.tests.funkwhale.audio/federation/actors/compositions/followers",
|
||||||
|
"following": "https://channels.tests.funkwhale.audio/federation/actors/compositions/following",
|
||||||
|
"manuallyApprovesFollowers": false,
|
||||||
|
"url": [
|
||||||
|
{
|
||||||
|
"type": "Link",
|
||||||
|
"href": "https://channels.tests.funkwhale.audio/channels/compositions",
|
||||||
|
"mediaType": "text/html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Link",
|
||||||
|
"href": "https://channels.tests.funkwhale.audio/api/v1/channels/compositions/rss",
|
||||||
|
"mediaType": "application/rss+xml"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"type": "Image",
|
||||||
|
"url": "https://channels.tests.funkwhale.audio/media/attachments/75/b4/f1/nosmile.jpeg",
|
||||||
|
"mediaType": "image/jpeg"
|
||||||
|
},
|
||||||
|
"summary": "<p>I'm testing federation with the fediverse :)</p>",
|
||||||
|
"@context": [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1",
|
||||||
|
{
|
||||||
|
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicKey": {
|
||||||
|
"owner": "https://channels.tests.funkwhale.audio/federation/actors/compositions",
|
||||||
|
"publicKeyPem": "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAv25u57oZfVLV3KltS+HcsdSx9Op4MmzIes1J8Wu8s0KbdXf2zEwS\nsVqyHgs/XCbnzsR3FqyJTo46D2BVnvZcuU5srNcR2I2HMaqQ0oVdnATE4K6KdcgV\nN+98pMWo56B8LTgE1VpvqbsrXLi9jCTzjrkebVMOP+ZVu+64v1qdgddseblYMnBZ\nct0s7ONbHnqrWlTGf5wES1uIZTVdn5r4MduZG+Uenfi1opBS0lUUxfWdW9r0oF2b\nyneZUyaUCbEroeKbqsweXCWVgnMarUOsgqC42KM4cf95lySSwTSaUtZYIbTw7s9W\n2jveU/rVg8BYZu5JK5obgBoxtlUeUoSswwIDAQAB\n-----END RSA PUBLIC KEY-----\n",
|
||||||
|
"id": "https://channels.tests.funkwhale.audio/federation/actors/compositions#main-key"
|
||||||
|
},
|
||||||
|
"endpoints": {
|
||||||
|
"sharedInbox": "https://channels.tests.funkwhale.audio/federation/shared/inbox"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1273,6 +1273,21 @@ def get("https://patch.cx/users/rin", _, _, _) do
|
||||||
{:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/rin.json")}}
|
{:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/rin.json")}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get(
|
||||||
|
"https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871",
|
||||||
|
_,
|
||||||
|
_,
|
||||||
|
_
|
||||||
|
) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_audio.json")}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get("https://channels.tests.funkwhale.audio/federation/actors/compositions", _, _, _) do
|
||||||
|
{:ok,
|
||||||
|
%Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/funkwhale_channel.json")}}
|
||||||
|
end
|
||||||
|
|
||||||
def get("http://example.com/rel_me/error", _, _, _) do
|
def get("http://example.com/rel_me/error", _, _, _) do
|
||||||
{:ok, %Tesla.Env{status: 404, body: ""}}
|
{:ok, %Tesla.Env{status: 404, body: ""}}
|
||||||
end
|
end
|
||||||
|
|
|
@ -420,6 +420,22 @@ test "a peertube video" do
|
||||||
assert length(represented[:media_attachments]) == 1
|
assert length(represented[:media_attachments]) == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "funkwhale audio" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, object} =
|
||||||
|
Pleroma.Object.Fetcher.fetch_object_from_id(
|
||||||
|
"https://channels.tests.funkwhale.audio/federation/music/uploads/42342395-0208-4fee-a38d-259a6dae0871"
|
||||||
|
)
|
||||||
|
|
||||||
|
%Activity{} = activity = Activity.get_create_by_object_ap_id(object.data["id"])
|
||||||
|
|
||||||
|
represented = StatusView.render("show.json", %{for: user, activity: activity})
|
||||||
|
|
||||||
|
assert represented[:id] == to_string(activity.id)
|
||||||
|
assert length(represented[:media_attachments]) == 1
|
||||||
|
end
|
||||||
|
|
||||||
test "a Mobilizon event" do
|
test "a Mobilizon event" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
|
|
|
@ -581,7 +581,7 @@ test "redirects with oauth authorization, " <>
|
||||||
# In case scope param is missing, expecting _all_ app-supported scopes to be granted
|
# In case scope param is missing, expecting _all_ app-supported scopes to be granted
|
||||||
for user <- [non_admin, admin],
|
for user <- [non_admin, admin],
|
||||||
{requested_scopes, expected_scopes} <-
|
{requested_scopes, expected_scopes} <-
|
||||||
%{scopes_subset => scopes_subset, nil => app_scopes} do
|
%{scopes_subset => scopes_subset, nil: app_scopes} do
|
||||||
conn =
|
conn =
|
||||||
post(
|
post(
|
||||||
build_conn(),
|
build_conn(),
|
||||||
|
|
Loading…
Reference in a new issue