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