84 lines
2.1 KiB
Elixir
84 lines
2.1 KiB
Elixir
defmodule NullaWeb.ActivityPub.FollowJSON do
|
|
def following(actor, total) do
|
|
Jason.OrderedObject.new(
|
|
"@context": "https://www.w3.org/ns/activitystreams",
|
|
id: "#{actor.ap_id}/following",
|
|
type: "OrderedCollection",
|
|
totalItems: total,
|
|
first: "#{actor.ap_id}/following?page=1"
|
|
)
|
|
end
|
|
|
|
def following(actor, total, following_list, page, limit) when is_integer(page) and page > 0 do
|
|
data = [
|
|
"@context": "https://www.w3.org/ns/activitystreams",
|
|
id: "#{actor.ap_id}/following?page=#{page}",
|
|
type: "OrderedCollectionPage",
|
|
totalItems: total,
|
|
next: "#{actor.ap_id}/following?page=#{page + 1}",
|
|
prev: "#{actor.ap_id}/following?page=#{page - 1}",
|
|
partOf: "#{actor.ap_id}/following",
|
|
orderedItems: following_list
|
|
]
|
|
|
|
data =
|
|
if page <= 1 do
|
|
Keyword.delete(data, :prev)
|
|
else
|
|
data
|
|
end
|
|
|
|
data =
|
|
if page * limit > total do
|
|
data
|
|
|> Keyword.delete(:next)
|
|
|> Keyword.delete(:prev)
|
|
else
|
|
data
|
|
end
|
|
|
|
Jason.OrderedObject.new(data)
|
|
end
|
|
|
|
def followers(actor, total) do
|
|
Jason.OrderedObject.new(
|
|
"@context": "https://www.w3.org/ns/activitystreams",
|
|
id: "#{actor.ap_id}/followers",
|
|
type: "OrderedCollection",
|
|
totalItems: total,
|
|
first: "#{actor.ap_id}/followers?page=1"
|
|
)
|
|
end
|
|
|
|
def followers(actor, total, followers_list, page, limit)
|
|
when is_integer(page) and page > 0 do
|
|
data = [
|
|
"@context": "https://www.w3.org/ns/activitystreams",
|
|
id: "#{actor.ap_id}/followers?page=#{page}",
|
|
type: "OrderedCollectionPage",
|
|
totalItems: total,
|
|
next: "#{actor.ap_id}/followers?page=#{page + 1}",
|
|
prev: "#{actor.ap_id}/followers?page=#{page - 1}",
|
|
partOf: "#{actor.ap_id}/followers",
|
|
orderedItems: followers_list
|
|
]
|
|
|
|
data =
|
|
if page <= 1 do
|
|
Keyword.delete(data, :prev)
|
|
else
|
|
data
|
|
end
|
|
|
|
data =
|
|
if page * limit > total do
|
|
data
|
|
|> Keyword.delete(:next)
|
|
|> Keyword.delete(:prev)
|
|
else
|
|
data
|
|
end
|
|
|
|
Jason.OrderedObject.new(data)
|
|
end
|
|
end
|