Expose remainingAttendeeCapacity and participantCount through AP
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
32ec220372
commit
976503cd29
@ -69,6 +69,7 @@ defmodule Mobilizon.Federation.ActivityPub.Utils do
|
|||||||
"category" => "sc:category",
|
"category" => "sc:category",
|
||||||
"uuid" => "sc:identifier",
|
"uuid" => "sc:identifier",
|
||||||
"maximumAttendeeCapacity" => "sc:maximumAttendeeCapacity",
|
"maximumAttendeeCapacity" => "sc:maximumAttendeeCapacity",
|
||||||
|
"remainingAttendeeCapacity" => "sc:remainingAttendeeCapacity",
|
||||||
"location" => %{
|
"location" => %{
|
||||||
"@id" => "sc:location",
|
"@id" => "sc:location",
|
||||||
"@type" => "sc:Place"
|
"@type" => "sc:Place"
|
||||||
@ -112,6 +113,10 @@ defmodule Mobilizon.Federation.ActivityPub.Utils do
|
|||||||
"@id" => "mz:participationMessage",
|
"@id" => "mz:participationMessage",
|
||||||
"@type" => "sc:Text"
|
"@type" => "sc:Text"
|
||||||
},
|
},
|
||||||
|
"participantCount" => %{
|
||||||
|
"@id" => "mz:participantCount",
|
||||||
|
"@type" => "sc:Integer"
|
||||||
|
},
|
||||||
"isOnline" => %{
|
"isOnline" => %{
|
||||||
"@type" => "sc:Boolean",
|
"@type" => "sc:Boolean",
|
||||||
"@id" => "mz:isOnline"
|
"@id" => "mz:isOnline"
|
||||||
|
@ -110,6 +110,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
|
|||||||
do: {[@ap_public], [event.organizer_actor.followers_url]},
|
do: {[@ap_public], [event.organizer_actor.followers_url]},
|
||||||
else: {[attributed_to_or_default(event).followers_url], [@ap_public]}
|
else: {[attributed_to_or_default(event).followers_url], [@ap_public]}
|
||||||
|
|
||||||
|
participant_count = Mobilizon.Events.count_participant_participants(event.id)
|
||||||
|
|
||||||
%{
|
%{
|
||||||
"type" => "Event",
|
"type" => "Event",
|
||||||
"to" => to,
|
"to" => to,
|
||||||
@ -129,6 +131,9 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
|
|||||||
"endTime" => event.ends_on |> shift_tz(event.options.timezone) |> date_to_string(),
|
"endTime" => event.ends_on |> shift_tz(event.options.timezone) |> date_to_string(),
|
||||||
"tag" => event.tags |> build_tags(),
|
"tag" => event.tags |> build_tags(),
|
||||||
"maximumAttendeeCapacity" => event.options.maximum_attendee_capacity,
|
"maximumAttendeeCapacity" => event.options.maximum_attendee_capacity,
|
||||||
|
"remainingAttendeeCapacity" =>
|
||||||
|
remaining_attendee_capacity(event.options, participant_count),
|
||||||
|
"participantCount" => participant_count,
|
||||||
"repliesModerationOption" => event.options.comment_moderation,
|
"repliesModerationOption" => event.options.comment_moderation,
|
||||||
"commentsEnabled" => event.options.comment_moderation == :allow_all,
|
"commentsEnabled" => event.options.comment_moderation == :allow_all,
|
||||||
"anonymousParticipationEnabled" => event.options.anonymous_participation,
|
"anonymousParticipationEnabled" => event.options.anonymous_participation,
|
||||||
@ -310,4 +315,19 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
|
|||||||
|> get_url()
|
|> get_url()
|
||||||
|> fetch_actor()
|
|> fetch_actor()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec remaining_attendee_capacity(map(), integer()) :: integer() | nil
|
||||||
|
defp remaining_attendee_capacity(
|
||||||
|
%{maximum_attendee_capacity: maximum_attendee_capacity},
|
||||||
|
participant_count
|
||||||
|
)
|
||||||
|
when is_integer(maximum_attendee_capacity) and maximum_attendee_capacity > 0 do
|
||||||
|
maximum_attendee_capacity - participant_count
|
||||||
|
end
|
||||||
|
|
||||||
|
defp remaining_attendee_capacity(
|
||||||
|
%{maximum_attendee_capacity: _},
|
||||||
|
_participant_count
|
||||||
|
),
|
||||||
|
do: nil
|
||||||
end
|
end
|
||||||
|
@ -53,6 +53,8 @@ defmodule Mobilizon.Web.JsonLD.ObjectView do
|
|||||||
organizer
|
organizer
|
||||||
end
|
end
|
||||||
|
|
||||||
|
participant_count = Mobilizon.Events.count_participant_participants(event.id)
|
||||||
|
|
||||||
json_ld = %{
|
json_ld = %{
|
||||||
"@context" => "https://schema.org",
|
"@context" => "https://schema.org",
|
||||||
"@type" => "Event",
|
"@type" => "Event",
|
||||||
@ -63,6 +65,9 @@ defmodule Mobilizon.Web.JsonLD.ObjectView do
|
|||||||
"organizer" => organizer,
|
"organizer" => organizer,
|
||||||
"location" => render_all_locations(event),
|
"location" => render_all_locations(event),
|
||||||
"eventAttendanceMode" => event |> attendance_mode() |> event_attendance_mode(),
|
"eventAttendanceMode" => event |> attendance_mode() |> event_attendance_mode(),
|
||||||
|
"maximumAttendeeCapacity" => event.options.maximum_attendee_capacity,
|
||||||
|
"remainingAttendeeCapacity" =>
|
||||||
|
remaining_attendee_capacity(event.options, participant_count),
|
||||||
"eventStatus" =>
|
"eventStatus" =>
|
||||||
if(event.status == :cancelled,
|
if(event.status == :cancelled,
|
||||||
do: "https://schema.org/EventCancelled",
|
do: "https://schema.org/EventCancelled",
|
||||||
@ -229,4 +234,20 @@ defmodule Mobilizon.Web.JsonLD.ObjectView do
|
|||||||
@spec virtual_location_links(list()) :: list()
|
@spec virtual_location_links(list()) :: list()
|
||||||
defp virtual_location_links(metadata),
|
defp virtual_location_links(metadata),
|
||||||
do: Enum.filter(metadata, &String.contains?(&1.key, @livestream_keys))
|
do: Enum.filter(metadata, &String.contains?(&1.key, @livestream_keys))
|
||||||
|
|
||||||
|
# TODO: Make this in common with Mobilizon.Federation.ActivityStream.Converter.Event
|
||||||
|
@spec remaining_attendee_capacity(map(), integer()) :: integer() | nil
|
||||||
|
defp remaining_attendee_capacity(
|
||||||
|
%{maximum_attendee_capacity: maximum_attendee_capacity},
|
||||||
|
participant_count
|
||||||
|
)
|
||||||
|
when is_integer(maximum_attendee_capacity) and maximum_attendee_capacity > 0 do
|
||||||
|
maximum_attendee_capacity - participant_count
|
||||||
|
end
|
||||||
|
|
||||||
|
defp remaining_attendee_capacity(
|
||||||
|
%{maximum_attendee_capacity: _},
|
||||||
|
_participant_count
|
||||||
|
),
|
||||||
|
do: nil
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user