Centralize 'document adding' in ContentWidget

Makes the ContentWidget a choke-point, where we can allow or prevent
adding more documents and where we can ensure that newly selected
documents are added immediately to the DangerzoneGui class.

Logically, the application flow should not change in any way.
This commit is contained in:
deeplow 2022-11-29 09:09:00 +00:00
parent ce5558b5a2
commit cb68ba7d1c
No known key found for this signature in database
GPG key ID: 577982871529A52A

View file

@ -208,6 +208,8 @@ class WaitingWidget(QtWidgets.QWidget):
class ContentWidget(QtWidgets.QWidget): class ContentWidget(QtWidgets.QWidget):
documents_added = QtCore.Signal(list)
def __init__(self, dangerzone: DangerzoneGui) -> None: def __init__(self, dangerzone: DangerzoneGui) -> None:
super(ContentWidget, self).__init__() super(ContentWidget, self).__init__()
self.dangerzone = dangerzone self.dangerzone = dangerzone
@ -218,17 +220,13 @@ class ContentWidget(QtWidgets.QWidget):
# Settings # Settings
self.settings_widget = SettingsWidget(self.dangerzone) self.settings_widget = SettingsWidget(self.dangerzone)
self.doc_selection_widget.documents_selected.connect( self.documents_added.connect(self.settings_widget.documents_added)
self.settings_widget.documents_selected
)
self.settings_widget.start_clicked.connect(self.start_clicked) self.settings_widget.start_clicked.connect(self.start_clicked)
self.settings_widget.hide() self.settings_widget.hide()
# Convert # Convert
self.documents_list = DocumentsListWidget(self.dangerzone) self.documents_list = DocumentsListWidget(self.dangerzone)
self.doc_selection_widget.documents_selected.connect( self.documents_added.connect(self.documents_list.documents_added)
self.documents_list.documents_selected
)
self.settings_widget.start_clicked.connect(self.documents_list.start_conversion) self.settings_widget.start_clicked.connect(self.documents_list.start_conversion)
self.documents_list.hide() self.documents_list.hide()
@ -239,9 +237,13 @@ class ContentWidget(QtWidgets.QWidget):
layout.addWidget(self.doc_selection_widget, stretch=1) layout.addWidget(self.doc_selection_widget, stretch=1)
self.setLayout(layout) self.setLayout(layout)
def documents_selected(self, selected_docs: List[Document]) -> None: def documents_selected(self, new_docs: List[Document]) -> None:
for doc in new_docs:
self.dangerzone.add_document(doc)
self.doc_selection_widget.hide() self.doc_selection_widget.hide()
self.settings_widget.show() self.settings_widget.show()
self.documents_added.emit(new_docs)
def start_clicked(self) -> None: def start_clicked(self) -> None:
self.settings_widget.hide() self.settings_widget.hide()
@ -505,23 +507,23 @@ class SettingsWidget(QtWidgets.QWidget):
else: else:
self.start_button.setDisabled(True) self.start_button.setDisabled(True)
def documents_selected(self, selected_docs: List[Document]) -> None: def documents_added(self, new_docs: List[Document]) -> None:
first_doc = selected_docs[0] first_doc = new_docs[0]
# set the default save location as the directory for the first document # set the default save location as the directory for the first document
save_path = os.path.dirname(first_doc.input_filename) save_path = os.path.dirname(first_doc.input_filename)
save_dir = os.path.basename(save_path) save_dir = os.path.basename(save_path)
self.save_location.setText(save_dir) self.save_location.setText(save_dir)
if len(selected_docs) == 1: if len(new_docs) == 1:
self.start_button.setText("Convert to Safe Document") self.start_button.setText("Convert to Safe Document")
self.docs_selected_label.setText(f"1 document selected") self.docs_selected_label.setText(f"1 document selected")
else: else:
self.start_button.setText("Convert to Safe Documents") self.start_button.setText("Convert to Safe Documents")
self.docs_selected_label.setText(f"{len(selected_docs)} documents selected") self.docs_selected_label.setText(f"{len(new_docs)} documents selected")
self.update_ui() self.update_ui()
# validations # validations
self.check_writeable_archive_dir(selected_docs) self.check_writeable_archive_dir(new_docs)
def select_output_directory(self) -> None: def select_output_directory(self) -> None:
dialog = QtWidgets.QFileDialog() dialog = QtWidgets.QFileDialog()
@ -623,9 +625,8 @@ class DocumentsListWidget(QtWidgets.QListWidget):
# to ensure docker-daemon detection logic runs first # to ensure docker-daemon detection logic runs first
self.thread_pool_initized = False self.thread_pool_initized = False
def documents_selected(self, selected_docs: List[Document]) -> None: def documents_added(self, new_docs: List[Document]) -> None:
for document in selected_docs: for document in new_docs:
self.dangerzone.add_document(document)
item = QtWidgets.QListWidgetItem() item = QtWidgets.QListWidgetItem()
item.setSizeHint(QtCore.QSize(500, 50)) item.setSizeHint(QtCore.QSize(500, 50))
widget = DocumentWidget(self.dangerzone, document) widget = DocumentWidget(self.dangerzone, document)