add tag feeds

This commit is contained in:
Maksim Pechnikov 2019-12-17 22:13:45 +03:00
commit b53573a837
9 changed files with 149 additions and 33 deletions

View file

@ -13,6 +13,15 @@ defmodule Pleroma.Web.Feed.FeedView do
require Pleroma.Constants
@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}")
def prepare_activity(activity) do
object = activity_object(activity)
@ -28,6 +37,17 @@ defmodule Pleroma.Web.Feed.FeedView do
|> NaiveDateTime.to_iso8601()
end
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()
@ -40,6 +60,8 @@ defmodule Pleroma.Web.Feed.FeedView do
def activity_title(%{data: %{"content" => content}}, opts \\ %{}) do
content
|> Pleroma.Web.Metadata.Utils.scrub_html()
|> Pleroma.Emoji.Formatter.demojify()
|> Formatter.truncate(opts[:max_length], opts[:omission])
|> escape()
end
@ -50,6 +72,8 @@ defmodule Pleroma.Web.Feed.FeedView do
|> escape()
end
def activity_content(_), do: ""
def activity_context(activity), do: activity.data["context"]
def attachment_href(attachment) do

View file

@ -9,20 +9,24 @@ defmodule Pleroma.Web.Feed.TagController do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.Feed.FeedView
def feed(conn, %{"tag" => tag} = params) do
import Pleroma.Web.ControllerHelper, only: [put_in_if_exist: 3]
def feed(conn, %{"tag" => raw_tag} = params) do
tag = parse_tag(raw_tag)
activities =
%{
"type" => ["Create"],
"whole_db" => true,
"tag" => parse_tag(tag)
}
|> Map.merge(Map.take(params, ["max_id"]))
%{"type" => ["Create"], "whole_db" => true, "tag" => tag}
|> put_in_if_exist("max_id", params["max_id"])
|> ActivityPub.fetch_public_activities()
conn
|> put_resp_content_type("application/atom+xml")
|> put_view(FeedView)
|> render("tag.xml", activities: activities, feed_config: Config.get([:feed]))
|> render("tag.xml",
activities: activities,
tag: tag,
feed_config: Config.get([:feed])
)
end
defp parse_tag(raw_tag) when is_binary(raw_tag) do

View file

@ -11,6 +11,8 @@ defmodule Pleroma.Web.Feed.UserController do
alias Pleroma.Web.ActivityPub.ActivityPubController
alias Pleroma.Web.Feed.FeedView
import Pleroma.Web.ControllerHelper, only: [put_in_if_exist: 3]
plug(Pleroma.Plugs.SetFormatPlug when action in [:feed_redirect])
action_fallback(:errors)
@ -35,12 +37,8 @@ defmodule Pleroma.Web.Feed.UserController do
def feed(conn, %{"nickname" => nickname} = params) do
with {_, %User{} = user} <- {:fetch_user, User.get_cached_by_nickname(nickname)} do
activities =
%{
"type" => ["Create"],
"whole_db" => true,
"actor_id" => user.ap_id
}
|> Map.merge(Map.take(params, ["max_id"]))
%{"type" => ["Create"], "whole_db" => true, "actor_id" => user.ap_id}
|> put_in_if_exist("max_id", params["max_id"])
|> ActivityPub.fetch_public_activities()
conn