X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fostatus%2Ffeed_representer.ex;h=025d4731cf0dc7067814310d7d39cc23096197c3;hb=6c8d15da110e86f799052c82df8b7b2404f8f722;hp=08710f24697887402ce131216a0cc2894354cd55;hpb=30e9b22f96f2bf1cd895e993190f40afba159bb6;p=akkoma diff --git a/lib/pleroma/web/ostatus/feed_representer.ex b/lib/pleroma/web/ostatus/feed_representer.ex index 08710f246..025d4731c 100644 --- a/lib/pleroma/web/ostatus/feed_representer.ex +++ b/lib/pleroma/web/ostatus/feed_representer.ex @@ -1,35 +1,66 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + defmodule Pleroma.Web.OStatus.FeedRepresenter do + alias Pleroma.User alias Pleroma.Web.OStatus - alias Pleroma.Web.OStatus.{UserRepresenter, ActivityRepresenter} + alias Pleroma.Web.MediaProxy + alias Pleroma.Web.OStatus.ActivityRepresenter + alias Pleroma.Web.OStatus.UserRepresenter def to_simple_form(user, activities, _users) do - most_recent_update = (List.first(activities) || user).updated_at - |> NaiveDateTime.to_iso8601 + most_recent_update = + (List.first(activities) || user).updated_at + |> NaiveDateTime.to_iso8601() + + h = fn str -> [to_charlist(str)] end - h = fn(str) -> [to_charlist(str)] end + last_activity = List.last(activities) - entries = activities - |> Enum.map(fn(activity) -> - {:entry, ActivityRepresenter.to_simple_form(activity, user)} - end) - |> Enum.filter(fn ({_, form}) -> form end) + entries = + activities + |> Enum.map(fn activity -> + {:entry, ActivityRepresenter.to_simple_form(activity, user)} + end) + |> Enum.filter(fn {_, form} -> form end) - [{ - :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)}, - {:link, [rel: 'hub', href: h.(OStatus.pubsub_path(user))], []}, - {:link, [rel: 'salmon', href: h.(OStatus.salmon_path(user))], []}, - {:link, [rel: 'self', href: h.(OStatus.feed_path(user)), type: 'application/atom+xml'], []}, - {:author, UserRepresenter.to_simple_form(user)}, - ] ++ entries - }] + [ + { + :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: 'hub', href: h.(OStatus.pubsub_path(user))], []}, + {:link, [rel: 'salmon', href: h.(OStatus.salmon_path(user))], []}, + {: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 + } + ] end end