From 519b8fd1b895c665469675c94e20f912fe2afe21 Mon Sep 17 00:00:00 2001 From: Guthrie McAfee Armstrong Date: Mon, 6 Jun 2022 21:31:33 -0400 Subject: [PATCH] Remove all instantiations of GlobalCommon, move Settings to GuiCommon --- dangerzone/cli.py | 6 +-- dangerzone/global_common.py | 11 +----- dangerzone/gui/__init__.py | 11 ++++-- dangerzone/gui/common.py | 15 +++----- dangerzone/gui/main_window.py | 65 ++++++++++++++------------------ dangerzone/{ => gui}/settings.py | 0 6 files changed, 46 insertions(+), 62 deletions(-) rename dangerzone/{ => gui}/settings.py (100%) diff --git a/dangerzone/cli.py b/dangerzone/cli.py index 2b7941b..a68b813 100644 --- a/dangerzone/cli.py +++ b/dangerzone/cli.py @@ -2,6 +2,7 @@ import os import sys import json import click +import colorama from colorama import Fore, Style # type: ignore from .global_common import GlobalCommon @@ -20,9 +21,8 @@ def print_header(s): @click.option("--ocr-lang", help="Language to OCR, defaults to none") @click.argument("filename", required=True) def cli_main(output_filename, ocr_lang, filename): - global_common = GlobalCommon() + colorama.init(autoreset=True) common = Common() - GlobalCommon.display_banner() # Validate filename @@ -90,7 +90,7 @@ def cli_main(output_filename, ocr_lang, filename): # Convert the document print_header("Converting document to safe PDF") - def stdout_callback(line): + def stdout_callback(line: str) -> None: try: status = json.loads(line) s = Style.BRIGHT + Fore.CYAN + f"{status['percentage']}% " diff --git a/dangerzone/global_common.py b/dangerzone/global_common.py index 25a07d9..305841c 100644 --- a/dangerzone/global_common.py +++ b/dangerzone/global_common.py @@ -1,25 +1,16 @@ import subprocess import gzip -import colorama from colorama import Fore, Back, Style import dangerzone -from dangerzone.settings import Settings import dangerzone.util as dzutil class GlobalCommon(object): """ - The GlobalCommon class is a singleton of shared functionality throughout the app + The GlobalCommon class contains functionality shared throughout the app """ - def __init__(self): - # Initialize terminal colors - colorama.init(autoreset=True) - - # Load settings - self.settings = Settings() - @staticmethod def display_banner(): """ diff --git a/dangerzone/gui/__init__.py b/dangerzone/gui/__init__.py index c93edcb..495f72d 100644 --- a/dangerzone/gui/__init__.py +++ b/dangerzone/gui/__init__.py @@ -7,11 +7,12 @@ from typing import Optional import click import uuid +import colorama + from .application import Application from .common import GuiCommon from .main_window import MainWindow from .systray import SysTray -from ..global_common import GlobalCommon @click.command() @@ -44,9 +45,11 @@ def gui_main(filename): # Create the Qt app app = Application() + # Initialize colorama + colorama.init(autoreset=True) + # Common objects - global_common = GlobalCommon() - gui_common = GuiCommon(app, global_common) + gui_common = GuiCommon(app) # Allow Ctrl-C to smoothly quit the program instead of throwing an exception signal.signal(signal.SIGINT, signal.SIG_DFL) @@ -71,7 +74,7 @@ def gui_main(filename): window: MainWindow = windows[list(windows.keys())[0]] else: window_id = uuid.uuid4().hex - window = MainWindow(global_common, gui_common, window_id) + window = MainWindow(gui_common, window_id) window.delete_window.connect(delete_window) windows[window_id] = window diff --git a/dangerzone/gui/common.py b/dangerzone/gui/common.py index 7782836..baa07d0 100644 --- a/dangerzone/gui/common.py +++ b/dangerzone/gui/common.py @@ -3,13 +3,11 @@ import platform import subprocess import shlex import pipes -from PySide6 import QtCore, QtGui, QtWidgets -from PySide6.QtGui import QIcon +from PySide6 import QtGui from colorama import Fore from . import Application -from ..global_common import GlobalCommon -import dangerzone.util as dzutil +from .settings import Settings if platform.system() == "Linux": from xdg.DesktopEntry import DesktopEntry # type: ignore @@ -20,13 +18,10 @@ class GuiCommon(object): The GuiCommon class is a singleton of shared functionality for the GUI """ - def __init__(self, app: Application, global_common: GlobalCommon): + def __init__(self, app: Application): # Qt app self.app = app - # Global common singleton - self.global_common = global_common - # Preload font self.fixed_font = QtGui.QFontDatabase.systemFont(QtGui.QFontDatabase.FixedFont) @@ -36,6 +31,8 @@ class GuiCommon(object): # Are we done waiting (for Docker Desktop to be installed, or for container to install) self.is_waiting_finished = False + self.settings = Settings() + def open_pdf_viewer(self, filename: str): if platform.system() == "Darwin": # Open in Preview @@ -49,7 +46,7 @@ class GuiCommon(object): elif platform.system() == "Linux": # Get the PDF reader command args = shlex.split( - self.pdf_viewers[self.global_common.settings.get("open_app")] + self.pdf_viewers[self.settings.get("open_app")] ) # %f, %F, %u, and %U are filenames or URLS -- so replace with the file to open for i in range(len(args)): diff --git a/dangerzone/gui/main_window.py b/dangerzone/gui/main_window.py index 4895029..5c2229c 100644 --- a/dangerzone/gui/main_window.py +++ b/dangerzone/gui/main_window.py @@ -18,9 +18,8 @@ from ..global_common import GlobalCommon class MainWindow(QtWidgets.QMainWindow): delete_window = QtCore.Signal(str) - def __init__(self, global_common: GlobalCommon, gui_common: GuiCommon, window_id: str): + def __init__(self, gui_common: GuiCommon, window_id: str): super(MainWindow, self).__init__() - self.global_common = global_common self.gui_common = gui_common self.window_id = window_id self.common = Common() @@ -49,12 +48,12 @@ class MainWindow(QtWidgets.QMainWindow): header_layout.addStretch() # Waiting widget, replaces content widget while container runtime isn't available - self.waiting_widget = WaitingWidget(self.global_common, self.gui_common) + self.waiting_widget = WaitingWidget(self.gui_common) self.waiting_widget.finished.connect(self.waiting_finished) # Content widget, contains all the window content except waiting widget self.content_widget = ContentWidget( - self.global_common, self.gui_common, self.common + self.gui_common, self.common ) self.content_widget.close_window.connect(self.close) @@ -94,12 +93,11 @@ class MainWindow(QtWidgets.QMainWindow): class InstallContainerThread(QtCore.QThread): finished = QtCore.Signal() - def __init__(self, global_common: GlobalCommon): + def __init__(self): super(InstallContainerThread, self).__init__() - self.global_common = global_common def run(self): - self.global_common.install_container() + GlobalCommon.install_container() self.finished.emit() @@ -115,9 +113,8 @@ class WaitingWidget(QtWidgets.QWidget): # - "install_container" finished = QtCore.Signal() - def __init__(self, global_common: GlobalCommon, gui_common: GuiCommon): + def __init__(self, gui_common: GuiCommon): super(WaitingWidget, self).__init__() - self.global_common = global_common self.gui_common = gui_common self.label = QtWidgets.QLabel() @@ -196,7 +193,7 @@ class WaitingWidget(QtWidgets.QWidget): "Installing the Dangerzone container image.

This might take a few minutes..." ) self.buttons.hide() - self.install_container_t = InstallContainerThread(self.global_common) + self.install_container_t = InstallContainerThread() self.install_container_t.finished.connect(self.finished) self.install_container_t.start() @@ -204,10 +201,8 @@ class WaitingWidget(QtWidgets.QWidget): class ContentWidget(QtWidgets.QWidget): close_window = QtCore.Signal() - def __init__(self, global_common: GlobalCommon, gui_common: GuiCommon, common: Common): + def __init__(self, gui_common: GuiCommon, common: Common): super(ContentWidget, self).__init__() - - self.global_common = global_common self.gui_common = gui_common self.common = common @@ -217,7 +212,7 @@ class ContentWidget(QtWidgets.QWidget): # Settings self.settings_widget = SettingsWidget( - self.global_common, self.gui_common, self.common + self.gui_common, self.common ) self.doc_selection_widget.document_selected.connect( self.settings_widget.document_selected @@ -228,7 +223,7 @@ class ContentWidget(QtWidgets.QWidget): # Convert self.convert_widget = ConvertWidget( - self.global_common, self.gui_common, self.common + self.gui_common, self.common ) self.convert_widget.close_window.connect(self._close_window) self.doc_selection_widget.document_selected.connect( @@ -302,9 +297,8 @@ class SettingsWidget(QtWidgets.QWidget): start_clicked = QtCore.Signal() close_window = QtCore.Signal() - def __init__(self, global_common: GlobalCommon, gui_common: GuiCommon, common: Common): + def __init__(self, gui_common: GuiCommon, common: Common): super(SettingsWidget, self).__init__() - self.global_common = global_common self.gui_common = gui_common self.common = common @@ -395,31 +389,31 @@ class SettingsWidget(QtWidgets.QWidget): self.setLayout(layout) # Load values from settings - if self.global_common.settings.get("save"): + if self.gui_common.settings.get("save"): self.save_checkbox.setCheckState(QtCore.Qt.Checked) else: self.save_checkbox.setCheckState(QtCore.Qt.Unchecked) - if self.global_common.settings.get("ocr"): + if self.gui_common.settings.get("ocr"): self.ocr_checkbox.setCheckState(QtCore.Qt.Checked) else: self.ocr_checkbox.setCheckState(QtCore.Qt.Unchecked) index = self.ocr_combobox.findText( - self.global_common.settings.get("ocr_language") + self.gui_common.settings.get("ocr_language") ) if index != -1: self.ocr_combobox.setCurrentIndex(index) if platform.system() == "Darwin" or platform.system() == "Linux": - if self.global_common.settings.get("open"): + if self.gui_common.settings.get("open"): self.open_checkbox.setCheckState(QtCore.Qt.Checked) else: self.open_checkbox.setCheckState(QtCore.Qt.Unchecked) if platform.system() == "Linux": index = self.open_combobox.findText( - self.global_common.settings.get("open_app") + self.gui_common.settings.get("open_app") ) if index != -1: self.open_combobox.setCurrentIndex(index) @@ -468,22 +462,22 @@ class SettingsWidget(QtWidgets.QWidget): self.common.output_filename = tmp[1] # Update settings - self.global_common.settings.set( + self.gui_common.settings.set( "save", self.save_checkbox.checkState() == QtCore.Qt.Checked ) - self.global_common.settings.set( + self.gui_common.settings.set( "ocr", self.ocr_checkbox.checkState() == QtCore.Qt.Checked ) - self.global_common.settings.set("ocr_language", self.ocr_combobox.currentText()) + self.gui_common.settings.set("ocr_language", self.ocr_combobox.currentText()) if platform.system() == "Darwin" or platform.system() == "Linux": - self.global_common.settings.set( + self.gui_common.settings.set( "open", self.open_checkbox.checkState() == QtCore.Qt.Checked ) if platform.system() == "Linux": - self.global_common.settings.set( + self.gui_common.settings.set( "open_app", self.open_combobox.currentText() ) - self.global_common.settings.save() + self.gui_common.settings.save() # Start! self.start_clicked.emit() @@ -493,16 +487,16 @@ class ConvertThread(QtCore.QThread): is_finished = QtCore.Signal(bool) update = QtCore.Signal(bool, str, int) - def __init__(self, global_common: GlobalCommon, common: Common): + def __init__(self, gui_common: GuiCommon, common: Common): super(ConvertThread, self).__init__() - self.global_common = global_common + self.gui_common = gui_common self.common = common self.error = False def run(self): - if self.global_common.settings.get("ocr"): + if self.gui_common.settings.get("ocr"): ocr_lang = dzutil.OCR_LANGUAGES[ - self.global_common.settings.get("ocr_language") + self.gui_common.settings.get("ocr_language") ] else: ocr_lang = None @@ -540,9 +534,8 @@ class ConvertThread(QtCore.QThread): class ConvertWidget(QtWidgets.QWidget): close_window = QtCore.Signal() - def __init__(self, global_common: GlobalCommon, gui_common: GuiCommon, common: Common): + def __init__(self, gui_common: GuiCommon, common: Common): super(ConvertWidget, self).__init__() - self.global_common = global_common self.gui_common = gui_common self.common = common @@ -594,7 +587,7 @@ class ConvertWidget(QtWidgets.QWidget): ) def start(self): - self.convert_t = ConvertThread(self.global_common, self.common) + self.convert_t = ConvertThread(self.gui_common, self.common) self.convert_t.update.connect(self.update) self.convert_t.finished.connect(self.all_done) self.convert_t.start() @@ -622,7 +615,7 @@ class ConvertWidget(QtWidgets.QWidget): ) # Open - if self.global_common.settings.get("open"): + if self.gui_common.settings.get("open"): self.gui_common.open_pdf_viewer(self.common.output_filename) # Quit diff --git a/dangerzone/settings.py b/dangerzone/gui/settings.py similarity index 100% rename from dangerzone/settings.py rename to dangerzone/gui/settings.py