akkoma/lib/pleroma/web/ostatus/feed_representer.ex

65 lines
2 KiB
Elixir
Raw Normal View History

# Pleroma: A lightweight social networking server
2018-12-31 15:41:47 +00:00
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
2017-04-18 16:41:51 +00:00
defmodule Pleroma.Web.OStatus.FeedRepresenter do
2018-01-30 10:26:07 +00:00
alias Pleroma.User
2019-02-09 15:16:26 +00:00
alias Pleroma.Web.MediaProxy
alias Pleroma.Web.OStatus
2019-02-09 15:16:26 +00:00
alias Pleroma.Web.OStatus.ActivityRepresenter
alias Pleroma.Web.OStatus.UserRepresenter
2017-04-18 16:41:51 +00:00
2017-11-19 01:22:07 +00:00
def to_simple_form(user, activities, _users) do
2018-03-30 13:01:53 +00:00
most_recent_update =
(List.first(activities) || user).updated_at
|> NaiveDateTime.to_iso8601()
2017-04-18 16:41:51 +00:00
2018-03-30 13:01:53 +00:00
h = fn str -> [to_charlist(str)] end
2017-04-18 16:41:51 +00:00
last_activity = List.last(activities)
2018-03-30 13:01:53 +00:00
entries =
activities
|> Enum.map(fn activity ->
{:entry, ActivityRepresenter.to_simple_form(activity, user)}
end)
|> Enum.filter(fn {_, form} -> form end)
2017-04-20 08:16:06 +00:00
2018-03-30 13:01:53 +00:00
[
{
:feed,
[
xmlns: 'http://www.w3.org/2005/Atom',
"xmlns:thr": 'http://purl.org/syndication/thread/1.0',
"xmlns:activity": 'http://activitystrea.ms/spec/1.0/',
"xmlns:poco": 'http://portablecontacts.net/spec/1.0',
"xmlns:ostatus": 'http://ostatus.org/schema/1.0'
],
[
{:id, h.(OStatus.feed_path(user))},
{:title, ['#{user.nickname}\'s timeline']},
{:updated, h.(most_recent_update)},
{:logo, [to_charlist(User.avatar_url(user) |> MediaProxy.url())]},
{:link, [rel: 'self', href: h.(OStatus.feed_path(user)), type: 'application/atom+xml'],
[]},
{:author, UserRepresenter.to_simple_form(user)}
] ++
if last_activity do
[
{:link,
[
rel: 'next',
href:
to_charlist(OStatus.feed_path(user)) ++
'?max_id=' ++ to_charlist(last_activity.id),
type: 'application/atom+xml'
], []}
]
else
[]
end ++ entries
}
]
2017-04-18 16:41:51 +00:00
end
end