From f80031c52c36d14d518c8e249f8f29a480df0980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Hu=C5=A1ek?= <husek@iuuk.mff.cuni.cz> Date: Wed, 18 Oct 2017 21:20:11 +0200 Subject: [PATCH] make use of config --- cups-pdf-postprocess.py | 75 +++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/cups-pdf-postprocess.py b/cups-pdf-postprocess.py index e3602f9..9da6843 100755 --- a/cups-pdf-postprocess.py +++ b/cups-pdf-postprocess.py @@ -64,24 +64,45 @@ class CPP(QWidget): super().__init__() self._pdf = pdf self._config = config + self._defaults = self._config.get("defaults", {}) + self.init_printers() + self.init_gui() + + self.show() + + + def init_printers(self): + self._save_as_file = object() + + self._printers = self._config.get("printers", []) + self._printers.append(("Save as ...", self._save_as_file)) + + for l in sp.check_output(["lpstat", "-a"]).decode("UTF-8").split("\n"): + p = l.split(" ")[0] + if p == "": + continue + self._printers.append((p, ["lp", "-d", p])) + + + def init_gui(self): vbox = QVBoxLayout() vbox.addStretch(1) - o = QLabel("Printing %s" % (pdf,), self) + o = QLabel("Printing %s" % (self._pdf,), self) o.setMinimumWidth(400) o.setMaximumWidth(800) o.setWordWrap(True) vbox.addWidget(o) - def margin_spinbox(name, layout): + def margin_spinbox(name, layout, margin_id): hbox = QHBoxLayout() hbox.addWidget(QLabel(name)) s = QSpinBox(self) s.setMinimum(0) s.setMaximum(100) s.setSingleStep(1) - s.setValue(20) + s.setValue(self._defaults.get("crop_margins", [20, 20, 20, 20])[margin_id]) s.setEnabled(False) hbox.addWidget(s) layout.addLayout(hbox) @@ -93,10 +114,10 @@ class CPP(QWidget): _vbox = QVBoxLayout() _vbox.addWidget(QLabel("Margins [mm]")) self._crop_margin = ( - margin_spinbox("Left", _vbox), - margin_spinbox("Top", _vbox), - margin_spinbox("Right", _vbox), - margin_spinbox("Bottom", _vbox), + margin_spinbox("Left", _vbox, 0), + margin_spinbox("Top", _vbox, 1), + margin_spinbox("Right", _vbox, 2), + margin_spinbox("Bottom", _vbox, 3), ) hbox.addLayout(_vbox) vbox.addLayout(hbox) @@ -105,6 +126,9 @@ class CPP(QWidget): for m in self._crop_margin: m.setEnabled(checked) self._crop.clicked[bool].connect(_crop_changed) + if self._defaults.get("crop", False): + self._crop.setChecked(True) + _crop_changed(True) hbox = QHBoxLayout() self._compact = QCheckBox('Co&mpact', self) @@ -112,7 +136,7 @@ class CPP(QWidget): self._compact_copies.setMinimum(1) self._compact_copies.setMaximum(1000) self._compact_copies.setSingleStep(1) - self._compact_copies.setValue(1) + self._compact_copies.setValue(self._defaults.get("copies", 1)) self._compact_copies.setEnabled(False) def _compact_changed(enabled): @@ -122,11 +146,12 @@ class CPP(QWidget): self._duplex.setCurrentIndex(1) self._pdfbook.setChecked(False) _pdfbook_changed(False) - else: - self._compact_copies.setValue(1) self._duplex.setEnabled(not enabled) self._compact.clicked[bool].connect(_compact_changed) + if self._defaults.get("compact", False): + self._compact.setChecked(True) + _compact_changed(True) hbox.addWidget(self._compact) hbox.addWidget(self._compact_copies) @@ -148,17 +173,21 @@ class CPP(QWidget): self._duplex.setEnabled(not enabled) if enabled: self._duplex.setCurrentIndex(1) - else: - self._staple.setChecked(False) self._pdfbook.clicked[bool].connect(_pdfbook_changed) + if self._defaults.get("pdfbook", False): + self._pdfbook.setChecked(True) + _pdfbook_changed(True) + if self._defaults.get("staple", False): + self._staple.setChecked(True) + hbox.addWidget(self._duplex) vbox.addLayout(hbox) vbox.addWidget(self._pdfbook) vbox.addWidget(self._staple) o = QComboBox(self) - for (p, cmd) in PRINTERS: + for (p, cmd) in self._printers: o.addItem(p, cmd) vbox.addWidget(o) self._printer = o @@ -180,7 +209,6 @@ class CPP(QWidget): self.setLayout(vbox) self.setWindowTitle('CUPS pdf printer postprocessor') - self.show() def print(self): @@ -207,7 +235,7 @@ class CPP(QWidget): pipeline.append([ "%s/print_compact.sh" % DIR, "%i" % self._compact_copies.value() ]) - if self._printer.currentData() is SAVE_AS_FILE: + if self._printer.currentData() is self._save_as_file: f = QFileDialog.getSaveFileName(self, 'Save as ...') if not f[0]: self.close() @@ -223,6 +251,7 @@ class CPP(QWidget): exec_pipeline(pipeline, self._pdf, err_callback=logMsg) self._button_cancel.setText("&Close") + DIR = os.path.dirname(os.path.realpath(sys.argv[0])) if __name__ == '__main__': @@ -236,16 +265,12 @@ if __name__ == '__main__': with open(CONFIG_FILE) as config: CONFIG = ast.literal_eval("{\n%s\n}" % config.read()) - SAVE_AS_FILE = object() - - PRINTERS = CONFIG.get("printers", []) - PRINTERS.append(("Save as ...", SAVE_AS_FILE)) - - for l in sp.check_output(["lpstat", "-a"]).decode("UTF-8").split("\n"): - p = l.split(" ")[0] - if p == "": - continue - PRINTERS.append((p, ["lp", "-d", p])) + # env must be fixed before we create Qt stuff + for var, val in CONFIG.get("enviroment", {}).items(): + if val is None: + del os.environ[var] + else: + os.environ[var] = val app = QApplication(args[2:]) ex = CPP(CONFIG, args[1], args[2]) -- GitLab