diff --git a/ppm2pwg b/ppm2pwg index 1190d25..ba8d015 160000 --- a/ppm2pwg +++ b/ppm2pwg @@ -1 +1 @@ -Subproject commit 1190d25aebe2c4fc3f04936479ace613f1482400 +Subproject commit ba8d015e911991d20dc1433292d7188e5e7ab8f9 diff --git a/src/ippprinter.cpp b/src/ippprinter.cpp index faeb1e8..dc6647b 100644 --- a/src/ippprinter.cpp +++ b/src/ippprinter.cpp @@ -7,6 +7,7 @@ #include Q_DECLARE_METATYPE(QMargins) +Q_DECLARE_METATYPE(IppMsg) IppPrinter::IppPrinter() : _worker(this) { @@ -19,14 +20,7 @@ IppPrinter::IppPrinter() : _worker(this) connect(this, &IppPrinter::doGetJobs, &_worker, &PrinterWorker::getJobs); connect(this, &IppPrinter::doCancelJob, &_worker, &PrinterWorker::cancelJob); connect(this, &IppPrinter::doIdentify, &_worker, &PrinterWorker::identify); - connect(this, &IppPrinter::doJustUpload, &_worker, &PrinterWorker::justUpload); - connect(this, &IppPrinter::doFixupPlaintext, &_worker, &PrinterWorker::fixupPlaintext); - connect(this, &IppPrinter::doPrintImageAsImage, &_worker, &PrinterWorker::printImageAsImage); - - connect(this, &IppPrinter::doConvertPdf, &_worker, &PrinterWorker::convertPdf); - connect(this, &IppPrinter::doConvertImage, &_worker, &PrinterWorker::convertImage); - connect(this, &IppPrinter::doConvertOfficeDocument, &_worker, &PrinterWorker::convertOfficeDocument); - connect(this, &IppPrinter::doConvertPlaintext, &_worker, &PrinterWorker::convertPlaintext); + connect(this, &IppPrinter::doPrint, &_worker, &PrinterWorker::print); connect(this, &IppPrinter::doGetStrings, &_worker, &PrinterWorker::getStrings); connect(this, &IppPrinter::doGetImage, &_worker, &PrinterWorker::getImage); @@ -36,6 +30,7 @@ IppPrinter::IppPrinter() : _worker(this) connect(&_worker, &PrinterWorker::failed, this, &IppPrinter::convertFailed); qRegisterMetaType(); + qRegisterMetaType(); _workerThread.start(); } @@ -656,8 +651,6 @@ void IppPrinter::print(QJsonObject jobAttrs, QString filename) return; } - bool knownTargetFormat = true; - if(targetFormat == Mimer::PDF) { Params.format = PrintParameters::PDF; @@ -676,7 +669,7 @@ void IppPrinter::print(QJsonObject jobAttrs, QString filename) } else { - knownTargetFormat = false; + Params.format = PrintParameters::Invalid; } QSizeF size = PaperSizes[Params.paperSizeName.c_str()]; @@ -713,63 +706,20 @@ void IppPrinter::print(QJsonObject jobAttrs, QString filename) qDebug() << "Final job attributes:" << jobAttrs; IppMsg job = mk_msg(o, jobAttrs); - Bytestream contents = job.encode(IppMsg::PrintJob); - setBusyMessage(tr("Preparing")); + QString Sides = getAttrOrDefault(jobAttrs, "sides").toString(); - if((mimeType == targetFormat) && (targetFormat == Mimer::Postscript)) - { // Can't process Postscript - emit doJustUpload(filename, contents); - } - else if((mimeType == targetFormat) && (targetFormat == Mimer::Plaintext)) + if(Sides=="two-sided-long-edge") { - emit doFixupPlaintext(filename, contents); + Params.duplex = true; } - else if((mimeType != Mimer::SVG) && mimer->isImage(mimeType) && mimer->isImage(targetFormat)) - { // Just make sure the image is in the desired format (and jpeg baseline-encoded), don't resize locally - emit doPrintImageAsImage(filename, contents, targetFormat); - } - else if(knownTargetFormat) // Params.format can be trusted + else if(Sides=="two-sided-short-edge") { - QString Sides = getAttrOrDefault(jobAttrs, "sides").toString(); - - if(Sides=="two-sided-long-edge") - { - Params.duplex = true; - } - else if(Sides=="two-sided-short-edge") - { - Params.duplex = true; - Params.tumble = true; - } - - if(mimeType == Mimer::PDF) - { - emit doConvertPdf(filename, contents, Params); - } - else if(mimeType == Mimer::Plaintext) - { - emit doConvertPlaintext(filename, contents, Params); - } - else if (Mimer::isImage(mimeType)) - { - emit doConvertImage(filename, contents, Params, margins); - } - else if(Mimer::isOffice(mimeType)) - { - emit doConvertOfficeDocument(filename, contents, Params); - } - else - { - emit convertFailed(tr("Cannot convert this file format")); - } - } - else - { - emit convertFailed(tr("Cannot convert this file format")); + Params.duplex = true; + Params.tumble = true; } - return; + emit doPrint(filename, mimeType, targetFormat, job, Params, margins); } bool IppPrinter::getJobs() { diff --git a/src/ippprinter.h b/src/ippprinter.h index a351996..a2df94c 100644 --- a/src/ippprinter.h +++ b/src/ippprinter.h @@ -72,6 +72,8 @@ signals: void doConvertPlaintext(QString filename, Bytestream header, PrintParameters Params); + void doPrint(QString filename, QString mimeType, QString targetFormat, IppMsg job, PrintParameters Params, QMargins margins); + void doGetStrings(QUrl url); void doGetImage(QUrl url); diff --git a/src/printerworker.cpp b/src/printerworker.cpp index 05a26ef..94752b9 100644 --- a/src/printerworker.cpp +++ b/src/printerworker.cpp @@ -64,9 +64,66 @@ void PrinterWorker::identify(Bytestream msg) cr.write((char*)msg.raw(), msg.size()); } +void PrinterWorker::print(QString filename, QString mimeType, QString targetFormat, IppMsg job, PrintParameters Params, QMargins margins) +{ + try { + Mimer* mimer = Mimer::instance(); + + Bytestream contents = job.encode(IppMsg::PrintJob); + + emit busyMessage(tr("Preparing")); + + + if((mimeType == targetFormat) && (targetFormat == Mimer::Postscript)) + { // Can't process Postscript + justUpload(filename, contents); + } + else if((mimeType == targetFormat) && (targetFormat == Mimer::Plaintext)) + { + fixupPlaintext(filename, contents); + } + else if((mimeType != Mimer::SVG) && mimer->isImage(mimeType) && mimer->isImage(targetFormat)) + { // Just make sure the image is in the desired format (and jpeg baseline-encoded), don't resize locally + printImageAsImage(filename, contents, targetFormat); + } + else if(Params.format != PrintParameters::Invalid) // Params.format can be trusted + { + if(mimeType == Mimer::PDF) + { + convertPdf(filename, contents, Params); + } + else if(mimeType == Mimer::Plaintext) + { + convertPlaintext(filename, contents, Params); + } + else if(Mimer::isImage(mimeType)) + { + convertImage(filename, contents, Params, margins); + } + else if(Mimer::isOffice(mimeType)) + { + convertOfficeDocument(filename, contents, Params); + } + else + { + emit failed(tr("Cannot convert this file format")); + } + } + else + { + emit failed(tr("Cannot convert this file format")); + } + + return; + } + catch(const ConvertFailedException& e) + { + emit failed(e.what() == QString("") ? tr("Print error") : e.what()); + } +} + void PrinterWorker::justUpload(QString filename, Bytestream header) { -try { emit busyMessage(tr("Printing")); CurlRequester cr(_printer->httpUrl()); @@ -80,18 +137,15 @@ try { OK(cr.write(tmp.data(), tmp.length())); file.close(); } -catch(const ConvertFailedException& e) -{ - emit failed(e.what() == QString("") ? tr("Upload error") : e.what()); -} -} void PrinterWorker::printImageAsImage(QString filename, Bytestream header, QString targetFormat) { -try { QString imageFormat = ""; QStringList supportedImageFormats = {Mimer::JPEG, Mimer::PNG}; + + qDebug() << ((IppPrinter*)parent())->_attrs; + if(targetFormat == Mimer::RBMP) { // ok @@ -174,15 +228,9 @@ try { OK(cr.write((char*)header.raw(), header.size())); OK(cr.write((char*)OutBts.raw(), OutBts.size())); } -catch(const ConvertFailedException& e) -{ - emit failed(e.what() == QString("") ? tr("Upload error") : e.what()); -} -} void PrinterWorker::fixupPlaintext(QString filename, Bytestream header) { -try { CurlRequester cr(_printer->httpUrl()); connect(&cr, &CurlRequester::done, _printer, &IppPrinter::printRequestFinished); @@ -219,15 +267,9 @@ try { OK(cr.write((char*)header.raw(), header.size())); OK(cr.write(outData.data(), outData.length())); } -catch(const ConvertFailedException& e) -{ - emit failed(e.what() == QString("") ? tr("Upload error") : e.what()); -} -} void PrinterWorker::convertPdf(QString filename, Bytestream header, PrintParameters Params) { -try { emit busyMessage(tr("Printing")); CurlRequester cr(_printer->httpUrl()); @@ -258,15 +300,9 @@ try { qDebug() << "Finished"; } -catch(const ConvertFailedException& e) -{ - emit failed(e.what() == QString("") ? tr("Conversion error") : e.what()); -} -} void PrinterWorker::convertImage(QString filename, Bytestream header, PrintParameters Params, QMargins margins) { -try { QString mimeType = Mimer::instance()->get_type(filename); if(Params.format == PrintParameters::URF && (Params.hwResW != Params.hwResH)) @@ -412,18 +448,10 @@ try { } qDebug() << "posted"; - -} -catch(const ConvertFailedException& e) -{ - emit failed(e.what() == QString("") ? tr("Conversion error") : e.what()); -} } void PrinterWorker::convertOfficeDocument(QString filename, Bytestream header, PrintParameters Params) { -try { - if(Params.format == PrintParameters::URF && (Params.hwResW != Params.hwResH)) { // URF only supports symmetric resolutions qDebug() << "Unsupported URF resolution"; @@ -477,18 +505,10 @@ try { convertPdf(tmpPdfFile.fileName(), header, Params); qDebug() << "posted"; - -} -catch(const ConvertFailedException& e) -{ - emit failed(e.what() == QString("") ? tr("Conversion error") : e.what()); -} } void PrinterWorker::convertPlaintext(QString filename, Bytestream header, PrintParameters Params) { -try { - if(!PaperSizes.contains(Params.paperSizeName.c_str())) { qDebug() << "Unsupported paper size" << Params.paperSizeName.c_str(); @@ -629,10 +649,4 @@ try { qDebug() << "Finished"; qDebug() << "posted"; - -} -catch(const ConvertFailedException& e) -{ - emit failed(e.what() == QString("") ? tr("Conversion error") : e.what()); -} } diff --git a/src/printerworker.h b/src/printerworker.h index acba431..b2321d8 100644 --- a/src/printerworker.h +++ b/src/printerworker.h @@ -2,6 +2,7 @@ #define PRINTERWORKER_H #include #include "curlrequester.h" +#include "ippmsg.h" #include "ppm2pwg/printparameters.h" class IppPrinter; @@ -37,20 +38,7 @@ public slots: void getJobs(Bytestream msg); void cancelJob(Bytestream msg); void identify(Bytestream msg); - - void justUpload(QString filename, Bytestream header); - - void printImageAsImage(QString filename, Bytestream header, QString targetFormat); - - void fixupPlaintext(QString filename, Bytestream header); - - void convertPdf(QString filename, Bytestream header, PrintParameters Params); - - void convertImage(QString filename, Bytestream header, PrintParameters Params, QMargins margins); - - void convertOfficeDocument(QString filename, Bytestream header, PrintParameters Params); - - void convertPlaintext(QString filename, Bytestream header, PrintParameters Params); + void print(QString filename, QString mimeType, QString targetFormat, IppMsg job, PrintParameters Params, QMargins margins); signals: void progress(qint64 done, qint64 pages); @@ -58,6 +46,13 @@ signals: void failed(QString message); private: + void justUpload(QString filename, Bytestream header); + void printImageAsImage(QString filename, Bytestream header, QString targetFormat); + void fixupPlaintext(QString filename, Bytestream header); + void convertPdf(QString filename, Bytestream header, PrintParameters Params); + void convertImage(QString filename, Bytestream header, PrintParameters Params, QMargins margins); + void convertOfficeDocument(QString filename, Bytestream header, PrintParameters Params); + void convertPlaintext(QString filename, Bytestream header, PrintParameters Params); IppPrinter* _printer; diff --git a/translations/harbour-seaprint-de.ts b/translations/harbour-seaprint-de.ts index 5b6b620..6810385 100644 --- a/translations/harbour-seaprint-de.ts +++ b/translations/harbour-seaprint-de.ts @@ -291,18 +291,10 @@ Failed to open file Öffnen der Datei fehlgeschlagen - - Cannot convert this file format - Dateiformat konnte nicht konvertiert werden - Unknown document format Unbekanntes Dokumentenformat - - Preparing - Vorbereiten - Unsupported paper size Nicht unterstütztes Papierformat @@ -484,10 +476,6 @@ auf diesem Drucker PrinterWorker - - Conversion error - Konvertierungsfehler - Failed to load image Bild konnte nicht geladen werden @@ -517,11 +505,19 @@ auf diesem Drucker Konvertierung fehlgeschlagen - Upload error - Übertragungsfehler + Unknown target format + - Unknown target format + Preparing + Vorbereiten + + + Cannot convert this file format + Dateiformat konnte nicht konvertiert werden + + + Print error diff --git a/translations/harbour-seaprint-es.ts b/translations/harbour-seaprint-es.ts index 607e402..372cbba 100644 --- a/translations/harbour-seaprint-es.ts +++ b/translations/harbour-seaprint-es.ts @@ -291,18 +291,10 @@ Failed to open file Error al abrir archivo - - Cannot convert this file format - No se puede convertir este formato de archivo - Unknown document format Formato de documento desconocido - - Preparing - Preparando - Unsupported paper size Tamaño de papel no soportado @@ -483,10 +475,6 @@ PrinterWorker - - Conversion error - Error de conversión - Failed to load image Error al cargar imagen @@ -516,11 +504,19 @@ Fallo en la conversión - Upload error - Error de carga + Unknown target format + - Unknown target format + Preparing + Preparando + + + Cannot convert this file format + No se puede convertir este formato de archivo + + + Print error diff --git a/translations/harbour-seaprint-fr.ts b/translations/harbour-seaprint-fr.ts index 35e55a3..303c2a4 100644 --- a/translations/harbour-seaprint-fr.ts +++ b/translations/harbour-seaprint-fr.ts @@ -291,18 +291,10 @@ Failed to open file Échec de l'ouverture du fichier - - Cannot convert this file format - Impossible de convertir ce format de fichier - Unknown document format Format de document inconnu - - Preparing - En cours de préparation - Unsupported paper size Taille de papier non prise en charge @@ -484,10 +476,6 @@ sur cette imprimante PrinterWorker - - Conversion error - Erreur de conversion - Failed to load image Chargement impossible de l'image @@ -517,11 +505,19 @@ sur cette imprimante Échec de la conversion - Upload error - Erreur de chargement + Unknown target format + - Unknown target format + Preparing + En cours de préparation + + + Cannot convert this file format + Impossible de convertir ce format de fichier + + + Print error diff --git a/translations/harbour-seaprint-nl.ts b/translations/harbour-seaprint-nl.ts index 82fc33b..aeb318b 100644 --- a/translations/harbour-seaprint-nl.ts +++ b/translations/harbour-seaprint-nl.ts @@ -291,18 +291,10 @@ Failed to open file Bestand openen mislukt - - Cannot convert this file format - Kan dit bestandsformaat niet converteren - Unknown document format Onbekend documentformaat - - Preparing - Voorbereiden - Unsupported paper size Niet-ondersteund papierformaat @@ -483,10 +475,6 @@ PrinterWorker - - Conversion error - Conversiefout - Failed to load image Afbeelding laden mislukt @@ -516,11 +504,19 @@ Conversie mislukt - Upload error - Uploadfout + Unknown target format + - Unknown target format + Preparing + Voorbereiden + + + Cannot convert this file format + Kan dit bestandsformaat niet converteren + + + Print error diff --git a/translations/harbour-seaprint-pl.ts b/translations/harbour-seaprint-pl.ts index b8eca97..9d9c0ff 100644 --- a/translations/harbour-seaprint-pl.ts +++ b/translations/harbour-seaprint-pl.ts @@ -295,14 +295,6 @@ Unknown document format - - Cannot convert this file format - - - - Preparing - - Unsupported paper size @@ -491,10 +483,6 @@ Unsupported PDF paper size - - Conversion error - - Unsupported paper size @@ -516,11 +504,19 @@ - Upload error + Unknown target format - Unknown target format + Preparing + + + + Cannot convert this file format + + + + Print error diff --git a/translations/harbour-seaprint-zh_CN.ts b/translations/harbour-seaprint-zh_CN.ts index 4128e1d..dcabb94 100644 --- a/translations/harbour-seaprint-zh_CN.ts +++ b/translations/harbour-seaprint-zh_CN.ts @@ -291,18 +291,10 @@ Failed to open file 打开文件失败 - - Cannot convert this file format - 无法转换此文件格式 - Unknown document format 未知文档格式 - - Preparing - - Unsupported paper size 纸张大小不受支持 @@ -483,10 +475,6 @@ PrinterWorker - - Conversion error - 转换错误 - Failed to load image 加载图像错误 @@ -516,11 +504,19 @@ - Upload error + Unknown target format - Unknown target format + Preparing + + + + Cannot convert this file format + 无法转换此文件格式 + + + Print error