Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • intros
  • live_sources
  • bootstrap4
  • modules
5 results

livestreams.py

Blame
  • Forked from Video AG Infrastruktur / website
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    chapters.py NaN GiB
    import json
    from server import *
    
    @job_handler('probe', 'probe-raw')
    def import_xmp_chapters(jobid, jobtype, data, state, status):
    	if 'lecture_id' not in data or not data.get('import-chapters', False):
    		return
    	times = set()
    	# Only add new chapters, deleted chapters are taken into account here
    	for chapter in query('SELECT * FROM chapters WHERE lecture_id = ?', data['lecture_id']):
    		for offset in range(5):
    			times.add(chapter['time']-offset)
    			times.add(chapter['time']+offset)
    	for chapter in status.get('xmp_chapters', []):
    		if int(chapter['time']) in times:
    			continue
    		modify('INSERT INTO chapters (lecture_id, time, text, visible, time_created, time_updated) VALUES (?, ?, ?, 0, ?, ?)',
    				data['lecture_id'], int(chapter['time']), chapter['text'],
    				datetime.now(), datetime.now())
    
    @app.route('/internal/newchapter/<int:lectureid>', methods=['POST', 'GET'])
    def suggest_chapter(lectureid):
    	time = request.values['time']
    	text = request.values['text']
    	assert(time and text)
    	try:
    		x = datetime.strptime(time,'%H:%M:%S')
    		time= timedelta(hours=x.hour,minutes=x.minute,seconds=x.second).total_seconds()
    		time = int(time)
    	except ValueError:
    		if 'ref' in request.values:
    			flash('Falsches Zeitformat, "%H:%M:%S" wird erwartet. Z.B. "01:39:42" für eine Kapitel bei Stunde 1, Minute 39, Sekunde 42')
    			return redirect(request.values['ref'])
    		return 'Wrong time format, "%H:%M:%S" is expected',  400
    		
    	submitter = None
    	if not ismod():
    		submitter = request.environ['REMOTE_ADDR']
    	lecture = query('SELECT * FROM lectures WHERE id = ?', lectureid)[0]
    	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
    	id = modify('INSERT INTO chapters (lecture_id, time, text, time_created, time_updated, created_by, submitted_by) VALUES (?, ?, ?, ?, ?, ?, ?)',
    				lectureid, time, text, datetime.now(), datetime.now(), session.get('user', {'dbid':None})['dbid'], submitter)
    	chapter = query('SELECT * FROM chapters WHERE id = ?', id)[0]
    	notify_mods('chapter_submitted', course['id'], course=course, lecture=lecture, chapter=chapter)
    	if 'ref' in request.values:
    		return redirect(request.values['ref'])
    	return 'OK', 200
    
    @app.route('/internal/chapters/<int:lectureid>')
    def chapters(lectureid):
    	chapters = query("SELECT * FROM chapters WHERE lecture_id = ? AND NOT deleted AND (visible OR ?) ORDER BY time DESC", lectureid, ismod())
    	if not chapters:
    		return 'No chapters found', 404
    	last = None
    	for c in chapters:
    		c['start'] = c['time']
    		c['end'] = last['start'] if last else 9999
    		last = c
    	if 'json' in request.values:
    		return Response(json.dumps([{'time': c['time'], 'text': c['text']} for c in chapters]), mimetype='application/json')
    	return Response(render_template('chapters.srt',chapters=chapters), 200, {'Content-Type':'text/vtt'})