diff --git a/dangerzone/gui/main_window.py b/dangerzone/gui/main_window.py index 0378b67..9b5f2e0 100644 --- a/dangerzone/gui/main_window.py +++ b/dangerzone/gui/main_window.py @@ -423,13 +423,14 @@ class SettingsWidget(QtWidgets.QWidget): class ConvertThread(QtCore.QThread): - finished = QtCore.Signal() + finished = QtCore.Signal(bool) update = QtCore.Signal(bool, str, int) def __init__(self, global_common, common): super(ConvertThread, self).__init__() self.global_common = global_common self.common = common + self.error = False def run(self): ocr_lang = self.global_common.ocr_languages[ @@ -443,19 +444,20 @@ class ConvertThread(QtCore.QThread): ocr_lang, self.stdout_callback, ): - self.finished.emit() + self.finished.emit(self.error) def stdout_callback(self, line): try: status = json.loads(line) except: print(f"Invalid JSON returned from container: {line}") - + self.error = True self.update.emit(True, "Invalid JSON returned from container", 0) return s = Style.BRIGHT + Fore.CYAN + f"{status['percentage']}% " if status["error"]: + self.error = True s += Style.RESET_ALL + Fore.RED + status["text"] else: s += Style.RESET_ALL + status["text"] @@ -473,6 +475,8 @@ class ConvertWidget(QtWidgets.QWidget): self.gui_common = gui_common self.common = common + self.error = False + # Dangerous document label self.dangerous_doc_label = QtWidgets.QLabel() self.dangerous_doc_label.setAlignment(QtCore.Qt.AlignCenter) @@ -480,11 +484,25 @@ class ConvertWidget(QtWidgets.QWidget): "QLabel { font-size: 16px; font-weight: bold; }" ) + # Label + self.error_image = QtWidgets.QLabel() + self.error_image.setPixmap( + QtGui.QPixmap.fromImage( + QtGui.QImage(self.global_common.get_resource_path("error.png")) + ) + ) + self.error_image.hide() + self.label = QtWidgets.QLabel() self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setWordWrap(True) self.label.setStyleSheet("QLabel { font-size: 18px; }") + label_layout = QtWidgets.QHBoxLayout() + label_layout.addWidget(self.error_image) + label_layout.addWidget(self.label, stretch=1) + + # Progress bar self.progress = QtWidgets.QProgressBar() self.progress.setRange(0, 100) self.progress.setValue(0) @@ -493,7 +511,7 @@ class ConvertWidget(QtWidgets.QWidget): layout = QtWidgets.QVBoxLayout() layout.addWidget(self.dangerous_doc_label) layout.addStretch() - layout.addWidget(self.label) + layout.addLayout(label_layout) layout.addWidget(self.progress) layout.addStretch() self.setLayout(layout) @@ -512,13 +530,17 @@ class ConvertWidget(QtWidgets.QWidget): def update(self, error, text, percentage): if error: - # TODO: add error image or something - pass + self.error = True + self.error_image.show() + self.progress.hide() self.label.setText(text) self.progress.setValue(percentage) def all_done(self): + if self.error: + return + # In Windows, open Explorer with the safe PDF in focus if platform.system() == "Windows": dest_filename_windows = self.common.output_filename.replace("/", "\\") diff --git a/share/error.png b/share/error.png new file mode 100644 index 0000000..270bd24 Binary files /dev/null and b/share/error.png differ