This commit is contained in:
deeplow 2024-10-17 15:21:07 +02:00 committed by GitHub
commit 9509572974
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 36 additions and 5 deletions

View file

@ -1109,7 +1109,8 @@ class SettingsWidget(QtWidgets.QWidget):
class ConvertTask(QtCore.QObject):
finished = QtCore.Signal(bool)
update = QtCore.Signal(bool, str, int)
update_progress = QtCore.Signal(bool, str, int)
update_preview = QtCore.Signal(int, int, bytes)
def __init__(
self,
@ -1128,6 +1129,7 @@ class ConvertTask(QtCore.QObject):
self.document,
self.ocr_lang,
self.progress_callback,
self.preview_callback,
)
self.finished.emit(self.error)
@ -1135,7 +1137,10 @@ class ConvertTask(QtCore.QObject):
if error:
self.error = True
self.update.emit(error, text, percentage)
self.update_progress.emit(error, text, percentage)
def preview_callback(self, width: int, height: int, data: bytes) -> None:
self.update_preview.emit(width, height, data)
class DocumentsListWidget(QtWidgets.QListWidget):
@ -1157,7 +1162,7 @@ class DocumentsListWidget(QtWidgets.QListWidget):
def documents_added(self, docs: List[Document]) -> None:
for document in docs:
item = QtWidgets.QListWidgetItem()
item.setSizeHint(QtCore.QSize(500, 50))
item.setSizeHint(QtCore.QSize(500, 800))
widget = DocumentWidget(self.dangerzone, document)
self.addItem(item)
self.setItemWidget(item, widget)
@ -1174,7 +1179,8 @@ class DocumentsListWidget(QtWidgets.QListWidget):
for doc in self.docs_list:
task = ConvertTask(self.dangerzone, doc, self.get_ocr_lang())
doc_widget = self.docs_list_widget_map[doc]
task.update.connect(doc_widget.update_progress)
task.update_progress.connect(doc_widget.update_progress)
task.update_preview.connect(doc_widget.update_preview)
task.finished.connect(doc_widget.all_done)
self.thread_pool.apply_async(task.convert_document)
@ -1229,13 +1235,22 @@ class DocumentWidget(QtWidgets.QWidget):
self.progress.setRange(0, 100)
self.progress.setValue(0)
# Preview
self.doc_preview = QtWidgets.QLabel()
self.doc_preview.setAlignment(
QtCore.Qt.AlignVCenter | QtCore.Qt.AlignLeft
)
# Layout
layout = QtWidgets.QHBoxLayout()
layout.addWidget(self.status_image)
layout.addWidget(self.dangerous_doc_label)
layout.addWidget(self.progress)
layout.addWidget(self.error_label)
self.setLayout(layout)
layout2 = QtWidgets.QVBoxLayout()
layout2.addLayout(layout)
layout2.addWidget(self.doc_preview)
self.setLayout(layout2)
def update_progress(self, error: bool, text: str, percentage: int) -> None:
self.update_status_image()
@ -1249,6 +1264,16 @@ class DocumentWidget(QtWidgets.QWidget):
self.progress.setToolTip(text)
self.progress.setValue(percentage)
def update_preview(self, width: int, height: int, data: bytes) -> None:
log.debug(f"UPDATTING PREVIEW {width}, {height}")
# with open("tests/test_docs/sample-ppm.ppm", 'rb') as ppm_file:
ppm_header = f"P6\n{width} {height}\n255\n".encode('ascii')
ppm_data = ppm_header + data
log.info(ppm_data[:20])
pix = QtGui.QPixmap()
pix.loadFromData(ppm_data)
self.doc_preview.setPixmap(pix)
def load_status_image(self, filename: str) -> QtGui.QPixmap:
path = get_resource_path(filename)
img = QtGui.QImage(path)

View file

@ -104,8 +104,10 @@ class IsolationProvider(ABC):
document: Document,
ocr_lang: Optional[str],
progress_callback: Optional[Callable] = None,
preview_callback: Optional[Callable] = None,
) -> None:
self.progress_callback = progress_callback
self.preview_callback = preview_callback
document.mark_as_converting()
try:
with tempfile.TemporaryDirectory() as t:
@ -161,6 +163,10 @@ class IsolationProvider(ABC):
num_pixels,
)
# Preview
if self.preview_callback:
self.preview_callback(width, height, untrusted_pixels)
# Wrapper code
with open(f"{tempdir}/pixels/page-{page}.width", "w") as f_width:
f_width.write(str(width))