2019-10-07 14:20:41 +02:00
|
|
|
# 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 07:23:24 +01:00
|
|
|
alias Pleroma.Formatter
|
2019-10-07 14:20:41 +02:00
|
|
|
alias Pleroma.Object
|
|
|
|
alias Pleroma.User
|
|
|
|
alias Pleroma.Web.MediaProxy
|
|
|
|
|
|
|
|
require Pleroma.Constants
|
|
|
|
|
2019-12-17 20:13:45 +01: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}")
|
|
|
|
|
2019-11-08 07:23:24 +01:00
|
|
|
def prepare_activity(activity) do
|
|
|
|
object = activity_object(activity)
|
|
|
|
|
|
|
|
%{
|
|
|
|
activity: activity,
|
|
|
|
data: Map.get(object, :data),
|
|
|
|
object: object
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2019-10-07 14:20:41 +02:00
|
|
|
def most_recent_update(activities, user) do
|
|
|
|
(List.first(activities) || user).updated_at
|
|
|
|
|> NaiveDateTime.to_iso8601()
|
|
|
|
end
|
|
|
|
|
2019-12-17 20:13:45 +01: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
|
|
|
|
|
2019-10-07 14:20:41 +02:00
|
|
|
def logo(user) do
|
|
|
|
user
|
|
|
|
|> User.avatar_url()
|
|
|
|
|> MediaProxy.url()
|
|
|
|
end
|
|
|
|
|
2019-11-08 07:23:24 +01:00
|
|
|
def last_activity(activities), do: List.last(activities)
|
2019-10-07 14:20:41 +02:00
|
|
|
|
2019-11-08 07:23:24 +01:00
|
|
|
def activity_object(activity), do: Object.normalize(activity)
|
2019-10-07 14:20:41 +02:00
|
|
|
|
2019-11-08 07:23:24 +01:00
|
|
|
def activity_title(%{data: %{"content" => content}}, opts \\ %{}) do
|
|
|
|
content
|
2019-12-17 20:13:45 +01:00
|
|
|
|> Pleroma.Web.Metadata.Utils.scrub_html()
|
|
|
|
|> Pleroma.Emoji.Formatter.demojify()
|
2019-11-08 07:23:24 +01:00
|
|
|
|> Formatter.truncate(opts[:max_length], opts[:omission])
|
|
|
|
|> escape()
|
2019-10-07 14:20:41 +02:00
|
|
|
end
|
|
|
|
|
2019-11-08 07:23:24 +01:00
|
|
|
def activity_content(%{data: %{"content" => content}}) do
|
2019-10-07 14:20:41 +02:00
|
|
|
content
|
|
|
|
|> String.replace(~r/[\n\r]/, "")
|
|
|
|
|> escape()
|
|
|
|
end
|
|
|
|
|
2019-12-17 20:13:45 +01:00
|
|
|
def activity_content(_), do: ""
|
|
|
|
|
2019-11-08 07:23:24 +01:00
|
|
|
def activity_context(activity), do: activity.data["context"]
|
2019-10-07 14:20:41 +02:00
|
|
|
|
|
|
|
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
|