forked from AkkomaGang/akkoma
Merge branch 'bugfix/trans_fix_url_videos' into 'develop'
Fix "url" of Videos in transmogrifier Closes #367 See merge request pleroma/pleroma!459
This commit is contained in:
commit
005b4194ff
7 changed files with 97 additions and 14 deletions
|
@ -69,8 +69,8 @@ def contain_origin_from_id(id, %{"id" => other_id} = _params) do
|
||||||
def fix_object(object) do
|
def fix_object(object) do
|
||||||
object
|
object
|
||||||
|> fix_actor
|
|> fix_actor
|
||||||
|> fix_attachments
|
|
||||||
|> fix_url
|
|> fix_url
|
||||||
|
|> fix_attachments
|
||||||
|> fix_context
|
|> fix_context
|
||||||
|> fix_in_reply_to
|
|> fix_in_reply_to
|
||||||
|> fix_emoji
|
|> fix_emoji
|
||||||
|
@ -170,8 +170,14 @@ def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachm
|
||||||
attachments =
|
attachments =
|
||||||
attachment
|
attachment
|
||||||
|> Enum.map(fn data ->
|
|> Enum.map(fn data ->
|
||||||
url = [%{"type" => "Link", "mediaType" => data["mediaType"], "href" => data["url"]}]
|
media_type = data["mediaType"] || data["mimeType"]
|
||||||
Map.put(data, "url", url)
|
href = data["url"] || data["href"]
|
||||||
|
|
||||||
|
url = [%{"type" => "Link", "mediaType" => media_type, "href" => href}]
|
||||||
|
|
||||||
|
data
|
||||||
|
|> Map.put("mediaType", media_type)
|
||||||
|
|> Map.put("url", url)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
object
|
object
|
||||||
|
@ -190,7 +196,22 @@ def fix_url(%{"url" => url} = object) when is_map(url) do
|
||||||
|> Map.put("url", url["href"])
|
|> Map.put("url", url["href"])
|
||||||
end
|
end
|
||||||
|
|
||||||
def fix_url(%{"url" => url} = object) when is_list(url) do
|
def fix_url(%{"type" => "Video", "url" => url} = object) when is_list(url) do
|
||||||
|
first_element = Enum.at(url, 0)
|
||||||
|
|
||||||
|
link_element =
|
||||||
|
url
|
||||||
|
|> Enum.filter(fn x -> is_map(x) end)
|
||||||
|
|> Enum.filter(fn x -> x["mimeType"] == "text/html" end)
|
||||||
|
|> Enum.at(0)
|
||||||
|
|
||||||
|
object
|
||||||
|
|> Map.put("attachment", [first_element])
|
||||||
|
|> Map.put("url", link_element["href"])
|
||||||
|
end
|
||||||
|
|
||||||
|
def fix_url(%{"type" => object_type, "url" => url} = object)
|
||||||
|
when object_type != "Video" and is_list(url) do
|
||||||
first_element = Enum.at(url, 0)
|
first_element = Enum.at(url, 0)
|
||||||
|
|
||||||
url_string =
|
url_string =
|
||||||
|
|
|
@ -106,7 +106,6 @@ def render("status.json", %{activity: %{data: %{"object" => object}} = activity}
|
||||||
favorited = opts[:for] && opts[:for].ap_id in (object["likes"] || [])
|
favorited = opts[:for] && opts[:for].ap_id in (object["likes"] || [])
|
||||||
|
|
||||||
attachment_data = object["attachment"] || []
|
attachment_data = object["attachment"] || []
|
||||||
attachment_data = attachment_data ++ if object["type"] == "Video", do: [object], else: []
|
|
||||||
attachments = render_many(attachment_data, StatusView, "attachment.json", as: :attachment)
|
attachments = render_many(attachment_data, StatusView, "attachment.json", as: :attachment)
|
||||||
|
|
||||||
created_at = Utils.to_masto_date(object["published"])
|
created_at = Utils.to_masto_date(object["published"])
|
||||||
|
|
|
@ -171,14 +171,7 @@ def to_map(
|
||||||
HTML.filter_tags(content, User.html_filter_policy(opts[:for]))
|
HTML.filter_tags(content, User.html_filter_policy(opts[:for]))
|
||||||
|> Formatter.emojify(object["emoji"])
|
|> Formatter.emojify(object["emoji"])
|
||||||
|
|
||||||
video =
|
attachments = object["attachment"] || []
|
||||||
if object["type"] == "Video" do
|
|
||||||
[object]
|
|
||||||
else
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
|
|
||||||
attachments = (object["attachment"] || []) ++ video
|
|
||||||
|
|
||||||
reply_parent = Activity.get_in_reply_to_activity(activity)
|
reply_parent = Activity.get_in_reply_to_activity(activity)
|
||||||
|
|
||||||
|
|
|
@ -303,7 +303,8 @@ def render_content(%{"type" => "Note"} = object) do
|
||||||
{summary, content}
|
{summary, content}
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_content(%{"type" => object_type} = object) when object_type in ["Article", "Page"] do
|
def render_content(%{"type" => object_type} = object)
|
||||||
|
when object_type in ["Article", "Page", "Video"] do
|
||||||
summary = object["name"] || object["summary"]
|
summary = object["name"] || object["summary"]
|
||||||
|
|
||||||
content =
|
content =
|
||||||
|
|
|
@ -684,6 +684,36 @@ test "it rejects activities without a valid ID" do
|
||||||
|
|
||||||
:error = Transmogrifier.handle_incoming(data)
|
:error = Transmogrifier.handle_incoming(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it remaps video URLs as attachments if necessary" do
|
||||||
|
{:ok, object} =
|
||||||
|
ActivityPub.fetch_object_from_id(
|
||||||
|
"https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3"
|
||||||
|
)
|
||||||
|
|
||||||
|
attachment = %{
|
||||||
|
"type" => "Link",
|
||||||
|
"mediaType" => "video/mp4",
|
||||||
|
"href" =>
|
||||||
|
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4",
|
||||||
|
"mimeType" => "video/mp4",
|
||||||
|
"size" => 5_015_880,
|
||||||
|
"url" => [
|
||||||
|
%{
|
||||||
|
"href" =>
|
||||||
|
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4",
|
||||||
|
"mediaType" => "video/mp4",
|
||||||
|
"type" => "Link"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"width" => 480
|
||||||
|
}
|
||||||
|
|
||||||
|
assert object.data["url"] ==
|
||||||
|
"https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3"
|
||||||
|
|
||||||
|
assert object.data["attachment"] == [attachment]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "prepare outgoing" do
|
describe "prepare outgoing" do
|
||||||
|
|
|
@ -5,6 +5,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web.OStatus
|
alias Pleroma.Web.OStatus
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
alias Pleroma.Activity
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
import Tesla.Mock
|
import Tesla.Mock
|
||||||
|
|
||||||
|
@ -157,6 +159,22 @@ test "a reblog" do
|
||||||
assert represented[:emojis] == []
|
assert represented[:emojis] == []
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "a peertube video" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, object} =
|
||||||
|
ActivityPub.fetch_object_from_id(
|
||||||
|
"https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3"
|
||||||
|
)
|
||||||
|
|
||||||
|
%Activity{} = activity = Activity.get_create_activity_by_object_ap_id(object.data["id"])
|
||||||
|
|
||||||
|
represented = StatusView.render("status.json", %{for: user, activity: activity})
|
||||||
|
|
||||||
|
assert represented[:id] == to_string(activity.id)
|
||||||
|
assert length(represented[:media_attachments]) == 1
|
||||||
|
end
|
||||||
|
|
||||||
describe "build_tags/1" do
|
describe "build_tags/1" do
|
||||||
test "it returns a a dictionary tags" do
|
test "it returns a a dictionary tags" do
|
||||||
object_tags = [
|
object_tags = [
|
||||||
|
|
|
@ -12,6 +12,13 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Tesla.Mock
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
import Mock
|
import Mock
|
||||||
|
|
||||||
test "a create activity with a html status" do
|
test "a create activity with a html status" do
|
||||||
|
@ -258,4 +265,18 @@ test "a delete activity" do
|
||||||
|
|
||||||
assert result == expected
|
assert result == expected
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "a peertube video" do
|
||||||
|
{:ok, object} =
|
||||||
|
ActivityPub.fetch_object_from_id(
|
||||||
|
"https://peertube.moe/videos/watch/df5f464b-be8d-46fb-ad81-2d4c2d1630e3"
|
||||||
|
)
|
||||||
|
|
||||||
|
%Activity{} = activity = Activity.get_create_activity_by_object_ap_id(object.data["id"])
|
||||||
|
|
||||||
|
result = ActivityView.render("activity.json", activity: activity)
|
||||||
|
|
||||||
|
assert length(result["attachments"]) == 1
|
||||||
|
assert result["summary"] == "Friday Night"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue