akkoma/lib/pleroma/web/feed/feed_view.ex

117 lines
2.6 KiB
Elixir
Raw Normal View History

# Pleroma: A lightweight social networking server
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Feed.FeedView do
use Phoenix.HTML
use Pleroma.Web, :view
2019-11-08 06:23:24 +00:00
alias Pleroma.Formatter
alias Pleroma.Object
alias Pleroma.User
alias Pleroma.Web.MediaProxy
require Pleroma.Constants
2019-12-17 19:13:45 +00:00
@spec pub_date(String.t() | DateTime.t()) :: String.t()
def pub_date(date) when is_binary(date) do
date
|> Timex.parse!("{ISO:Extended}")
|> pub_date
end
def pub_date(%DateTime{} = date), do: Timex.format!(date, "{RFC822}")
2020-01-24 19:08:10 +00:00
def prepare_activity(activity, opts \\ []) do
2019-11-08 06:23:24 +00:00
object = activity_object(activity)
2020-01-24 19:08:10 +00:00
actor =
if opts[:actor] do
Pleroma.User.get_cached_by_ap_id(activity.actor)
end
2019-11-08 06:23:24 +00:00
%{
activity: activity,
data: Map.get(object, :data),
2020-01-24 19:08:10 +00:00
object: object,
actor: actor
2019-11-08 06:23:24 +00:00
}
end
2020-01-24 19:08:10 +00:00
def most_recent_update(activities) do
with %{updated_at: updated_at} <- List.first(activities) do
NaiveDateTime.to_iso8601(updated_at)
end
end
def most_recent_update(activities, user) do
(List.first(activities) || user).updated_at
|> NaiveDateTime.to_iso8601()
end
2019-12-17 19:13:45 +00:00
def feed_logo do
case Pleroma.Config.get([:feed, :logo]) do
nil ->
"#{Pleroma.Web.base_url()}/static/logo.png"
logo ->
"#{Pleroma.Web.base_url()}#{logo}"
end
|> MediaProxy.url()
end
def logo(user) do
user
|> User.avatar_url()
|> MediaProxy.url()
end
2019-11-08 06:23:24 +00:00
def last_activity(activities), do: List.last(activities)
2019-11-08 06:23:24 +00:00
def activity_object(activity), do: Object.normalize(activity)
2019-11-08 06:23:24 +00:00
def activity_title(%{data: %{"content" => content}}, opts \\ %{}) do
content
2019-12-17 19:13:45 +00:00
|> Pleroma.Web.Metadata.Utils.scrub_html()
|> Pleroma.Emoji.Formatter.demojify()
2019-11-08 06:23:24 +00:00
|> Formatter.truncate(opts[:max_length], opts[:omission])
|> escape()
end
2019-11-08 06:23:24 +00:00
def activity_content(%{data: %{"content" => content}}) do
content
|> String.replace(~r/[\n\r]/, "")
|> escape()
end
2019-12-17 19:13:45 +00:00
def activity_content(_), do: ""
2019-11-08 06:23:24 +00:00
def activity_context(activity), do: activity.data["context"]
def attachment_href(attachment) do
attachment["url"]
|> hd()
|> Map.get("href")
end
def attachment_type(attachment) do
attachment["url"]
|> hd()
|> Map.get("mediaType")
end
def get_href(id) do
with %Object{data: %{"external_url" => external_url}} <- Object.get_cached_by_ap_id(id) do
external_url
else
_e -> id
end
end
def escape(html) do
html
|> html_escape()
|> safe_to_string()
end
end