From: Yoan Le Clanche Date: Thu, 7 May 2020 12:18:17 +0000 (+0200) Subject: merge X-Git-Tag: 2.8.1-pro~187^2~11 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=2bac8e191cf7dbcd81b36ee3ede310fa6881b0fd;p=teleforma.git merge --- 2bac8e191cf7dbcd81b36ee3ede310fa6881b0fd diff --cc teleforma/models/core.py index be420823,4c531749..f35bfd80 mode 100644,100755..100755 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@@ -561,21 -546,89 +546,107 @@@ class WebclassMixin(Model) self.webclass_id = meeting_id self.webclass_password = password ++<<<<<<< HEAD + @property + def participant_slot_available(self): + """ + is there any slot available for another participants + """ + if self.webclass and self.webclass_max_participants: + auditors = self.auditor.count() + return auditors < self.webclass_max_participants + return True + + def join_webclass(self): + """ """ + + def get_webclass_info(self): + """ """ ++======= + + def create_webclass_room(self): + """ create a BBB room and generate meeting id and moderator password """ + if self.webclass_id and self.webclass: + try: + # check if meeting already exists + self.get_webclass_info() + except BBBException: + params = { + 'moderatorPW':self.webclass_password, + 'attendeePW':'pwattendee', + # 'maxParticipants':self.webclass_max_participants + 1, + 'welcome':"Bienvenue sur la conférence \"%s\"." % (str(self.title),), + 'record':True, + # 'autoStartRecording':True, + 'muteOnStart':True, + 'allowModsToUnmuteUsers':True, + # 'guestPolicy':'ALWAYS_ACCEPT' + } + + try: + result = bbb.create_meeting(self.webclass_id, params=params) + register_web_hook() + except BBBException as e: + print(e) + raise + + + def get_join_webclass_url(self, user): + """ + Get url to BBB meeting. + If user are professor or staff, provide the url with the moderator password + """ + self.create_webclass_room() + username = user.get_full_name() + is_professor = len(user.professor.all()) >= 1 + is_staff = user.is_staff or user.is_superuser + password = 'pwattendee' + if is_professor or is_staff: + password = self.webclass_password + params = {'userID': user.username} + print(bbb.get_join_meeting_url(username, self.webclass_id, password, params)) + return bbb.get_join_meeting_url(username, self.webclass_id, password, params) + + def is_webclass_running(self): + """ Is webclass currently running ? """ + # print(self.get_webclass_info()) + return bbb.is_meeting_running(self.webclass_id).get_field('running').decode() == 'true' or False + + def get_webclass_info(self): + """ """ + print(self.webclass_id) + print(bbb.get_meeting_info(self.webclass_id)) + return bbb.get_meeting_info(self.webclass_id) + + def get_record(self): + """ get longest published record for the current conference """ + all_records = [] + for recording in bbb.get_recordings(self.webclass_id).get_field('recordings')['recording']: + recording.prettyprint() + url = recording.get('playback', {}).get('format', {}).get('url') + if url: + url = url.decode() + data = { + 'start': int(recording['startTime'].decode()), + 'end': int(recording['endTime'].decode()), + 'url': url, + 'state': recording['state'].decode(), + } + data['duration'] = data['end'] - data['start'] + all_records.append(data) + + print('all_records') + print(all_records) + if not all_records: + return None + all_records = sorted(all_records, key=lambda record:-record['duration']) + longest_record = all_records[0] + if not longest_record['url'] or longest_record['state'] != 'published': + return None + return longest_record + + ++>>>>>>> fdfea86b7089c1634487e00b3ca8465c8f9ff762 class Conference(Displayable, WebclassMixin):