from server import * import os.path from jobtypes import schedule_remux, schedule_transcode @app.route('/internal/jobs/add/remux', methods=['GET', 'POST']) @mod_required @csrf_protect def add_remux_job(): lectureid = request.values.get('lectureid') videoid = int(request.values.get('videoid', 0)) if not lectureid: lectureid = query('SELECT lecture_id FROM videos WHERE id = ?', videoid)[0]['lecture_id'] schedule_remux(lectureid, videoid) return redirect(request.values.get('ref', url_for('jobs_overview'))) @app.route('/internal/jobs/add/reencode', methods=['GET', 'POST']) @mod_required @csrf_protect @handle_errors('jobs_overview', 'Video nicht gefunden!', 404, IndexError) def add_reencode_job(): video = query('SELECT * FROM videos WHERE id = ?', request.values['videoid'])[0] if not video['source']: flash('Manuell erstellte Videos können nicht neukodiert werden!') else: source = query('''SELECT sources.* FROM sources WHERE sources.id = ? ORDER BY time_created''', video['source'])[-1] schedule_transcode(source, video=video) return redirect(request.values.get('ref', url_for('jobs_overview'))) @job_handler('probe-raw') def update_lecture_videos(jobid, jobtype, data, state, status): if 'lecture_id' not in data: return if 'source_id' not in data: modify('INSERT INTO sources (lecture_id, path, type, hash, time_created) VALUES (?, ?, ?, ?, ?)', data['lecture_id'], data['path'], 'plain', status['hash'], datetime.now()) sources = query('SELECT * FROM sources WHERE sources.lecture_id = ? ORDER BY time_created', data['lecture_id']) if not sources: return latest = sources[-1] videos = query('SELECT * FROM videos WHERE videos.lecture_id = ?', data['lecture_id']) current_fmts = [v['video_format'] for v in videos] formats = query('''SELECT formats.* FROM formats JOIN profiles ON formats.id = profiles.format JOIN courses ON profiles.name = courses.profile JOIN lectures ON courses.id = lectures.course_id WHERE lectures.id = ?''', data['lecture_id']) for fmt in formats: if fmt['id'] not in current_fmts: schedule_transcode(latest, fmt_id=fmt['id']) for video in videos: if video['source'] != latest['id']: schedule_transcode(latest, video=video) @edit_handler('chapters') def chapter_changed(table, column, value, id, user): chapters = query('SELECT * FROM chapters WHERE id = ?', id) if not chapters: return chapter = chapters[0] if column in ['visible', 'deleted'] or (chapter['visible'] and not chapter['deleted']): schedule_remux(chapter['lecture_id']) @edit_handler('courses') def course_changed(table, column, value, id, user): if column not in ['title', 'organizer']: return lectures = query('SELECT * FROM lectures WHERE course_id = ?', id) for lecture in lectures: schedule_remux(lecture['id']) @edit_handler('lectures') def lecture_changed(table, column, value, id, user): if column in ['title', 'comment', 'time', 'speaker']: schedule_remux(id)