From ce31f3a922cab93d13c50a2fcec0f383631a13d0 Mon Sep 17 00:00:00 2001 From: lain Date: Sun, 11 Feb 2018 17:21:06 +0100 Subject: [PATCH] Twitter Representers: Handle Mastodon attachments. --- .../representers/object_representer.ex | 16 +++++++++++++-- .../representers/object_representer_test.exs | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/twitter_api/representers/object_representer.ex b/lib/pleroma/web/twitter_api/representers/object_representer.ex index 69eaeb36c..e2d653ba8 100644 --- a/lib/pleroma/web/twitter_api/representers/object_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/object_representer.ex @@ -2,9 +2,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter do use Pleroma.Web.TwitterAPI.Representers.BaseRepresenter alias Pleroma.Object - def to_map(%Object{} = object, _opts) do + def to_map(%Object{data: %{"url" => [url | _]}} = object, _opts) do data = object.data - url = List.first(data["url"]) %{ url: url["href"] |> Pleroma.Web.MediaProxy.url(), mimetype: url["mediaType"], @@ -13,6 +12,19 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter do } end + def to_map(%Object{data: %{"url" => url} = data}, _opts) when is_binary(url) do + %{ + url: url |> Pleroma.Web.MediaProxy.url(), + mimetype: data["mediaType"], + id: data["uuid"], + oembed: false + } + end + + def to_map(%Object{}, _opts) do + %{} + end + # If we only get the naked data, wrap in an object def to_map(%{} = data, opts) do to_map(%Object{data: data}, opts) diff --git a/test/web/twitter_api/representers/object_representer_test.exs b/test/web/twitter_api/representers/object_representer_test.exs index 791b30237..ac8184407 100644 --- a/test/web/twitter_api/representers/object_representer_test.exs +++ b/test/web/twitter_api/representers/object_representer_test.exs @@ -28,4 +28,24 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectReprenterTest do assert expected_object == ObjectRepresenter.to_map(object) end + + test "represents mastodon-style attachments" do + object = %Object{ + id: nil, + data: %{ + "mediaType" => "image/png", + "name" => "blabla", "type" => "Document", + "url" => "http://mastodon.example.org/system/media_attachments/files/000/000/001/original/8619f31c6edec470.png" + } + } + + expected_object = %{ + url: "http://mastodon.example.org/system/media_attachments/files/000/000/001/original/8619f31c6edec470.png", + mimetype: "image/png", + oembed: false, + id: nil + } + + assert expected_object == ObjectRepresenter.to_map(object) + end end