def refresh_room(self, vc_room, event): is_webinar = vc_room.data['meeting_type'] == 'webinar' zoom_meeting = fetch_zoom_meeting(vc_room, is_webinar=is_webinar) vc_room.name = zoom_meeting['topic'] vc_room.data.update({ 'description': zoom_meeting.get('agenda', ''), 'zoom_id': zoom_meeting['id'], 'password': zoom_meeting['password'], 'mute_host_video': zoom_meeting['settings']['host_video'], # these options will be empty for webinars 'mute_audio': zoom_meeting['settings'].get('mute_upon_entry'), 'mute_participant_video': not zoom_meeting['settings'].get('participant_video'), 'waiting_room': zoom_meeting['settings'].get('waiting_room'), 'alternative_hosts': process_alternative_hosts( zoom_meeting['settings'].get('alternative_hosts')) }) vc_room.data.update(get_url_data_args(zoom_meeting['join_url'])) flag_modified(vc_room, 'data')
def update_room(self, vc_room, event): client = ZoomIndicoClient() is_webinar = vc_room.data['meeting_type'] == 'webinar' zoom_meeting = fetch_zoom_meeting(vc_room, client=client, is_webinar=is_webinar) changes = {} if vc_room.name != zoom_meeting['topic']: changes['topic'] = vc_room.name if vc_room.data['description'] != zoom_meeting.get('agenda', ''): changes['agenda'] = vc_room.data['description'] if vc_room.data['password'] != zoom_meeting['password']: changes['password'] = vc_room.data['password'] zoom_meeting_settings = zoom_meeting['settings'] if vc_room.data['mute_host_video'] == zoom_meeting_settings[ 'host_video']: changes.setdefault( 'settings', {})['host_video'] = not vc_room.data['mute_host_video'] alternative_hosts = process_alternative_hosts( zoom_meeting_settings.get('alternative_hosts', '')) if vc_room.data['alternative_hosts'] != alternative_hosts: new_alt_host_emails = get_alt_host_emails( vc_room.data['alternative_hosts']) changes.setdefault( 'settings', {})['alternative_hosts'] = ','.join(new_alt_host_emails) if not is_webinar: if vc_room.data['mute_audio'] != zoom_meeting_settings[ 'mute_upon_entry']: changes.setdefault( 'settings', {})['mute_upon_entry'] = vc_room.data['mute_audio'] if vc_room.data['mute_participant_video'] == zoom_meeting_settings[ 'participant_video']: changes.setdefault('settings', {})['participant_video'] = not vc_room.data[ 'mute_participant_video'] if vc_room.data['waiting_room'] != zoom_meeting_settings[ 'waiting_room']: changes.setdefault( 'settings', {})['waiting_room'] = vc_room.data['waiting_room'] if changes: update_zoom_meeting(vc_room.data['zoom_id'], changes, is_webinar=is_webinar) # always refresh meeting URL (it may have changed if password changed) zoom_meeting = fetch_zoom_meeting(vc_room, client=client, is_webinar=is_webinar) vc_room.data.update(get_url_data_args(zoom_meeting['join_url']))
def create_room(self, vc_room, event): """Create a new Zoom room for an event, given a VC room. In order to create the Zoom room, 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 """ client = ZoomIndicoClient() host = principal_from_identifier(vc_room.data['host']) host_email = find_enterprise_email(host) # get the object that this booking is linked to vc_room_assoc = vc_room.events[0] link_obj = vc_room_assoc.link_object is_webinar = vc_room.data.setdefault('meeting_type', 'regular') == 'webinar' scheduling_args = get_schedule_args( link_obj) if link_obj.start_dt else {} try: settings = { 'host_video': not vc_room.data['mute_host_video'], } kwargs = {} if is_webinar: kwargs['type'] = (ZoomMeetingType.webinar if scheduling_args else ZoomMeetingType.recurring_webinar_no_time) settings['alternative_hosts'] = host_email else: kwargs = { 'type': (ZoomMeetingType.scheduled_meeting if scheduling_args else ZoomMeetingType.recurring_meeting_no_time), 'schedule_for': host_email } settings.update({ 'mute_upon_entry': vc_room.data['mute_audio'], 'participant_video': not vc_room.data['mute_participant_video'], 'waiting_room': vc_room.data['waiting_room'], 'join_before_host': self.settings.get('join_before_host'), }) kwargs.update({ 'topic': vc_room.name, 'agenda': vc_room.data['description'], 'password': vc_room.data['password'], 'timezone': event.timezone, 'settings': settings }) kwargs.update(scheduling_args) if is_webinar: meeting_obj = client.create_webinar(host_email, **kwargs) 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' )) vc_room.data.update({ 'zoom_id': str(meeting_obj['id']), 'start_url': meeting_obj['start_url'], 'host': host.identifier, 'alternative_hosts': process_alternative_hosts(meeting_obj['settings'].get( 'alternative_hosts', '')) }) vc_room.data.update(get_url_data_args(meeting_obj['join_url'])) flag_modified(vc_room, 'data') # e-mail Host URL to meeting host if self.settings.get('send_host_url'): notify_host_start_url(vc_room)