aboutsummaryrefslogtreecommitdiff
path: root/src/video_thread.py
diff options
context:
space:
mode:
authortassaron2017-07-23 17:14:21 -0400
committertassaron2017-07-23 17:14:21 -0400
commitd38109453cea17a31c335837c0029ad51fa3dda1 (patch)
tree57611d2a48795d824972c92756283bf16d44e3fe /src/video_thread.py
parentbf0890e7c87c730b8970c1a20c5b6a9a1a55d203 (diff)
better component error messages
fatal errors cancel the export instead of crashing
Diffstat (limited to 'src/video_thread.py')
-rw-r--r--src/video_thread.py52
1 files changed, 30 insertions, 22 deletions
diff --git a/src/video_thread.py b/src/video_thread.py
index 7fe3e02..68eae4f 100644
--- a/src/video_thread.py
+++ b/src/video_thread.py
@@ -18,7 +18,7 @@ from threading import Thread, Event
import time
import signal
-import core
+from component import BadComponentInit
from toolkit import openPipe
from toolkit.ffmpeg import readAudioFile, createFfmpegCommand
from toolkit.frame import Checkerboard
@@ -105,8 +105,7 @@ class Worker(QtCore.QObject):
while not self.stopped:
audioI, frame = self.previewQueue.get()
- if core.Core.windowHasFocus \
- and time.time() - self.lastPreview >= 0.06 or audioI == 0:
+ if time.time() - self.lastPreview >= 0.06 or audioI == 0:
image = Image.alpha_composite(background.copy(), frame)
self.imageCreated.emit(QtGui.QImage(ImageQt(image)))
self.lastPreview = time.time()
@@ -153,39 +152,48 @@ class Worker(QtCore.QObject):
]))
self.staticComponents = {}
for compNo, comp in enumerate(reversed(self.components)):
- comp.preFrameRender(
- worker=self,
- completeAudioArray=self.completeAudioArray,
- sampleSize=self.sampleSize,
- progressBarUpdate=self.progressBarUpdate,
- progressBarSetText=self.progressBarSetText
- )
+ try:
+ comp.preFrameRender(
+ worker=self,
+ completeAudioArray=self.completeAudioArray,
+ sampleSize=self.sampleSize,
+ progressBarUpdate=self.progressBarUpdate,
+ progressBarSetText=self.progressBarSetText
+ )
+ except BadComponentInit:
+ pass
- if 'error' in comp.properties:
+ if 'error' in comp.properties():
self.cancel()
self.canceled = True
canceledByComponent = True
- errMsg = "Component #%s encountered an error!" % compNo \
- if comp.error is None else 'Component #%s (%s): %s' % (
+ compError = comp.error() \
+ if type(comp.error()) is tuple else (comp.error(), '')
+ errMsg = (
+ "Component #%s encountered an error!" % compNo
+ if comp.error() is None else
+ 'Export cancelled by component #%s (%s): %s' % (
str(compNo),
str(comp),
- comp.error
- )
- self.parent.showMessage(
- msg=errMsg,
- icon='Warning',
- parent=None # MainWindow is in a different thread
+ compError[0]
)
+ )
+ comp._error.emit(errMsg, compError[1])
break
- if 'static' in comp.properties:
+ if 'static' in comp.properties():
self.staticComponents[compNo] = \
comp.frameRender(compNo, 0).copy()
if self.canceled:
if canceledByComponent:
print('Export cancelled by component #%s (%s): %s' % (
- compNo, str(comp), comp.error
- ))
+ compNo,
+ comp.name,
+ 'No message.' if comp.error() is None else (
+ comp.error() if type(comp.error()) is str
+ else comp.error()[0])
+ )
+ )
self.cancelExport()
return