diff --git a/vc_zoom/README.md b/vc_zoom/README.md index 16f9879a4..b951e7994 100644 --- a/vc_zoom/README.md +++ b/vc_zoom/README.md @@ -11,6 +11,10 @@ ## Changelog +### 3.3.2 + +- Stop using the (incorrect) "room" terminology for Zoom meetings, and call them "meetings" instead + ### 3.3.1 - Adapt to Indico 3.3.5 changes @@ -96,7 +100,7 @@ - Improve logging when a Zoom API request fails - Fail more gracefully if no Zoom account could be found for a user -- Allow using the same name for multiple Zoom rooms +- Allow using the same name for multiple Zoom meetings - Update the join url when changing the passcode - Provide an alternative method of looking up the Zoom user corresponding to an Indico user - Always show the full join link and passcode to event managers @@ -107,7 +111,7 @@ - Show detailed error when deleting a meeting fails - Do not allow passcodes that are too long for zoom - Remove the "Assistant Zoom ID" logic due to problems with Zoom's API rate limits (all meetings created were counted against the assistant's rate limit instead of the host's); this means the host can no longer be changed, but Indico instead provides an option to event managers to make themselves a co-host. -- Fix an error when changing the linked object of a recurring Zoom room in Indico +- Fix an error when changing the linked object of a recurring Zoom meeting in Indico - Include Zoom join links in the event's ical export (note: only Zoom meetings with a public passcode are displayed unless you have at least Indico v2.3.3) - Skip deleted Zoom meetings when cloning events - Mark Zoom meetings as deleted when receiving the corresponding webhook event diff --git a/vc_zoom/indico_vc_zoom/cli.py b/vc_zoom/indico_vc_zoom/cli.py index 139740e0f..830ab5002 100644 --- a/vc_zoom/indico_vc_zoom/cli.py +++ b/vc_zoom/indico_vc_zoom/cli.py @@ -19,8 +19,8 @@ def cli(): @cli.command() @click.option('--status', type=click.Choice(['deleted', 'created'])) -def rooms(status=None): - """Lists all Zoom rooms""" +def meetings(status=None): + """Lists all Zoom meetings""" room_query = VCRoom.query.filter_by(type='zoom') table_data = [['ID', 'Name', 'Status', 'Zoom ID']] diff --git a/vc_zoom/indico_vc_zoom/controllers.py b/vc_zoom/indico_vc_zoom/controllers.py index d555f7e65..04d4008f0 100644 --- a/vc_zoom/indico_vc_zoom/controllers.py +++ b/vc_zoom/indico_vc_zoom/controllers.py @@ -91,13 +91,13 @@ def _handle_zoom_event(self, event, payload): if not vc_room: # This usually happens when a room wasn't created via indico - current_plugin.logger.debug('Action for unhandled Zoom room: %s', meeting_id) + current_plugin.logger.debug('Action for unhandled Zoom meeting: %s', meeting_id) return if event in ('meeting.updated', 'webinar.updated'): current_plugin.refresh_room(vc_room, None) elif event in ('meeting.deleted', 'webinar.deleted'): - current_plugin.logger.info('Zoom room deleted: %s', meeting_id) + current_plugin.logger.info('Zoom meeting deleted: %s', meeting_id) vc_room.status = VCRoomStatus.deleted else: current_plugin.logger.warning('Unhandled Zoom webhook payload: %s', event) diff --git a/vc_zoom/indico_vc_zoom/fixtures.py b/vc_zoom/indico_vc_zoom/fixtures.py index 327393ad5..c7cbc45a4 100644 --- a/vc_zoom/indico_vc_zoom/fixtures.py +++ b/vc_zoom/indico_vc_zoom/fixtures.py @@ -14,7 +14,7 @@ @pytest.fixture def zoom_plugin(app): - """Return a callable which lets you create dummy Zoom room occurrences.""" + """Return a callable which lets you create dummy Zoom meeting occurrences.""" from indico_vc_zoom.plugin import ZoomPlugin plugin = ZoomPlugin(plugin_engine, app) diff --git a/vc_zoom/indico_vc_zoom/forms.py b/vc_zoom/indico_vc_zoom/forms.py index 1dfb50654..f09d17341 100644 --- a/vc_zoom/indico_vc_zoom/forms.py +++ b/vc_zoom/indico_vc_zoom/forms.py @@ -69,21 +69,21 @@ class VCRoomForm(VCRoomFormBase): mute_audio = BooleanField(_('Mute audio'), widget=SwitchWidget(), - description=_('Participants will join the VC room muted by default ')) + description=_('Participants will join the meeting muted by default ')) mute_host_video = BooleanField(_('Mute video (host)'), widget=SwitchWidget(), - description=_('The host will join the VC room with video disabled')) + description=_('The host will join the meeting with video disabled')) mute_participant_video = BooleanField(_('Mute video (participants)'), widget=SwitchWidget(), - description=_('Participants will join the VC room with video disabled')) + description=_('Participants will join the meeting with video disabled')) waiting_room = BooleanField(_('Waiting room'), widget=SwitchWidget(), description=_('Participants may be kept in a waiting room by the host')) - description = TextAreaField(_('Description'), description=_('Optional description for this room')) + description = TextAreaField(_('Description'), description=_('Optional description for this meeting')) def __init__(self, *args, **kwargs): defaults = kwargs['obj'] diff --git a/vc_zoom/indico_vc_zoom/plugin.py b/vc_zoom/indico_vc_zoom/plugin.py index fe68ef7bc..28ed83f10 100644 --- a/vc_zoom/indico_vc_zoom/plugin.py +++ b/vc_zoom/indico_vc_zoom/plugin.py @@ -88,15 +88,15 @@ class PluginSettingsForm(VCPluginSettingsFormBase): mute_audio = BooleanField(_('Mute audio'), widget=SwitchWidget(), - description=_('Participants will join the VC room muted by default ')) + description=_('Participants will join the meeting muted by default ')) mute_host_video = BooleanField(_('Mute video (host)'), widget=SwitchWidget(), - description=_('The host will join the VC room with video disabled')) + description=_('The host will join the meeting with video disabled')) mute_participant_video = BooleanField(_('Mute video (participants)'), widget=SwitchWidget(), - description=_('Participants will join the VC room with video disabled')) + description=_('Participants will join the meeting with video disabled')) join_before_host = BooleanField(_('Join Before Host'), widget=SwitchWidget(), @@ -108,7 +108,8 @@ class PluginSettingsForm(VCPluginSettingsFormBase): description=_('Participants may be kept in a waiting room by the host')) creation_email_footer = TextAreaField(_('Creation email footer'), widget=TinyMCEWidget(), - description=_('Footer to append to emails sent upon creation of a VC room')) + description=_('Footer to append to emails sent upon creation of a Zoom ' + 'meeting')) send_host_url = BooleanField(_('Send host URL'), widget=SwitchWidget(), @@ -230,8 +231,8 @@ def update_data_association(self, event, vc_room, room_assoc, data): self.refresh_room(vc_room, event) if vc_room.data.get('registration_required'): raise UserValueError( - _('The room "{}" is using Zoom registration and thus cannot be attached to another event') - .format(vc_room.name) + _('The meeting "{}" is using Zoom registration and thus cannot be attached to another ' + 'event').format(vc_room.name) ) # this means we are updating an existing meeting with a new vc_room-event association update_zoom_meeting(vc_room.data['zoom_id'], { @@ -298,14 +299,14 @@ def update_data_vc_room(self, vc_room, data, is_new=False): flag_modified(vc_room, 'data') def create_room(self, vc_room, event): - """Create a new Zoom room for an event, given a VC room. + """Create a new Zoom meeting for an event, given a VC room. - In order to create the Zoom room, the function will try to get + In order to create the Zoom meeting, the function will try to get a valid e-mail address for the user in question, which can be use with the Zoom API. - :param vc_room: the VC room from which to create the Zoom room - :param event: the event to the Zoom room will be attached + :param vc_room: the VC room from which to create the Zoom meeting + :param event: the event to the Zoom meeting will be attached """ client = ZoomIndicoClient() host = principal_from_identifier(vc_room.data['host']) @@ -357,8 +358,8 @@ def create_room(self, vc_room, event): else: meeting_obj = client.create_meeting(host_email, **kwargs) except HTTPError as e: - self.logger.exception('Error creating Zoom Room: %s', e.response.content) - raise VCRoomError(_('Could not create the room in Zoom. Please contact support if the error persists')) + self.logger.exception('Error creating Zoom meeting: %s', e.response.content) + raise VCRoomError(_('Could not create the meeting in Zoom. Please contact support if the error persists')) vc_room.data.update({ 'zoom_id': str(meeting_obj['id']), @@ -445,13 +446,13 @@ def delete_room(self, vc_room, event): # if there's a 404, there is no problem, since the room is supposed to be gone anyway if e.response.status_code == 404: if has_request_context(): - flash(_("Room didn't exist in Zoom anymore"), 'warning') + flash(_("Meeting didn't exist in Zoom anymore"), 'warning') elif e.response.status_code == 400: # some sort of operational error on Zoom's side, deserves a specific error message raise VCRoomError(_('Zoom Error: "{}"').format(e.response.json()['message'])) else: - self.logger.error("Can't delete room") - raise VCRoomError(_('Problem deleting room')) + self.logger.error("Can't delete meeting") + raise VCRoomError(_('Problem deleting Zoom meeting')) def clone_room(self, old_event_vc_room, link_object): vc_room = old_event_vc_room.vc_room @@ -473,13 +474,13 @@ def clone_room(self, old_event_vc_room, link_object): # mark room as deleted vc_room.status = VCRoomStatus.deleted flash( - _('The room "{}" no longer exists in Zoom and was removed from the event').format(vc_room.name), + _('The meeting "{}" no longer exists in Zoom and was removed from the event').format(vc_room.name), 'warning' ) return None if vc_room.data.get('registration_required'): - flash(_('The room "{}" is using Zoom registration and thus cannot be attached to the new event') + flash(_('The meeting "{}" is using Zoom registration and thus cannot be attached to the new event') .format(vc_room.name), 'warning') return None diff --git a/vc_zoom/indico_vc_zoom/templates/emails/remote_deleted.html b/vc_zoom/indico_vc_zoom/templates/emails/remote_deleted.html index 31904dfb9..ee11d8e50 100644 --- a/vc_zoom/indico_vc_zoom/templates/emails/remote_deleted.html +++ b/vc_zoom/indico_vc_zoom/templates/emails/remote_deleted.html @@ -6,10 +6,10 @@ {% block header -%}
- The Zoom room "{{ vc_room.name }}" has been deleted from the Zoom server since it has not been used by any recent event. + The Zoom meeting "{{ vc_room.name }}" has been deleted from the Zoom server since it has not been used by any recent event.
- You won't be able to attach it to any future events. If you need to do so, please create a new room. + You won't be able to attach it to any future events. If you need to do so, please create a new meeting.
{% block custom_footer %}{% endblock %} diff --git a/vc_zoom/indico_vc_zoom/util.py b/vc_zoom/indico_vc_zoom/util.py index 12f238886..b5671aea4 100644 --- a/vc_zoom/indico_vc_zoom/util.py +++ b/vc_zoom/indico_vc_zoom/util.py @@ -123,11 +123,11 @@ def fetch_zoom_meeting(vc_room, client=None, is_webinar=False): except HTTPError as e: if e.response.status_code in {400, 404}: # Indico will automatically mark this room as deleted - raise VCRoomNotFoundError(_('This room has been deleted from Zoom')) + raise VCRoomNotFoundError(_('This meeting has been deleted from Zoom')) else: from indico_vc_zoom.plugin import ZoomPlugin - ZoomPlugin.logger.exception('Error getting Zoom Room: %s', e.response.content) - raise VCRoomError(_('Problem fetching room from Zoom. Please contact support if the error persists.')) + ZoomPlugin.logger.exception('Error getting Zoom meeting: %s', e.response.content) + raise VCRoomError(_('Problem fetching meeting from Zoom. Please contact support if the error persists.')) def update_zoom_meeting(zoom_id, changes, is_webinar=False): @@ -149,7 +149,7 @@ def update_zoom_meeting(zoom_id, changes, is_webinar=False): if e.response.json()['code'] == 3001: # "Meeting does not exist" - raise VCRoomNotFoundError(_('Room no longer exists in Zoom')) + raise VCRoomNotFoundError(_('Meeting no longer exists in Zoom')) raise VCRoomError(_("Can't update meeting. Please contact support if the error persists.")) diff --git a/vc_zoom/pyproject.toml b/vc_zoom/pyproject.toml index bd060d2df..3405f0815 100644 --- a/vc_zoom/pyproject.toml +++ b/vc_zoom/pyproject.toml @@ -2,7 +2,7 @@ name = 'indico-plugin-vc-zoom' description = 'Zoom video-conferencing plugin for Indico' readme = 'README.md' -version = '3.3.1' +version = '3.3.2' license = 'MIT' authors = [ { name = 'Indico Team', email = 'indico-team@cern.ch' },