From 2b9def6bcaa7462039d59f6e621bb1be397decb8 Mon Sep 17 00:00:00 2001
From: Julian Rother <julianr@fsmpi.rwth-aachen.de>
Date: Mon, 23 Jul 2018 00:55:15 +0200
Subject: [PATCH] Moved functions from jobtypes.py back to their origional
 context and fixed some style issues

---
 chapters.py      |  1 -
 encoding.py      | 74 +++++++++++++++++++++++++++++++++++++++++++++-
 jobmanagement.py |  1 +
 jobs.py          |  9 ------
 jobtypes.py      | 77 ------------------------------------------------
 livestreams.py   |  1 -
 server.py        |  4 ++-
 sorter.py        | 32 ++++++++++++--------
 8 files changed, 96 insertions(+), 103 deletions(-)
 delete mode 100644 jobtypes.py

diff --git a/chapters.py b/chapters.py
index e8dea98..a0d35b2 100644
--- a/chapters.py
+++ b/chapters.py
@@ -1,6 +1,5 @@
 import json
 from server import *
-from jobmanagement import job_handler
 
 @job_handler('probe', 'probe-raw')
 def import_xmp_chapters(jobid, jobtype, data, state, status):
diff --git a/encoding.py b/encoding.py
index 8876311..88d2e38 100644
--- a/encoding.py
+++ b/encoding.py
@@ -1,6 +1,38 @@
 from server import *
+from sorter import insert_video
 import os.path
-from jobtypes import schedule_remux, schedule_transcode
+import json
+
+def set_metadata(dest, course, lecture):
+	chapters = query('SELECT text, time FROM chapters WHERE lecture_id = ? AND visible ORDER BY time', lecture['id'])
+	metadata = {'title': lecture['title'], 'album': course['title'],
+		'description': lecture['comment'],
+		'date': lecture['time'].strftime('%m/%d/%Y'),
+		'artist': lecture['speaker'] if lecture['speaker'] else course['organizer']}
+	dest['metadata'] = metadata
+	dest['chapters'] = chapters
+
+def schedule_remux(lectureid, videoid=None):
+	lecture = query('SELECT * FROM lectures WHERE id = ?', lectureid)[0]
+	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
+	videos = query('''SELECT videos.*, sources.path AS srcpath, sources.hash AS srchash, formats.options AS fmtopts
+			FROM videos
+			JOIN sources ON videos.source = sources.id
+			JOIN formats ON videos.video_format = formats.id
+			WHERE videos.lecture_id = ?''', lectureid)
+	for video in videos:
+		if not video['source']:
+			continue
+		if videoid and video['id'] != videoid:
+			continue
+		data = {'path': video['path'], 'srcpath': video['srcpath'],
+			'srchash': video['srchash'], 'video_id': video['id']}
+		fmt = json.loads(video['fmtopts'])
+		if 'format' in fmt:
+			data['format'] = fmt['format']
+		data['options'] = fmt.get('options', {})
+		set_metadata(data, course, lecture)
+		schedule_job('remux', data)
 
 @app.route('/internal/jobs/add/remux', methods=['GET', 'POST'])
 @mod_required
@@ -13,6 +45,46 @@ def add_remux_job():
 	schedule_remux(lectureid, videoid)
 	return redirect(request.values.get('ref', url_for('jobs_overview')))
 
+def schedule_transcode(source, fmt_id=None, video=None):
+	if video:
+		fmt_id = video['video_format']
+		assert(video['lecture_id'] == source['lecture_id'])
+	assert(fmt_id != None)
+	fmt = query('SELECT * FROM formats WHERE id = ?', fmt_id)[0]
+	lecture = query('SELECT * FROM lectures WHERE id = ?', source['lecture_id'])[0]
+	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
+	data = {'input': {'path': source['path'], 'streams': []}, 'output': json.loads(fmt['options']), 'filters': []}
+	if source['type'] == 'plain':
+		stream = {'name': 'video', 'type': 'video'}
+		data['input']['streams'].append(stream)
+		stream = {'name': 'audio', 'type': 'audio'}
+		data['input']['streams'].append(stream)
+	else:
+		assert(False)
+	set_metadata(data['output'], course, lecture)
+	basename = os.path.basename(source['path']).rsplit('.', 1)[0]
+	data['output']['path'] = 'pub/'+course['handle']+'/'+basename+fmt['suffix']
+	if video:
+		old_source = query('SELECT * FROM sources WHERE id = ?', video['source'])[0]
+		data['output']['path'] = video['path']
+		data['video_id'] = video['id']
+		data['srcpath'] = old_source['path']
+		data['srchash'] = old_source['hash']
+	else:
+		data['lecture_id'] = lecture['id']
+	data['format_id'] = fmt['id']
+	data['source_id'] = source['id']
+	return schedule_job('transcode', data, queue="background")
+
+@job_handler('transcode')
+def insert_transcoded_video(jobid, jobtype, data, state, status):
+	if 'lecture_id' not in data or 'source_id' not in data or 'format_id' not in data:
+		return
+	if 'video_id' in data:
+		return
+	video_id = insert_video(data['lecture_id'], data['output']['path'], data['format_id'], status['hash'], status['filesize'], status['duration'], data['source_id'])
+	schedule_remux(data['lecture_id'], video_id)
+
 @app.route('/internal/jobs/add/reencode', methods=['GET', 'POST'])
 @mod_required
 @csrf_protect
diff --git a/jobmanagement.py b/jobmanagement.py
index 0136bda..9e6ccb3 100644
--- a/jobmanagement.py
+++ b/jobmanagement.py
@@ -50,6 +50,7 @@ def schedule_job(jobtype, data=None, priority=0, queue="default"):
 		data = {}
 	return modify('INSERT INTO jobs (type, priority, queue, data, time_created) VALUES (?, ?, ?, ?, ?)',
 			jobtype, priority, queue, json.dumps(data, default=date_json_handler), datetime.now())
+
 def cancel_job(job_id):
 	query('UPDATE jobs SET state = "deleted" WHERE id = ? AND state = "ready"', job_id)
 	query('UPDATE jobs SET canceled = 1 WHERE id = ?', job_id)
diff --git a/jobs.py b/jobs.py
index 06ff730..2932e51 100644
--- a/jobs.py
+++ b/jobs.py
@@ -2,7 +2,6 @@ from server import *
 import json
 import random
 from time import sleep
-from jobmanagement import *
 
 @app.route('/internal/jobs/overview')
 @register_navbar('Jobs', iconlib='fa', icon='suitcase', group='weitere')
@@ -114,11 +113,3 @@ def jobs_schedule(hostname):
 				return 'no jobs', 503
 
 	return Response(json.dumps(job, default=date_json_handler), mimetype='application/json')
-
-@app.route('/internal/jobs/add/thumbnail', methods=['GET', 'POST'])
-@mod_required
-@csrf_protect
-@handle_errors('jobs_overview', 'Zu dieser Veranstaltung existieren keine Videos!', 404, IndexError)
-def add_thumbnail_job():
-	schedule_thumbnail(request.values['lectureid'])
-	return redirect(request.values.get('ref', url_for('jobs_overview')))
diff --git a/jobtypes.py b/jobtypes.py
deleted file mode 100644
index 8d11213..0000000
--- a/jobtypes.py
+++ /dev/null
@@ -1,77 +0,0 @@
-from jobmanagement import schedule_job
-import json
-from server import query
-
-def set_metadata(dest, course, lecture):
-	chapters = query('SELECT text, time FROM chapters WHERE lecture_id = ? AND visible ORDER BY time', lecture['id'])
-	metadata = {'title': lecture['title'], 'album': course['title'],
-		'description': lecture['comment'],
-		'date': lecture['time'].strftime('%m/%d/%Y'),
-		'artist': lecture['speaker'] if lecture['speaker'] else course['organizer']}
-	dest['metadata'] = metadata
-	dest['chapters'] = chapters
-
-
-def schedule_thumbnail(lectureid):
-	videos = query('''
-		SELECT videos.path
-		FROM videos
-		JOIN formats ON (videos.video_format = formats.id)
-		WHERE videos.lecture_id = ?
-		ORDER BY formats.prio DESC''', lectureid)
-	return schedule_job('thumbnail', {'lectureid': str(lectureid), 'path': videos[0]['path']})
-
-
-def schedule_remux(lectureid, videoid=None):
-	lecture = query('SELECT * FROM lectures WHERE id = ?', lectureid)[0]
-	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
-	videos = query('''SELECT videos.*, sources.path AS srcpath, sources.hash AS srchash, formats.options AS fmtopts
-			FROM videos
-			JOIN sources ON videos.source = sources.id
-			JOIN formats ON videos.video_format = formats.id
-			WHERE videos.lecture_id = ?''', lectureid)
-	for video in videos:
-		if not video['source']:
-			continue
-		if videoid and video['id'] != videoid:
-			continue
-		data = {'path': video['path'], 'srcpath': video['srcpath'],
-			'srchash': video['srchash'], 'video_id': video['id']}
-		fmt = json.loads(video['fmtopts'])
-		if 'format' in fmt:
-			data['format'] = fmt['format']
-		data['options'] = fmt.get('options', {})
-		set_metadata(data, course, lecture)
-		schedule_job('remux', data)
-
-def schedule_transcode(source, fmt_id=None, video=None):
-	if video:
-		fmt_id = video['video_format']
-		assert(video['lecture_id'] == source['lecture_id'])
-	assert(fmt_id != None)
-	fmt = query('SELECT * FROM formats WHERE id = ?', fmt_id)[0]
-	lecture = query('SELECT * FROM lectures WHERE id = ?', source['lecture_id'])[0]
-	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
-	data = {'input': {'path': source['path'], 'streams': []}, 'output': json.loads(fmt['options']), 'filters': []}
-	if source['type'] == 'plain':
-		stream = {'name': 'video', 'type': 'video'}
-		data['input']['streams'].append(stream)
-		stream = {'name': 'audio', 'type': 'audio'}
-		data['input']['streams'].append(stream)
-	else:
-		assert(False)
-	set_metadata(data['output'], course, lecture)
-	basename = os.path.basename(source['path']).rsplit('.', 1)[0]
-	data['output']['path'] = 'pub/'+course['handle']+'/'+basename+fmt['suffix']
-	if video:
-		old_source = query('SELECT * FROM sources WHERE id = ?', video['source'])[0]
-		data['output']['path'] = video['path']
-		data['video_id'] = video['id']
-		data['srcpath'] = old_source['path']
-		data['srchash'] = old_source['hash']
-	else:
-		data['lecture_id'] = lecture['id']
-	data['format_id'] = fmt['id']
-	data['source_id'] = source['id']
-	return schedule_job('transcode', data, queue="background")
-
diff --git a/livestreams.py b/livestreams.py
index 8551541..0bd8177 100644
--- a/livestreams.py
+++ b/livestreams.py
@@ -1,5 +1,4 @@
 from server import *
-from jobmanagement import cancel_job, restart_job, schedule_job, job_handler
 
 @app.route('/internal/streaming/legacy_auth', methods=['GET', 'POST'])
 @app.route('/internal/streaming/legacy_auth/<server>', methods=['GET', 'POST'])
diff --git a/server.py b/server.py
index 4288f87..314a639 100644
--- a/server.py
+++ b/server.py
@@ -476,8 +476,8 @@ def dbstatus():
 def date_json_handler(obj):
 	return obj.isoformat() if hasattr(obj, 'isoformat') else obj
 
-import jobs
 from edit import edit_handler
+from jobmanagement import job_handler, job_handler_handle, job_set_state, schedule_job, cancel_job, restart_job
 import feeds
 import importer
 import stats
@@ -489,4 +489,6 @@ import timetable
 import chapters
 import icalexport
 import livestreams
+import encoding
 import cutprogress
+import jobs
diff --git a/sorter.py b/sorter.py
index 9811f85..bf58ccc 100644
--- a/sorter.py
+++ b/sorter.py
@@ -1,6 +1,4 @@
 from server import *
-from jobmanagement import schedule_job, job_handler
-from jobtypes import schedule_thumbnail
 import traceback
 import os.path
 
@@ -39,6 +37,23 @@ def update_video_metadata(jobid, jobtype, data, state, status):
 	modify('UPDATE videos_data SET hash = ?, file_size = ?, duration = ? WHERE id = ?',
 			status['hash'], status['filesize'], status['duration'], data['video_id'])
 
+def schedule_thumbnail(lectureid):
+	videos = query('''
+		SELECT videos.path
+		FROM videos
+		JOIN formats ON (videos.video_format = formats.id)
+		WHERE videos.lecture_id = ?
+		ORDER BY formats.prio DESC''', lectureid)
+	return schedule_job('thumbnail', {'lectureid': str(lectureid), 'path': videos[0]['path']})
+
+@app.route('/internal/jobs/add/thumbnail', methods=['GET', 'POST'])
+@mod_required
+@csrf_protect
+@handle_errors('jobs_overview', 'Zu dieser Veranstaltung existieren keine Videos!', 404, IndexError)
+def add_thumbnail_job():
+	schedule_thumbnail(request.values['lectureid'])
+	return redirect(request.values.get('ref', url_for('jobs_overview')))
+
 def insert_video(lectureid, dbfilepath, fileformatid, hash="", filesize=-1, duration=-1, sourceid=None):
 	visible = query('SELECT courses.autovisible FROM courses JOIN lectures ON lectures.course_id = courses.id WHERE lectures.id = ?', lectureid)[0]['autovisible']
 	video_id = modify('''INSERT INTO videos_data 
@@ -46,9 +61,7 @@ def insert_video(lectureid, dbfilepath, fileformatid, hash="", filesize=-1, dura
 		VALUES 
 		(?, ?, ?, ?, "", "", "", ?, ?, ?, ?, ?, ?, ?)''',
 		lectureid, visible, dbfilepath, fileformatid, datetime.now(), datetime.now(), datetime.now(), -1, hash, filesize, duration, source)
-	if sourceid:
-		schedule_remux(lectureid, video_id)
-	else:
+	if not sourceid:
 		query('INSERT INTO sortlog (lecture_id,video_id,path,`when`) VALUES (?,?,?,?)', lectureid, video_id, dbfilepath, datetime.now())
 		schedule_job('probe', {'path': dbfilepath, 'lecture_id': lectureid, 'video_id': video_id, 'import-chapters': True})
 	schedule_thumbnail(lectureid)
@@ -56,14 +69,7 @@ def insert_video(lectureid, dbfilepath, fileformatid, hash="", filesize=-1, dura
 	lecture = query('SELECT * FROM lectures WHERE id = ?', lectureid)[0]
 	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
 	notify_mods('new_video', course['id'], course=course, lecture=lecture, video=video)
-
-@job_handler('transcode')
-def insert_transcoded_video(jobid, jobtype, data, state, status):
-	if 'lecture_id' not in data or 'source_id' not in data or 'format_id' not in data:
-		return
-	if 'video_id' in data:
-		return
-	insert_video(data['lecture_id'], data['output']['path'], data['format_id'], status['hash'], status['filesize'], status['duration'], data['source_id'] )
+	return video_id
 
 def split_filename(filename):
 	# '_' and ' ' are handled like '-'
-- 
GitLab