X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fmastodon_api%2Fmastodon_api_controller.ex;h=a60532b551b4264f75f46598dc71b937337b8f0c;hb=155a88430027045fd9de79d7000bb083869f167f;hp=86607e7af7fd27c83e60e7dbab7b0a645e9b1cf5;hpb=3f64379b1382f2e26cacd28da230c67bf68656a0;p=akkoma diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 86607e7af..a60532b55 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do use Pleroma.Web, :controller alias Pleroma.{Repo, Object, Activity, User, Notification, Stats} alias Pleroma.Web + alias Pleroma.HTML alias Pleroma.Web.MastodonAPI.{ StatusView, @@ -1322,29 +1323,29 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end end - defp status_first_external_url(content) do - content - |> Floki.filter_out("a.mention") - |> Floki.attribute("a", "href") - |> Enum.at(0) - end - - def status_card(conn, %{"id" => status_id}) do + def get_status_card(status_id) do with %Activity{} = activity <- Repo.get(Activity, status_id), true <- ActivityPub.is_public?(activity), - page_url <- status_first_external_url(activity.data["object"]["content"]), + %Object{} = object <- Object.normalize(activity.data["object"]), + page_url <- HTML.extract_first_external_url(object, object.data["content"]), {:ok, rich_media} <- Pleroma.Web.RichMedia.Parser.parse(page_url) do - card = - rich_media - |> Map.take([:image, :title, :url, :description]) - |> Map.put(:type, "link") - - json(conn, card) + page_url = rich_media[:url] || page_url + site_name = rich_media[:site_name] || URI.parse(page_url).host + + rich_media + |> Map.take([:image, :title, :description]) + |> Map.put(:type, "link") + |> Map.put(:provider_name, site_name) + |> Map.put(:url, page_url) else - _ -> json(conn, %{}) + _ -> %{} end end + def status_card(conn, %{"id" => status_id}) do + json(conn, get_status_card(status_id)) + end + def try_render(conn, target, params) when is_binary(target) do res = render(conn, target, params)