Skip to content

Commit dd19333

Browse files
committed
Support printing plaintext as plaintext
It will be converted ro \r\n linebraks, but still has lowest prio for printing plaintext input due to unreliable rendering.
1 parent b1cd524 commit dd19333

12 files changed

+141
-14
lines changed

qml/harbour-seaprint.qml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ ApplicationWindow
7979
{
8080
return {simple: "image", translatable: qsTr("images")};
8181
}
82+
else if(mimetype == Mimer.Plaintext)
83+
{
84+
return {simple: "plaintext", translatable: qsTr("plaintext")};
85+
}
8286
else
8387
{
8488
return {simple: "document", translatable: qsTr("documents")};

qml/pages/utils.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,21 @@ function supported_formats(printer, considerAdditionalFormats)
2626
{
2727
pdf = true;
2828
mimetypes.push(Mimer.Mimer.PDF);
29-
plaintext = true;
30-
mimetypes.push(Mimer.Mimer.Plaintext);
3129
}
30+
3231
if(has(formats, Mimer.Mimer.Postscript))
3332
{
3433
postscript = true;
3534
mimetypes.push(Mimer.Mimer.Postscript);
3635
}
3736

38-
if((ConvertChecker.ConvertChecker.calligra) &&
39-
( has(formats, Mimer.Mimer.PDF) || has(formats, Mimer.Mimer.Postscript) || raster ))
37+
if(pdf || has(formats, Mimer.Mimer.Plaintext))
38+
{
39+
plaintext = true;
40+
mimetypes.push(Mimer.Mimer.Plaintext);
41+
}
42+
43+
if((ConvertChecker.ConvertChecker.calligra) && pdf)
4044
{
4145
office = true;
4246
mimetypes = mimetypes.concat(Mimer.Mimer.OfficeFormats);
@@ -243,6 +247,8 @@ function ippName(name, value, printerStrings)
243247
return qsTr("PDF");
244248
case Mimer.Mimer.Postscript:
245249
return qsTr("Postscript");
250+
case Mimer.Mimer.Plaintext:
251+
return qsTr("Plaintext");
246252
case Mimer.Mimer.PWG:
247253
return qsTr("PWG-raster");
248254
case Mimer.Mimer.URF:
@@ -372,10 +378,12 @@ function endsWith(ending, string)
372378
return string.lastIndexOf(ending) == (string.length - ending.length);
373379
}
374380

381+
var pdfTargets = [Mimer.Mimer.OctetStream, Mimer.Mimer.PDF, Mimer.Mimer.Postscript, Mimer.Mimer.PWG, Mimer.Mimer.URF];
382+
383+
375384
function canConvertPdfTo(type)
376385
{
377-
var targets = [Mimer.Mimer.OctetStream, Mimer.Mimer.PDF, Mimer.Mimer.Postscript, Mimer.Mimer.PWG, Mimer.Mimer.URF];
378-
return has(targets, type)
386+
return has(pdfTargets, type)
379387
}
380388

381389
function canTransferPostscriptAs(type)
@@ -384,12 +392,19 @@ function canTransferPostscriptAs(type)
384392
return has(targets, type)
385393
}
386394

387-
function canConvertOfficeDocumentTo(type)
395+
function canConvertPlaintextTo(type)
388396
{
389-
var targets = [Mimer.Mimer.OctetStream, Mimer.Mimer.PDF, Mimer.Mimer.Postscript, Mimer.Mimer.PWG, Mimer.Mimer.URF];
397+
var targets = pdfTargets;
398+
targets.push(Mimer.Mimer.Plaintext);
390399
return has(targets, type)
391400
}
392401

402+
403+
function canConvertOfficeDocumentTo(type)
404+
{
405+
return has(pdfTargets, type)
406+
}
407+
393408
function canConvertImageTo(type)
394409
{
395410
var targets = [Mimer.Mimer.OctetStream, Mimer.Mimer.JPEG, Mimer.Mimer.PNG, Mimer.Mimer.PWG, Mimer.Mimer.URF, Mimer.Mimer.PDF, Mimer.Mimer.Postscript];
@@ -417,8 +432,7 @@ function fixupChoices(name, choices, mimeType)
417432
}
418433
else if(mimeType == Mimer.Mimer.Plaintext)
419434
{
420-
// We convert plaintext to PDF internally
421-
return choices.filter(canConvertPdfTo)
435+
return choices.filter(canConvertPlaintextTo)
422436
}
423437
else if(mimeType == Mimer.Mimer.Postscript)
424438
{

src/ippprinter.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ IppPrinter::IppPrinter() : _worker(this)
1818
connect(this, &IppPrinter::doGetJobs, &_worker, &PrinterWorker::getJobs);
1919
connect(this, &IppPrinter::doCancelJob, &_worker, &PrinterWorker::cancelJob);
2020
connect(this, &IppPrinter::doJustUpload, &_worker, &PrinterWorker::justUpload);
21+
connect(this, &IppPrinter::doFixupPlaintext, &_worker, &PrinterWorker::fixupPlaintext);
2122
connect(this, &IppPrinter::doFixupJpeg, &_worker, &PrinterWorker::fixupJpeg);
2223

2324
connect(this, &IppPrinter::doConvertPdf, &_worker, &PrinterWorker::convertPdf);
@@ -354,17 +355,22 @@ QString targetFormatIfAuto(QString documentFormat, QString mimeType, QJsonArray
354355
{
355356
if(documentFormat == Mimer::OctetStream)
356357
{
357-
if(mimeType == Mimer::PDF || mimeType == Mimer::Plaintext)
358+
QStringList PdfPrioList = {Mimer::PDF, Mimer::Postscript, Mimer::PWG, Mimer::URF};
359+
if(mimeType == Mimer::PDF)
358360
{
359-
return firstMatch(supportedMimeTypes, {Mimer::PDF, Mimer::Postscript, Mimer::PWG, Mimer::URF });
361+
return firstMatch(supportedMimeTypes, PdfPrioList);
360362
}
361363
else if(mimeType == Mimer::Postscript)
362364
{
363365
return firstMatch(supportedMimeTypes, {Mimer::Postscript});
364366
}
367+
else if(mimeType == Mimer::Plaintext)
368+
{
369+
return firstMatch(supportedMimeTypes, PdfPrioList << Mimer::Plaintext);
370+
}
365371
else if(Mimer::isOffice(mimeType))
366372
{
367-
return firstMatch(supportedMimeTypes, {Mimer::PDF, Mimer::Postscript, Mimer::PWG, Mimer::URF });
373+
return firstMatch(supportedMimeTypes, PdfPrioList);
368374
}
369375
else if(Mimer::isImage(mimeType))
370376
{
@@ -697,7 +703,14 @@ void IppPrinter::print(QJsonObject jobAttrs, QString filename)
697703
}
698704
else if(mimeType == Mimer::Plaintext)
699705
{
700-
emit doConvertPlaintext(filename, contents, Params);
706+
if(targetFormat == Mimer::Plaintext)
707+
{
708+
emit doFixupPlaintext(filename, contents);
709+
}
710+
else
711+
{
712+
emit doConvertPlaintext(filename, contents, Params);
713+
}
701714
}
702715
else if (Mimer::isImage(mimeType))
703716
{

src/ippprinter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class IppPrinter : public QObject
5959
void doCancelJob(Bytestream msg);
6060

6161
void doJustUpload(QString filename, Bytestream header);
62+
void doFixupPlaintext(QString filename, Bytestream header);
6263
void doFixupJpeg(QString filename, Bytestream header);
6364

6465
void doConvertPdf(QString filename, Bytestream header, PrintParameters Params);

src/printerworker.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,51 @@ catch(const ConvertFailedException& e)
101101
}
102102
}
103103

104+
void PrinterWorker::fixupPlaintext(QString filename, Bytestream header)
105+
{
106+
try {
107+
CurlRequester cr(_printer->httpUrl());
108+
connect(&cr, &CurlRequester::done, _printer, &IppPrinter::printRequestFinished);
109+
110+
QFile inFile(filename);
111+
if(!inFile.open(QIODevice::ReadOnly))
112+
{
113+
throw ConvertFailedException(tr("Failed to open file"));
114+
}
115+
116+
QString allText = inFile.readAll();
117+
if(allText.startsWith("\f"))
118+
{
119+
allText.remove(0, 1);
120+
}
121+
122+
if(allText.endsWith("\f"))
123+
{
124+
allText.chop(1);
125+
}
126+
else if(allText.endsWith("\f\n"))
127+
{
128+
allText.chop(2);
129+
}
130+
131+
QStringList lines;
132+
133+
foreach(QString rnline, allText.split("\r\n"))
134+
{
135+
lines.append(rnline.split("\n"));
136+
}
137+
138+
QByteArray outData = lines.join("\r\n").toUtf8();
139+
140+
OK(cr.write((char*)header.raw(), header.size()));
141+
OK(cr.write(outData.data(), outData.length()));
142+
}
143+
catch(const ConvertFailedException& e)
144+
{
145+
emit failed(e.what() == QString("") ? tr("Upload error") : e.what());
146+
}
147+
}
148+
104149
void PrinterWorker::convertPdf(QString filename, Bytestream header, PrintParameters Params)
105150
{
106151
try {

src/printerworker.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public slots:
4141

4242
void fixupJpeg(QString filename, Bytestream header);
4343

44+
void fixupPlaintext(QString filename, Bytestream header);
45+
4446
void convertPdf(QString filename, Bytestream header, PrintParameters Params);
4547

4648
void convertImage(QString filename, Bytestream header, PrintParameters Params, QString targetFormat, QMargins margins);

translations/harbour-seaprint-de.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,10 @@ auf diesem Drucker</translation>
591591
<source>documents</source>
592592
<translation>Dokumente</translation>
593593
</message>
594+
<message>
595+
<source>plaintext</source>
596+
<translation type="unfinished"></translation>
597+
</message>
594598
</context>
595599
<context>
596600
<name>strings</name>
@@ -5477,5 +5481,9 @@ auf diesem Drucker</translation>
54775481
<source>Unknown</source>
54785482
<translation type="unfinished">Unbekannt</translation>
54795483
</message>
5484+
<message>
5485+
<source>Plaintext</source>
5486+
<translation type="unfinished"></translation>
5487+
</message>
54805488
</context>
54815489
</TS>

translations/harbour-seaprint-es.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,10 @@
590590
<source>documents</source>
591591
<translation>documentos</translation>
592592
</message>
593+
<message>
594+
<source>plaintext</source>
595+
<translation type="unfinished"></translation>
596+
</message>
593597
</context>
594598
<context>
595599
<name>strings</name>
@@ -5476,5 +5480,9 @@
54765480
<source>Unknown</source>
54775481
<translation type="unfinished"></translation>
54785482
</message>
5483+
<message>
5484+
<source>Plaintext</source>
5485+
<translation type="unfinished"></translation>
5486+
</message>
54795487
</context>
54805488
</TS>

translations/harbour-seaprint-fr.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,10 @@ sur cette imprimante</translation>
591591
<source>documents</source>
592592
<translation>documents</translation>
593593
</message>
594+
<message>
595+
<source>plaintext</source>
596+
<translation type="unfinished"></translation>
597+
</message>
594598
</context>
595599
<context>
596600
<name>strings</name>
@@ -5477,5 +5481,9 @@ sur cette imprimante</translation>
54775481
<source>Unknown</source>
54785482
<translation type="unfinished">Inconnu</translation>
54795483
</message>
5484+
<message>
5485+
<source>Plaintext</source>
5486+
<translation type="unfinished"></translation>
5487+
</message>
54805488
</context>
54815489
</TS>

translations/harbour-seaprint-nl.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,10 @@
590590
<source>documents</source>
591591
<translation>documenten</translation>
592592
</message>
593+
<message>
594+
<source>plaintext</source>
595+
<translation type="unfinished"></translation>
596+
</message>
593597
</context>
594598
<context>
595599
<name>strings</name>
@@ -5476,5 +5480,9 @@
54765480
<source>Unknown</source>
54775481
<translation type="unfinished">Onbekend</translation>
54785482
</message>
5483+
<message>
5484+
<source>Plaintext</source>
5485+
<translation type="unfinished"></translation>
5486+
</message>
54795487
</context>
54805488
</TS>

0 commit comments

Comments
 (0)