Online Event Types
There are three subtypes of online events:
- Videoconferencing where we have a link directly to the stream, that the user can click on to join the meeting,
- Videoconferencing applications where we do not have a link to the stream, that requires the user to click to an external event provider to join the meeting
- Non-videoconferencing online meetings such as discord or irc meetups, world of warcraft, etc.
PlaceCal currently supports types 1 and 2.
Raw event data for each source, including sample online event data, can be found under the title Event Data on the PlaceCal Devops page.
We currently support the following sources of online event data:
Eventbrite events have a value (
online) which tells us directly if the event is online or not. However, even if the Eventbrite event is online, we are not given a stream URL.
Meetup events have a value (
is_online_event) which tells us directly if the event is online or not. However, even if the Meetup event is online, we are not given a stream URL.
An iCal file generally (see exception below) does not have a special value for online events. The most common form of linking event data in iCal event data (in as much as, the events we are already looking at / taking in) is to simply put it in the description. This may be a stream URL, or may be a Facebook event.
iCal (Google Calendar)
An ICal created via Google Calendar has an option for events to create a Google Meet stream for the event. The URL is shared via a Google-only extension to the ICal data called
Online events are not in a very stable state. Most solutions seem to bootstrap around calendar limitations, which can be seen with the method “Just copy and paste the zoom link into the description”. Videoconferencing usage changes across time, as can be seen with the general loss of usage of Skype and the increase of using Zoom, Discord, and Microsoft Teams.
In addition, it is possible for a single online stream URL to be shared among events. So, to allow future expansion on how we handle online events, to preserve the already-existing separation between an
Event and where the event is hosted, and to allow future reverse-lookup of online URLs to Events, the best solution seemed to be creating a separate Model,
OnlineAddress may have multiple
Events, whereas an
Event may only have one
OnlineAddress. Currently the
OnlineAddress simply contains the URL we are handed by the event ingress source, and a value —
is_stream, that tells us if the URL is a videoconferencing link (i.e. a Type 1 online event), or a link to an external provider that requires user intervention (i.e. a Type 2 online event).
Edge Cases and Behaviour
Determining whether an
Event is online, is as simple as checking for the existence of
is_stream value on an OnlineAddress is
true, we have a videoconferencing URL. This should probably be displayed next to other links we have, such as the
event.publisher_url, so the user can join the event, or view directly on the external source if possible.
is_stream value on an OnlineAddress is
false, this means we must redirect to an external provider for the user to join the meeting. In the majority of cases, the
event.online_address.url is the same as the
event.publisher_url making the presence of the
online_address.url utterly redundant. However, in a handful of cases,
nil, but we have an
online_address.url to redirect someone to.
Thus for display logic, we have four conditions:
- The event is not online
- The event is online, and we have a videoconferencing URL for it (
is_stream == true)
- The event is online, we do not have a videoconferencing URL for it, and we already have a link to redirect someone to, so that they may join the online event (
is_stream == true,
event.publisher_url == online_address.url)
- The event is online, we do not have a videoconferencing URL for it, and we do not already have a link to redirect someone to, so that they can join the online event (
is_stream == false,
event.publisher_url == nil)
In case 3. it is preferable not to display the
online_address.url, as it is just a duplicate of the other URL we already display. In cases 2. and 4. we should display the
online_address.url either next to, or instead of, the publisher url