In Windows, disable opening of safe PDF, make saving PDF required, and after safe PDF has been created, open Windows explorer with the safe PDF selected

This commit is contained in:
Micah Lee 2020-02-20 16:53:25 -08:00
parent d01f2eedea
commit 931effc7ce
No known key found for this signature in database
GPG key ID: 403C2657CD994F73
4 changed files with 64 additions and 34 deletions

View file

@ -1,5 +1,6 @@
import os import os
import subprocess import subprocess
import platform
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
@ -20,28 +21,40 @@ class SettingsWidget(QtWidgets.QWidget):
# Save safe version # Save safe version
self.save_checkbox = QtWidgets.QCheckBox("Save safe PDF") self.save_checkbox = QtWidgets.QCheckBox("Save safe PDF")
self.save_checkbox.clicked.connect(self.update_ui) self.save_checkbox.clicked.connect(self.update_ui)
self.save_label = QtWidgets.QLabel("Save safe PDF") # For Windows
self.save_label.hide()
if platform.system() == "Windows":
# In Windows, users must save the PDF, since they can't open it
self.save_checkbox.setCheckState(QtCore.Qt.Checked)
self.save_checkbox.setEnabled(False)
self.save_checkbox.hide()
self.save_label.show()
self.save_lineedit = QtWidgets.QLineEdit() self.save_lineedit = QtWidgets.QLineEdit()
self.save_lineedit.setReadOnly(True) self.save_lineedit.setReadOnly(True)
self.save_browse_button = QtWidgets.QPushButton("Save as...") self.save_browse_button = QtWidgets.QPushButton("Save as...")
self.save_browse_button.clicked.connect(self.save_browse_button_clicked) self.save_browse_button.clicked.connect(self.save_browse_button_clicked)
save_layout = QtWidgets.QHBoxLayout() save_layout = QtWidgets.QHBoxLayout()
save_layout.addWidget(self.save_checkbox) save_layout.addWidget(self.save_checkbox)
save_layout.addWidget(self.save_label)
save_layout.addWidget(self.save_lineedit) save_layout.addWidget(self.save_lineedit)
save_layout.addWidget(self.save_browse_button) save_layout.addWidget(self.save_browse_button)
save_layout.addStretch() save_layout.addStretch()
# Open safe document if platform.system() != "Windows":
self.open_checkbox = QtWidgets.QCheckBox( # Open safe document
"Open safe document after converting, using" self.open_checkbox = QtWidgets.QCheckBox(
) "Open safe document after converting, using"
self.open_checkbox.clicked.connect(self.update_ui) )
self.open_combobox = QtWidgets.QComboBox() self.open_checkbox.clicked.connect(self.update_ui)
for k in self.common.pdf_viewers: self.open_combobox = QtWidgets.QComboBox()
self.open_combobox.addItem(k, QtCore.QVariant(self.common.pdf_viewers[k])) for k in self.common.pdf_viewers:
open_layout = QtWidgets.QHBoxLayout() self.open_combobox.addItem(
open_layout.addWidget(self.open_checkbox) k, QtCore.QVariant(self.common.pdf_viewers[k])
open_layout.addWidget(self.open_combobox) )
open_layout.addStretch() open_layout = QtWidgets.QHBoxLayout()
open_layout.addWidget(self.open_checkbox)
open_layout.addWidget(self.open_combobox)
open_layout.addStretch()
# OCR document # OCR document
self.ocr_checkbox = QtWidgets.QCheckBox("OCR document, language") self.ocr_checkbox = QtWidgets.QCheckBox("OCR document, language")
@ -75,7 +88,8 @@ class SettingsWidget(QtWidgets.QWidget):
layout.addWidget(self.dangerous_doc_label) layout.addWidget(self.dangerous_doc_label)
layout.addSpacing(20) layout.addSpacing(20)
layout.addLayout(save_layout) layout.addLayout(save_layout)
layout.addLayout(open_layout) if platform.system() != "Windows":
layout.addLayout(open_layout)
layout.addLayout(ocr_layout) layout.addLayout(ocr_layout)
layout.addLayout(update_layout) layout.addLayout(update_layout)
layout.addSpacing(20) layout.addSpacing(20)
@ -98,14 +112,15 @@ class SettingsWidget(QtWidgets.QWidget):
if index != -1: if index != -1:
self.ocr_combobox.setCurrentIndex(index) self.ocr_combobox.setCurrentIndex(index)
if self.common.settings.get("open"): if platform.system() != "Windows":
self.open_checkbox.setCheckState(QtCore.Qt.Checked) if self.common.settings.get("open"):
else: self.open_checkbox.setCheckState(QtCore.Qt.Checked)
self.open_checkbox.setCheckState(QtCore.Qt.Unchecked) else:
self.open_checkbox.setCheckState(QtCore.Qt.Unchecked)
index = self.open_combobox.findText(self.common.settings.get("open_app")) index = self.open_combobox.findText(self.common.settings.get("open_app"))
if index != -1: if index != -1:
self.open_combobox.setCurrentIndex(index) self.open_combobox.setCurrentIndex(index)
if self.common.settings.get("update_container"): if self.common.settings.get("update_container"):
self.update_checkbox.setCheckState(QtCore.Qt.Checked) self.update_checkbox.setCheckState(QtCore.Qt.Checked)
@ -122,14 +137,19 @@ class SettingsWidget(QtWidgets.QWidget):
self.update_checkbox.setEnabled(False) self.update_checkbox.setEnabled(False)
def update_ui(self): def update_ui(self):
# Either save or open must be checked if platform.system() == "Windows":
if ( # Because the save checkbox is always checked in Windows, the
self.save_checkbox.checkState() == QtCore.Qt.Checked # start button can be enabled
or self.open_checkbox.checkState() == QtCore.Qt.Checked
):
self.start_button.setEnabled(True) self.start_button.setEnabled(True)
else: else:
self.start_button.setEnabled(False) # Either save or open must be checked
if (
self.save_checkbox.checkState() == QtCore.Qt.Checked
or self.open_checkbox.checkState() == QtCore.Qt.Checked
):
self.start_button.setEnabled(True)
else:
self.start_button.setEnabled(False)
def document_selected(self): def document_selected(self):
# Update the danger doc label # Update the danger doc label
@ -163,10 +183,11 @@ class SettingsWidget(QtWidgets.QWidget):
"ocr", self.ocr_checkbox.checkState() == QtCore.Qt.Checked "ocr", self.ocr_checkbox.checkState() == QtCore.Qt.Checked
) )
self.common.settings.set("ocr_language", self.ocr_combobox.currentText()) self.common.settings.set("ocr_language", self.ocr_combobox.currentText())
self.common.settings.set( if platform.system() != "Windows":
"open", self.open_checkbox.checkState() == QtCore.Qt.Checked self.common.settings.set(
) "open", self.open_checkbox.checkState() == QtCore.Qt.Checked
self.common.settings.set("open_app", self.open_combobox.currentText()) )
self.common.settings.set("open_app", self.open_combobox.currentText())
self.common.settings.set( self.common.settings.set(
"update_container", self.update_checkbox.checkState() == QtCore.Qt.Checked "update_container", self.update_checkbox.checkState() == QtCore.Qt.Checked
) )

View file

@ -1,6 +1,8 @@
import shutil import shutil
import tempfile import tempfile
import os import os
import platform
import subprocess
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from .tasks import PullImageTask, BuildContainerTask, ConvertToPixels, ConvertToPDF from .tasks import PullImageTask, BuildContainerTask, ConvertToPixels, ConvertToPDF
@ -97,6 +99,13 @@ class TasksWidget(QtWidgets.QWidget):
dest_filename = tmp[1] dest_filename = tmp[1]
shutil.move(source_filename, dest_filename) shutil.move(source_filename, dest_filename)
# In Windows, open Explorer with the safe PDF in focus
if platform.system() == "Windows":
dest_filename_windows = dest_filename.replace("/", "\\")
subprocess.Popen(
f'explorer.exe /select,"{dest_filename_windows}"', shell=True
)
# Open # Open
if self.common.settings.get("open"): if self.common.settings.get("open"):
self.common.open_pdf_viewer(dest_filename) self.common.open_pdf_viewer(dest_filename)

4
poetry.lock generated
View file

@ -204,7 +204,7 @@ version = "12.7.1"
[[package]] [[package]]
category = "main" category = "main"
description = "Python for Window Extensions" description = "Python for Window Extensions"
marker = "sys_platform == \"win32\"" marker = "sys_platform == \"windows\""
name = "pywin32" name = "pywin32"
optional = false optional = false
python-versions = "*" python-versions = "*"
@ -284,7 +284,7 @@ python-versions = "*"
version = "1.4.9" version = "1.4.9"
[metadata] [metadata]
content-hash = "28c51f60ace8c8578c21279f8c46ba095d0ec1f1f86bb155c24cba67ac3291ee" content-hash = "8a375835b3ed53e46bb4aaf31cb5cca43d33ed03ac217cf247ed65724d3ee3a8"
python-versions = "^3.7" python-versions = "^3.7"
[metadata.files] [metadata.files]

View file

@ -15,13 +15,13 @@ pyxdg = {version = "^0.26", platform = "linux"}
pyobjc-core = {version = "^6.1", platform = "darwin"} pyobjc-core = {version = "^6.1", platform = "darwin"}
pyobjc-framework-launchservices = {version = "^6.1", platform = "darwin"} pyobjc-framework-launchservices = {version = "^6.1", platform = "darwin"}
macholib = "^1.14" macholib = "^1.14"
pywin32 = {version = "^227", platform = "win32"} pywin32 = {version = "^227", platform = "windows"}
wmi = {version = "^1.4.9", platform = "windows"} wmi = {version = "^1.4.9", platform = "windows"}
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
black = "^19.10b0" black = "^19.10b0"
pyinstaller = {version = "^3.6", platform = "darwin"} pyinstaller = {version = "^3.6", platform = "darwin"}
setuptools = {version = "^45.2.0", platform = "win32"} setuptools = {version = "^45.2.0", platform = "windows"}
[build-system] [build-system]
requires = ["poetry>=0.12"] requires = ["poetry>=0.12"]