Browse Source

Merge branch 'support/bugfix_272' into 'develop'

[#272] fix hashtags in api

See merge request pleroma/pleroma!510
tags/v0.9.9
lambda 5 years ago
parent
commit
ff10b9927b
2 changed files with 66 additions and 49 deletions
  1. +64
    -47
      lib/pleroma/web/mastodon_api/views/status_view.ex
  2. +2
    -2
      test/web/mastodon_api/status_view_test.exs

+ 64
- 47
lib/pleroma/web/mastodon_api/views/status_view.ex View File

@@ -1,18 +1,21 @@
defmodule Pleroma.Web.MastodonAPI.StatusView do
use Pleroma.Web, :view
alias Pleroma.Web.MastodonAPI.{AccountView, StatusView}
alias Pleroma.{User, Activity}

alias Pleroma.Activity
alias Pleroma.HTML
alias Pleroma.Repo
alias Pleroma.User
alias Pleroma.Web.CommonAPI.Utils
alias Pleroma.Web.MediaProxy
alias Pleroma.Repo
alias Pleroma.HTML
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MastodonAPI.StatusView

# TODO: Add cached version.
defp get_replied_to_activities(activities) do
activities
|> Enum.map(fn
%{data: %{"type" => "Create", "object" => %{"inReplyTo" => inReplyTo}}} ->
inReplyTo != "" && inReplyTo
%{data: %{"type" => "Create", "object" => %{"inReplyTo" => in_reply_to}}} ->
in_reply_to != "" && in_reply_to

_ ->
nil
@@ -28,8 +31,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
def render("index.json", opts) do
replied_to_activities = get_replied_to_activities(opts.activities)

render_many(
opts.activities,
opts.activities
|> render_many(
StatusView,
"status.json",
Map.put(opts, :replied_to_activities, replied_to_activities)
@@ -72,9 +75,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
sensitive: false,
spoiler_text: "",
visibility: "public",
media_attachments: [],
media_attachments: reblogged[:media_attachments] || [],
mentions: mentions,
tags: [],
tags: reblogged[:tags] || [],
application: %{
name: "Web",
website: nil
@@ -111,20 +114,9 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
reply_to = get_reply_to(activity, opts)
reply_to_user = reply_to && User.get_cached_by_ap_id(reply_to.data["actor"])

emojis =
(activity.data["object"]["emoji"] || [])
|> Enum.map(fn {name, url} ->
name = HTML.strip_tags(name)

url =
HTML.strip_tags(url)
|> MediaProxy.url()

%{shortcode: name, url: url, static_url: url, visible_in_picker: false}
end)

content =
render_content(object)
object
|> render_content()
|> HTML.filter_tags(User.html_filter_policy(opts[:for]))

%{
@@ -140,22 +132,21 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
reblogs_count: announcement_count,
replies_count: 0,
favourites_count: like_count,
reblogged: !!repeated,
favourited: !!favorited,
reblogged: present?(repeated),
favourited: present?(favorited),
muted: false,
sensitive: sensitive,
spoiler_text: object["summary"] || "",
visibility: get_visibility(object),
media_attachments: attachments |> Enum.take(4),
mentions: mentions,
# fix,
tags: [],
tags: tags,
application: %{
name: "Web",
website: nil
},
language: nil,
emojis: emojis
emojis: build_emojis(activity.data["object"]["emoji"])
}
end

@@ -224,30 +215,56 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
end

def render_content(%{"type" => "Video"} = object) do
name = object["name"]

content =
if !!name and name != "" do
"<p><a href=\"#{object["id"]}\">#{name}</a></p>#{object["content"]}"
else
object["content"] || ""
end
with name when not is_nil(name) and name != "" <- object["name"] do
"<p><a href=\"#{object["id"]}\">#{name}</a></p>#{object["content"]}"
else
_ -> object["content"] || ""
end
end

content
def render_content(%{"type" => object_type} = object)
when object_type in ["Article", "Page"] do
with summary when not is_nil(summary) and summary != "" <- object["name"],
url when is_bitstring(url) <- object["url"] do
"<p><a href=\"#{url}\">#{summary}</a></p>#{object["content"]}"
else
_ -> object["content"] || ""
end
end

def render_content(%{"type" => object_type} = object) when object_type in ["Article", "Page"] do
summary = object["name"]
def render_content(object), do: object["content"] || ""

content =
if !!summary and summary != "" and is_bitstring(object["url"]) do
"<p><a href=\"#{object["url"]}\">#{summary}</a></p>#{object["content"]}"
else
object["content"] || ""
end
@doc """
Builds list emojis.
Arguments: `nil` or list tuple of name and url.
Returns list emojis.

content
## Examples

iex> Pleroma.Web.MastodonAPI.StatusView.build_emojis([{"2hu", "corndog.png"}])
[%{shortcode: "2hu", static_url: "corndog.png", url: "corndog.png", visible_in_picker: false}]

"""
@spec build_emojis(nil | list(tuple())) :: list(map())
def build_emojis(nil), do: []

def build_emojis(emojis) do
emojis
|> Enum.map(fn {name, url} ->
name = HTML.strip_tags(name)

url =
url
|> HTML.strip_tags()
|> MediaProxy.url()

%{shortcode: name, url: url, static_url: url, visible_in_picker: false}
end)
end

def render_content(object), do: object["content"] || ""
defp present?(nil), do: false
defp present?(false), do: false
defp present?(_), do: true
end

+ 2
- 2
test/web/mastodon_api/status_view_test.exs View File

@@ -24,7 +24,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
note
|> Map.put(:data, data)

user = User.get_cached_by_ap_id(note.data["actor"])
User.get_cached_by_ap_id(note.data["actor"])

status = StatusView.render("status.json", %{activity: note})

@@ -62,7 +62,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
visibility: "public",
media_attachments: [],
mentions: [],
tags: [],
tags: note.data["object"]["tag"],
application: %{
name: "Web",
website: nil


Loading…
Cancel
Save