Compare commits

..

1 commit

Author SHA1 Message Date
Anton Thomasson
946ac19a58 Add format flowchart 2022-12-17 17:13:15 +01:00
34 changed files with 414 additions and 797 deletions

View file

@ -20,7 +20,7 @@ For PDFs, your printer needs to support one of the following formats:
For Postscript, your printer needs to support Postscript natively. (SeaPrint just sends it as-is)
For Plaintext, SeaPrint can render it to PDF internally and then the requirements follow those of PDF.
You can also send Plaintext to supporting printers and leave the rendering up to the printer (SeaPrint will strip leading and trailing Form Feed characters and ensure CR+LF newlines, but not do any reflow or similar). Since rendering will differ between printers, this has lowest priority for automatic format selection.
You can also send Plaintext to supporting printers and leave the rendering up to the printer (SeaPrint will strip leading and trailing Form Feed characters and ensure CR-NL newlines, but not do any reflow or similar). Since rendering will differ between printers, this has lowest priority for automatic format selection.
For printing "Office" files, like .doc(x) and odt, you need to install
`calligraconverter` (from the `calligra` package in Sailfish OS 4.2 onwards).
@ -43,10 +43,6 @@ For other image formats JPEG has lowest priority as transfer format since it is
![Format flowchart](doc/pipeline.svg)
Flowchart made with [GoAT](https://github.com/blampe/goat).
pdf2printable, ppm2pwg and baselinify were made especially for SeaPrint and can be found [here](https://github.com/attah/ppm2pwg).
Printers with any of these IPP certifications and derivative standards should likely be supported:
* IPP Everywhere

View file

@ -1,27 +1,27 @@
Normal flow:
If conversion is required:
.---------------.
PDF -------------------------------------------->| +----------------------> PDF 1.5
.-----------------. | |
Plaintext ---->| QTextDocument +------------------>| pdf2printable +----------------------> Postscript 2
'-----------------' | |
DOC/PPT .-------------------. | (Poppler+Cairo) | .---------.
ODT/ODP ---->| Calligraconverter +---------------->| | | |
| (optional) | | +---->| +----> PWG-Raster
'-------------------' .--------. | | | ppm2pwg |
Images --------------------------->| +---->| | | +----> URF-Raster
| | '---------------' | |
| QImage +---------------------------->| |
.--------------. | | '---------'
SVG ---->| QSvgRenderer +---->| +----------------------------------------------> PNG, JPEG,
PDF -------------------------------->| |
.------------------. | +----------------> Postscript
Plaintext ---->| QTextDocument +----->| pdf2printable |
| + QPdfWriter | | +----------------> PDF
'------------------' | |
DOC/PPT .-------------------. | |
ODT/ODP ---->| Calligraconverter +---->| '---------.
| (optional) | '---------------. +----> PWG-Raster
'-------------------' .--------. | ppm2pwg |
Images -------------------------------->| +----->| +----> URF-Raster
| QImage | '---------'
.--------------. | |
SVG ---->| QSvgRenderer +--------->| +-----------------------> PNG, JPEG,
'--------------' '--------' Reverse BMP
If target format is the same:
Postscript --------------------------------------------------------------------------------------> Postscript
Postscript --------------------------------------------------------------------> Postscript
.-----------------------.
Plaintext ---->| ensure CR+LF newlines +------------------------------------------------------> Plaintext
Plaintext ---->+ ensure CR+LF newlines +------------------------------------> Plaintext
'-----------------------'
PNG --------------------------------------------------------------------------------------> PNG
PNG --------------------------------------------------------------------> PNG
.------------.
JPEG ---->| baselinify +-----------------------------------------------------------------> JPEG
JPEG ---->+ baselinify +-----------------------------------------------> JPEG
'------------' (Baseline profile)

View file

@ -1,4 +1,4 @@
<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='441' width='976' font-family='Menlo,Lucida Console,monospace'>
<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='441' width='832' font-family='Menlo,Lucida Console,monospace'>
<style type="text/css">
svg {
color: #000000;
@ -10,103 +10,98 @@ svg {
}
</style>
<g transform='translate(8,16)'>
<path d='M 496,16 L 608,16' fill='none' stroke='currentColor'></path>
<path d='M 120,32 L 472,32' fill='none' stroke='currentColor'></path>
<path d='M 624,32 L 808,32' fill='none' stroke='currentColor'></path>
<path d='M 176,48 L 304,48' fill='none' stroke='currentColor'></path>
<path d='M 400,16 L 512,16' fill='none' stroke='currentColor'></path>
<path d='M 120,32 L 376,32' fill='none' stroke='currentColor'></path>
<path d='M 176,48 L 312,48' fill='none' stroke='currentColor'></path>
<path d='M 528,48 L 664,48' fill='none' stroke='currentColor'></path>
<path d='M 120,64 L 152,64' fill='none' stroke='currentColor'></path>
<path d='M 320,64 L 472,64' fill='none' stroke='currentColor'></path>
<path d='M 624,64 L 808,64' fill='none' stroke='currentColor'></path>
<path d='M 176,80 L 304,80' fill='none' stroke='currentColor'></path>
<path d='M 176,96 L 320,96' fill='none' stroke='currentColor'></path>
<path d='M 688,96 L 752,96' fill='none' stroke='currentColor'></path>
<path d='M 120,112 L 152,112' fill='none' stroke='currentColor'></path>
<path d='M 336,112 L 472,112' fill='none' stroke='currentColor'></path>
<path d='M 624,128 L 664,128' fill='none' stroke='currentColor'></path>
<path d='M 768,128 L 808,128' fill='none' stroke='currentColor'></path>
<path d='M 176,144 L 320,144' fill='none' stroke='currentColor'></path>
<path d='M 360,144 L 416,144' fill='none' stroke='currentColor'></path>
<path d='M 120,160 L 336,160' fill='none' stroke='currentColor'></path>
<path d='M 432,160 L 472,160' fill='none' stroke='currentColor'></path>
<path d='M 768,160 L 808,160' fill='none' stroke='currentColor'></path>
<path d='M 496,176 L 608,176' fill='none' stroke='currentColor'></path>
<path d='M 432,192 L 664,192' fill='none' stroke='currentColor'></path>
<path d='M 328,64 L 376,64' fill='none' stroke='currentColor'></path>
<path d='M 528,80 L 664,80' fill='none' stroke='currentColor'></path>
<path d='M 176,96 L 312,96' fill='none' stroke='currentColor'></path>
<path d='M 176,112 L 320,112' fill='none' stroke='currentColor'></path>
<path d='M 120,128 L 152,128' fill='none' stroke='currentColor'></path>
<path d='M 336,128 L 376,128' fill='none' stroke='currentColor'></path>
<path d='M 544,128 L 608,128' fill='none' stroke='currentColor'></path>
<path d='M 400,144 L 512,144' fill='none' stroke='currentColor'></path>
<path d='M 624,144 L 664,144' fill='none' stroke='currentColor'></path>
<path d='M 176,160 L 320,160' fill='none' stroke='currentColor'></path>
<path d='M 400,160 L 456,160' fill='none' stroke='currentColor'></path>
<path d='M 120,176 L 376,176' fill='none' stroke='currentColor'></path>
<path d='M 472,176 L 520,176' fill='none' stroke='currentColor'></path>
<path d='M 624,176 L 664,176' fill='none' stroke='currentColor'></path>
<path d='M 544,192 L 608,192' fill='none' stroke='currentColor'></path>
<path d='M 176,208 L 280,208' fill='none' stroke='currentColor'></path>
<path d='M 688,208 L 752,208' fill='none' stroke='currentColor'></path>
<path d='M 120,224 L 152,224' fill='none' stroke='currentColor'></path>
<path d='M 296,224 L 336,224' fill='none' stroke='currentColor'></path>
<path d='M 432,224 L 808,224' fill='none' stroke='currentColor'></path>
<path d='M 296,224 L 376,224' fill='none' stroke='currentColor'></path>
<path d='M 472,224 L 664,224' fill='none' stroke='currentColor'></path>
<path d='M 176,240 L 280,240' fill='none' stroke='currentColor'></path>
<path d='M 360,240 L 416,240' fill='none' stroke='currentColor'></path>
<path d='M 120,304 L 808,304' fill='none' stroke='currentColor'></path>
<path d='M 400,240 L 456,240' fill='none' stroke='currentColor'></path>
<path d='M 120,304 L 664,304' fill='none' stroke='currentColor'></path>
<path d='M 176,320 L 352,320' fill='none' stroke='currentColor'></path>
<path d='M 120,336 L 152,336' fill='none' stroke='currentColor'></path>
<path d='M 368,336 L 808,336' fill='none' stroke='currentColor'></path>
<path d='M 368,336 L 664,336' fill='none' stroke='currentColor'></path>
<path d='M 176,352 L 352,352' fill='none' stroke='currentColor'></path>
<path d='M 120,368 L 808,368' fill='none' stroke='currentColor'></path>
<path d='M 120,368 L 664,368' fill='none' stroke='currentColor'></path>
<path d='M 176,384 L 264,384' fill='none' stroke='currentColor'></path>
<path d='M 120,400 L 152,400' fill='none' stroke='currentColor'></path>
<path d='M 280,400 L 808,400' fill='none' stroke='currentColor'></path>
<path d='M 280,400 L 664,400' fill='none' stroke='currentColor'></path>
<path d='M 176,416 L 264,416' fill='none' stroke='currentColor'></path>
<path d='M 160,112 L 160,128' fill='none' stroke='currentColor'></path>
<path d='M 336,112 L 336,128' fill='none' stroke='currentColor'></path>
<path d='M 344,160 L 344,224' fill='none' stroke='currentColor'></path>
<path d='M 432,160 L 432,192' fill='none' stroke='currentColor'></path>
<path d='M 432,192 L 432,224' fill='none' stroke='currentColor'></path>
<path d='M 480,32 L 480,160' fill='none' stroke='currentColor'></path>
<path d='M 624,32 L 624,64' fill='none' stroke='currentColor'></path>
<path d='M 624,64 L 624,128' fill='none' stroke='currentColor'></path>
<path d='M 624,128 L 624,160' fill='none' stroke='currentColor'></path>
<path d='M 672,112 L 672,192' fill='none' stroke='currentColor'></path>
<path d='M 768,112 L 768,128' fill='none' stroke='currentColor'></path>
<path d='M 768,128 L 768,160' fill='none' stroke='currentColor'></path>
<path d='M 768,160 L 768,192' fill='none' stroke='currentColor'></path>
<path d='M 160,64 L 160,80' fill='none' stroke='currentColor'></path>
<path d='M 160,128 L 160,144' fill='none' stroke='currentColor'></path>
<path d='M 328,64 L 328,80' fill='none' stroke='currentColor'></path>
<path d='M 336,128 L 336,144' fill='none' stroke='currentColor'></path>
<path d='M 384,32 L 384,128' fill='none' stroke='currentColor'></path>
<path d='M 384,176 L 384,224' fill='none' stroke='currentColor'></path>
<path d='M 472,176 L 472,224' fill='none' stroke='currentColor'></path>
<path d='M 528,32 L 528,48' fill='none' stroke='currentColor'></path>
<path d='M 528,48 L 528,80' fill='none' stroke='currentColor'></path>
<path d='M 528,80 L 528,112' fill='none' stroke='currentColor'></path>
<path d='M 528,160 L 528,176' fill='none' stroke='currentColor'></path>
<path d='M 624,144 L 624,176' fill='none' stroke='currentColor'></path>
<polygon points='160.000000,64.000000 148.000000,58.400002 148.000000,69.599998' fill='currentColor' transform='rotate(0.000000, 152.000000, 64.000000)'></polygon>
<polygon points='160.000000,112.000000 148.000000,106.400002 148.000000,117.599998' fill='currentColor' transform='rotate(0.000000, 152.000000, 112.000000)'></polygon>
<polygon points='160.000000,128.000000 148.000000,122.400002 148.000000,133.600006' fill='currentColor' transform='rotate(0.000000, 152.000000, 128.000000)'></polygon>
<polygon points='160.000000,224.000000 148.000000,218.399994 148.000000,229.600006' fill='currentColor' transform='rotate(0.000000, 152.000000, 224.000000)'></polygon>
<polygon points='160.000000,336.000000 148.000000,330.399994 148.000000,341.600006' fill='currentColor' transform='rotate(0.000000, 152.000000, 336.000000)'></polygon>
<polygon points='160.000000,400.000000 148.000000,394.399994 148.000000,405.600006' fill='currentColor' transform='rotate(0.000000, 152.000000, 400.000000)'></polygon>
<polygon points='344.000000,160.000000 332.000000,154.399994 332.000000,165.600006' fill='currentColor' transform='rotate(0.000000, 336.000000, 160.000000)'></polygon>
<polygon points='344.000000,224.000000 332.000000,218.399994 332.000000,229.600006' fill='currentColor' transform='rotate(0.000000, 336.000000, 224.000000)'></polygon>
<polygon points='480.000000,32.000000 468.000000,26.400000 468.000000,37.599998' fill='currentColor' transform='rotate(0.000000, 472.000000, 32.000000)'></polygon>
<polygon points='480.000000,64.000000 468.000000,58.400002 468.000000,69.599998' fill='currentColor' transform='rotate(0.000000, 472.000000, 64.000000)'></polygon>
<polygon points='480.000000,112.000000 468.000000,106.400002 468.000000,117.599998' fill='currentColor' transform='rotate(0.000000, 472.000000, 112.000000)'></polygon>
<polygon points='480.000000,160.000000 468.000000,154.399994 468.000000,165.600006' fill='currentColor' transform='rotate(0.000000, 472.000000, 160.000000)'></polygon>
<polygon points='672.000000,128.000000 660.000000,122.400002 660.000000,133.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 128.000000)'></polygon>
<polygon points='672.000000,192.000000 660.000000,186.399994 660.000000,197.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 192.000000)'></polygon>
<polygon points='816.000000,32.000000 804.000000,26.400000 804.000000,37.599998' fill='currentColor' transform='rotate(0.000000, 808.000000, 32.000000)'></polygon>
<polygon points='816.000000,64.000000 804.000000,58.400002 804.000000,69.599998' fill='currentColor' transform='rotate(0.000000, 808.000000, 64.000000)'></polygon>
<polygon points='816.000000,128.000000 804.000000,122.400002 804.000000,133.600006' fill='currentColor' transform='rotate(0.000000, 808.000000, 128.000000)'></polygon>
<polygon points='816.000000,160.000000 804.000000,154.399994 804.000000,165.600006' fill='currentColor' transform='rotate(0.000000, 808.000000, 160.000000)'></polygon>
<polygon points='816.000000,224.000000 804.000000,218.399994 804.000000,229.600006' fill='currentColor' transform='rotate(0.000000, 808.000000, 224.000000)'></polygon>
<polygon points='816.000000,304.000000 804.000000,298.399994 804.000000,309.600006' fill='currentColor' transform='rotate(0.000000, 808.000000, 304.000000)'></polygon>
<polygon points='816.000000,336.000000 804.000000,330.399994 804.000000,341.600006' fill='currentColor' transform='rotate(0.000000, 808.000000, 336.000000)'></polygon>
<polygon points='816.000000,368.000000 804.000000,362.399994 804.000000,373.600006' fill='currentColor' transform='rotate(0.000000, 808.000000, 368.000000)'></polygon>
<polygon points='816.000000,400.000000 804.000000,394.399994 804.000000,405.600006' fill='currentColor' transform='rotate(0.000000, 808.000000, 400.000000)'></polygon>
<path d='M 496,16 A 16,16 0 0,0 480,32' fill='none' stroke='currentColor'></path>
<path d='M 608,16 A 16,16 0 0,1 624,32' fill='none' stroke='currentColor'></path>
<polygon points='384.000000,32.000000 372.000000,26.400000 372.000000,37.599998' fill='currentColor' transform='rotate(0.000000, 376.000000, 32.000000)'></polygon>
<polygon points='384.000000,64.000000 372.000000,58.400002 372.000000,69.599998' fill='currentColor' transform='rotate(0.000000, 376.000000, 64.000000)'></polygon>
<polygon points='384.000000,128.000000 372.000000,122.400002 372.000000,133.600006' fill='currentColor' transform='rotate(0.000000, 376.000000, 128.000000)'></polygon>
<polygon points='384.000000,176.000000 372.000000,170.399994 372.000000,181.600006' fill='currentColor' transform='rotate(0.000000, 376.000000, 176.000000)'></polygon>
<polygon points='384.000000,224.000000 372.000000,218.399994 372.000000,229.600006' fill='currentColor' transform='rotate(0.000000, 376.000000, 224.000000)'></polygon>
<polygon points='528.000000,176.000000 516.000000,170.399994 516.000000,181.600006' fill='currentColor' transform='rotate(0.000000, 520.000000, 176.000000)'></polygon>
<polygon points='672.000000,48.000000 660.000000,42.400002 660.000000,53.599998' fill='currentColor' transform='rotate(0.000000, 664.000000, 48.000000)'></polygon>
<polygon points='672.000000,80.000000 660.000000,74.400002 660.000000,85.599998' fill='currentColor' transform='rotate(0.000000, 664.000000, 80.000000)'></polygon>
<polygon points='672.000000,144.000000 660.000000,138.399994 660.000000,149.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 144.000000)'></polygon>
<polygon points='672.000000,176.000000 660.000000,170.399994 660.000000,181.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 176.000000)'></polygon>
<polygon points='672.000000,224.000000 660.000000,218.399994 660.000000,229.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 224.000000)'></polygon>
<polygon points='672.000000,304.000000 660.000000,298.399994 660.000000,309.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 304.000000)'></polygon>
<polygon points='672.000000,336.000000 660.000000,330.399994 660.000000,341.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 336.000000)'></polygon>
<polygon points='672.000000,368.000000 660.000000,362.399994 660.000000,373.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 368.000000)'></polygon>
<polygon points='672.000000,400.000000 660.000000,394.399994 660.000000,405.600006' fill='currentColor' transform='rotate(0.000000, 664.000000, 400.000000)'></polygon>
<path d='M 400,16 A 16,16 0 0,0 384,32' fill='none' stroke='currentColor'></path>
<path d='M 512,16 A 16,16 0 0,1 528,32' fill='none' stroke='currentColor'></path>
<path d='M 176,48 A 16,16 0 0,0 160,64' fill='none' stroke='currentColor'></path>
<path d='M 304,48 A 16,16 0 0,1 320,64' fill='none' stroke='currentColor'></path>
<path d='M 160,64 A 16,16 0 0,0 176,80' fill='none' stroke='currentColor'></path>
<path d='M 320,64 A 16,16 0 0,1 304,80' fill='none' stroke='currentColor'></path>
<path d='M 176,96 A 16,16 0 0,0 160,112' fill='none' stroke='currentColor'></path>
<path d='M 320,96 A 16,16 0 0,1 336,112' fill='none' stroke='currentColor'></path>
<path d='M 688,96 A 16,16 0 0,0 672,112' fill='none' stroke='currentColor'></path>
<path d='M 752,96 A 16,16 0 0,1 768,112' fill='none' stroke='currentColor'></path>
<path d='M 160,128 A 16,16 0 0,0 176,144' fill='none' stroke='currentColor'></path>
<path d='M 336,128 A 16,16 0 0,1 320,144' fill='none' stroke='currentColor'></path>
<path d='M 360,144 A 16,16 0 0,0 344,160' fill='none' stroke='currentColor'></path>
<path d='M 416,144 A 16,16 0 0,1 432,160' fill='none' stroke='currentColor'></path>
<path d='M 480,160 A 16,16 0 0,0 496,176' fill='none' stroke='currentColor'></path>
<path d='M 624,160 A 16,16 0 0,1 608,176' fill='none' stroke='currentColor'></path>
<path d='M 312,48 A 16,16 0 0,1 328,64' fill='none' stroke='currentColor'></path>
<path d='M 160,80 A 16,16 0 0,0 176,96' fill='none' stroke='currentColor'></path>
<path d='M 328,80 A 16,16 0 0,1 312,96' fill='none' stroke='currentColor'></path>
<path d='M 176,112 A 16,16 0 0,0 160,128' fill='none' stroke='currentColor'></path>
<path d='M 320,112 A 16,16 0 0,1 336,128' fill='none' stroke='currentColor'></path>
<path d='M 528,112 A 16,16 0 0,0 544,128' fill='none' stroke='currentColor'></path>
<path d='M 608,128 A 16,16 0 0,1 624,144' fill='none' stroke='currentColor'></path>
<path d='M 384,128 A 16,16 0 0,0 400,144' fill='none' stroke='currentColor'></path>
<path d='M 512,144 A 16,16 0 0,1 528,160' fill='none' stroke='currentColor'></path>
<path d='M 160,144 A 16,16 0 0,0 176,160' fill='none' stroke='currentColor'></path>
<path d='M 336,144 A 16,16 0 0,1 320,160' fill='none' stroke='currentColor'></path>
<path d='M 400,160 A 16,16 0 0,0 384,176' fill='none' stroke='currentColor'></path>
<path d='M 456,160 A 16,16 0 0,1 472,176' fill='none' stroke='currentColor'></path>
<path d='M 528,176 A 16,16 0 0,0 544,192' fill='none' stroke='currentColor'></path>
<path d='M 624,176 A 16,16 0 0,1 608,192' fill='none' stroke='currentColor'></path>
<path d='M 176,208 A 16,16 0 0,0 160,224' fill='none' stroke='currentColor'></path>
<path d='M 280,208 A 16,16 0 0,1 296,224' fill='none' stroke='currentColor'></path>
<path d='M 672,192 A 16,16 0 0,0 688,208' fill='none' stroke='currentColor'></path>
<path d='M 768,192 A 16,16 0 0,1 752,208' fill='none' stroke='currentColor'></path>
<path d='M 160,224 A 16,16 0 0,0 176,240' fill='none' stroke='currentColor'></path>
<path d='M 296,224 A 16,16 0 0,1 280,240' fill='none' stroke='currentColor'></path>
<path d='M 344,224 A 16,16 0 0,0 360,240' fill='none' stroke='currentColor'></path>
<path d='M 432,224 A 16,16 0 0,1 416,240' fill='none' stroke='currentColor'></path>
<path d='M 384,224 A 16,16 0 0,0 400,240' fill='none' stroke='currentColor'></path>
<path d='M 472,224 A 16,16 0 0,1 456,240' fill='none' stroke='currentColor'></path>
<path d='M 176,320 A 16,16 0 0,0 160,336' fill='none' stroke='currentColor'></path>
<path d='M 352,320 A 16,16 0 0,1 368,336' fill='none' stroke='currentColor'></path>
<path d='M 160,336 A 16,16 0 0,0 176,352' fill='none' stroke='currentColor'></path>
@ -123,26 +118,42 @@ svg {
font-size: 1em;
}
</style>
<text x='16' y='4'>N</text>
<text x='24' y='4'>o</text>
<text x='32' y='4'>r</text>
<text x='40' y='4'>m</text>
<text x='48' y='4'>a</text>
<text x='56' y='4'>l</text>
<text x='72' y='4'>f</text>
<text x='80' y='4'>l</text>
<text x='88' y='4'>o</text>
<text x='96' y='4'>w</text>
<text x='104' y='4'>:</text>
<text x='16' y='4'>I</text>
<text x='24' y='4'>f</text>
<text x='40' y='4'>c</text>
<text x='48' y='4'>o</text>
<text x='56' y='4'>n</text>
<text x='64' y='4'>v</text>
<text x='72' y='4'>e</text>
<text x='80' y='4'>r</text>
<text x='88' y='4'>s</text>
<text x='96' y='4'>i</text>
<text x='104' y='4'>o</text>
<text x='112' y='4'>n</text>
<text x='128' y='4'>i</text>
<text x='136' y='4'>s</text>
<text x='152' y='4'>r</text>
<text x='160' y='4'>e</text>
<text x='168' y='4'>q</text>
<text x='176' y='4'>u</text>
<text x='184' y='4'>i</text>
<text x='192' y='4'>r</text>
<text x='200' y='4'>e</text>
<text x='208' y='4'>d</text>
<text x='216' y='4'>:</text>
<text x='32' y='36'>P</text>
<text x='40' y='36'>D</text>
<text x='48' y='36'>F</text>
<text x='824' y='36'>P</text>
<text x='832' y='36'>D</text>
<text x='840' y='36'>F</text>
<text x='856' y='36'>1</text>
<text x='864' y='36'>.</text>
<text x='872' y='36'>5</text>
<text x='680' y='52'>P</text>
<text x='688' y='52'>o</text>
<text x='696' y='52'>s</text>
<text x='704' y='52'>t</text>
<text x='712' y='52'>s</text>
<text x='720' y='52'>c</text>
<text x='728' y='52'>r</text>
<text x='736' y='52'>i</text>
<text x='744' y='52'>p</text>
<text x='752' y='52'>t</text>
<text x='32' y='68'>P</text>
<text x='40' y='68'>l</text>
<text x='48' y='68'>a</text>
@ -165,125 +176,113 @@ svg {
<text x='272' y='68'>e</text>
<text x='280' y='68'>n</text>
<text x='288' y='68'>t</text>
<text x='504' y='68'>p</text>
<text x='512' y='68'>d</text>
<text x='520' y='68'>f</text>
<text x='528' y='68'>2</text>
<text x='536' y='68'>p</text>
<text x='544' y='68'>r</text>
<text x='552' y='68'>i</text>
<text x='560' y='68'>n</text>
<text x='568' y='68'>t</text>
<text x='576' y='68'>a</text>
<text x='584' y='68'>b</text>
<text x='592' y='68'>l</text>
<text x='600' y='68'>e</text>
<text x='824' y='68'>P</text>
<text x='832' y='68'>o</text>
<text x='840' y='68'>s</text>
<text x='848' y='68'>t</text>
<text x='856' y='68'>s</text>
<text x='864' y='68'>c</text>
<text x='872' y='68'>r</text>
<text x='880' y='68'>i</text>
<text x='888' y='68'>p</text>
<text x='896' y='68'>t</text>
<text x='912' y='68'>2</text>
<text x='32' y='100'>D</text>
<text x='40' y='100'>O</text>
<text x='48' y='100'>C</text>
<text x='56' y='100'>/</text>
<text x='64' y='100'>P</text>
<text x='72' y='100'>P</text>
<text x='80' y='100'>T</text>
<text x='496' y='100'>(</text>
<text x='504' y='100'>P</text>
<text x='512' y='100'>o</text>
<text x='520' y='100'>p</text>
<text x='528' y='100'>p</text>
<text x='536' y='100'>l</text>
<text x='544' y='100'>e</text>
<text x='552' y='100'>r</text>
<text x='560' y='100'>+</text>
<text x='568' y='100'>C</text>
<text x='576' y='100'>a</text>
<text x='584' y='100'>i</text>
<text x='592' y='100'>r</text>
<text x='600' y='100'>o</text>
<text x='608' y='100'>)</text>
<text x='32' y='116'>O</text>
<text x='40' y='116'>D</text>
<text x='48' y='116'>T</text>
<text x='408' y='68'>p</text>
<text x='416' y='68'>d</text>
<text x='424' y='68'>f</text>
<text x='432' y='68'>2</text>
<text x='440' y='68'>p</text>
<text x='448' y='68'>r</text>
<text x='456' y='68'>i</text>
<text x='464' y='68'>n</text>
<text x='472' y='68'>t</text>
<text x='480' y='68'>a</text>
<text x='488' y='68'>b</text>
<text x='496' y='68'>l</text>
<text x='504' y='68'>e</text>
<text x='192' y='84'>+</text>
<text x='208' y='84'>Q</text>
<text x='216' y='84'>P</text>
<text x='224' y='84'>d</text>
<text x='232' y='84'>f</text>
<text x='240' y='84'>W</text>
<text x='248' y='84'>r</text>
<text x='256' y='84'>i</text>
<text x='264' y='84'>t</text>
<text x='272' y='84'>e</text>
<text x='280' y='84'>r</text>
<text x='680' y='84'>P</text>
<text x='688' y='84'>D</text>
<text x='696' y='84'>F</text>
<text x='32' y='116'>D</text>
<text x='40' y='116'>O</text>
<text x='48' y='116'>C</text>
<text x='56' y='116'>/</text>
<text x='64' y='116'>O</text>
<text x='72' y='116'>D</text>
<text x='80' y='116'>P</text>
<text x='184' y='116'>C</text>
<text x='192' y='116'>a</text>
<text x='200' y='116'>l</text>
<text x='208' y='116'>l</text>
<text x='216' y='116'>i</text>
<text x='224' y='116'>g</text>
<text x='232' y='116'>r</text>
<text x='240' y='116'>a</text>
<text x='248' y='116'>c</text>
<text x='256' y='116'>o</text>
<text x='264' y='116'>n</text>
<text x='272' y='116'>v</text>
<text x='280' y='116'>e</text>
<text x='288' y='116'>r</text>
<text x='296' y='116'>t</text>
<text x='304' y='116'>e</text>
<text x='312' y='116'>r</text>
<text x='208' y='132'>(</text>
<text x='216' y='132'>o</text>
<text x='224' y='132'>p</text>
<text x='232' y='132'>t</text>
<text x='240' y='132'>i</text>
<text x='248' y='132'>o</text>
<text x='256' y='132'>n</text>
<text x='264' y='132'>a</text>
<text x='272' y='132'>l</text>
<text x='280' y='132'>)</text>
<text x='824' y='132'>P</text>
<text x='832' y='132'>W</text>
<text x='840' y='132'>G</text>
<text x='848' y='132'>-</text>
<text x='856' y='132'>R</text>
<text x='864' y='132'>a</text>
<text x='872' y='132'>s</text>
<text x='880' y='132'>t</text>
<text x='888' y='132'>e</text>
<text x='896' y='132'>r</text>
<text x='696' y='148'>p</text>
<text x='704' y='148'>p</text>
<text x='712' y='148'>m</text>
<text x='720' y='148'>2</text>
<text x='728' y='148'>p</text>
<text x='736' y='148'>w</text>
<text x='744' y='148'>g</text>
<text x='32' y='164'>I</text>
<text x='40' y='164'>m</text>
<text x='48' y='164'>a</text>
<text x='56' y='164'>g</text>
<text x='64' y='164'>e</text>
<text x='72' y='164'>s</text>
<text x='824' y='164'>U</text>
<text x='832' y='164'>R</text>
<text x='840' y='164'>F</text>
<text x='848' y='164'>-</text>
<text x='856' y='164'>R</text>
<text x='864' y='164'>a</text>
<text x='872' y='164'>s</text>
<text x='880' y='164'>t</text>
<text x='888' y='164'>e</text>
<text x='896' y='164'>r</text>
<text x='368' y='196'>Q</text>
<text x='376' y='196'>I</text>
<text x='384' y='196'>m</text>
<text x='392' y='196'>a</text>
<text x='400' y='196'>g</text>
<text x='408' y='196'>e</text>
<text x='64' y='116'>P</text>
<text x='72' y='116'>P</text>
<text x='80' y='116'>T</text>
<text x='32' y='132'>O</text>
<text x='40' y='132'>D</text>
<text x='48' y='132'>T</text>
<text x='56' y='132'>/</text>
<text x='64' y='132'>O</text>
<text x='72' y='132'>D</text>
<text x='80' y='132'>P</text>
<text x='184' y='132'>C</text>
<text x='192' y='132'>a</text>
<text x='200' y='132'>l</text>
<text x='208' y='132'>l</text>
<text x='216' y='132'>i</text>
<text x='224' y='132'>g</text>
<text x='232' y='132'>r</text>
<text x='240' y='132'>a</text>
<text x='248' y='132'>c</text>
<text x='256' y='132'>o</text>
<text x='264' y='132'>n</text>
<text x='272' y='132'>v</text>
<text x='280' y='132'>e</text>
<text x='288' y='132'>r</text>
<text x='296' y='132'>t</text>
<text x='304' y='132'>e</text>
<text x='312' y='132'>r</text>
<text x='208' y='148'>(</text>
<text x='216' y='148'>o</text>
<text x='224' y='148'>p</text>
<text x='232' y='148'>t</text>
<text x='240' y='148'>i</text>
<text x='248' y='148'>o</text>
<text x='256' y='148'>n</text>
<text x='264' y='148'>a</text>
<text x='272' y='148'>l</text>
<text x='280' y='148'>)</text>
<text x='680' y='148'>P</text>
<text x='688' y='148'>W</text>
<text x='696' y='148'>G</text>
<text x='704' y='148'>-</text>
<text x='712' y='148'>R</text>
<text x='720' y='148'>a</text>
<text x='728' y='148'>s</text>
<text x='736' y='148'>t</text>
<text x='744' y='148'>e</text>
<text x='752' y='148'>r</text>
<text x='552' y='164'>p</text>
<text x='560' y='164'>p</text>
<text x='568' y='164'>m</text>
<text x='576' y='164'>2</text>
<text x='584' y='164'>p</text>
<text x='592' y='164'>w</text>
<text x='600' y='164'>g</text>
<text x='32' y='180'>I</text>
<text x='40' y='180'>m</text>
<text x='48' y='180'>a</text>
<text x='56' y='180'>g</text>
<text x='64' y='180'>e</text>
<text x='72' y='180'>s</text>
<text x='680' y='180'>U</text>
<text x='688' y='180'>R</text>
<text x='696' y='180'>F</text>
<text x='704' y='180'>-</text>
<text x='712' y='180'>R</text>
<text x='720' y='180'>a</text>
<text x='728' y='180'>s</text>
<text x='736' y='180'>t</text>
<text x='744' y='180'>e</text>
<text x='752' y='180'>r</text>
<text x='408' y='196'>Q</text>
<text x='416' y='196'>I</text>
<text x='424' y='196'>m</text>
<text x='432' y='196'>a</text>
<text x='440' y='196'>g</text>
<text x='448' y='196'>e</text>
<text x='32' y='228'>S</text>
<text x='40' y='228'>V</text>
<text x='48' y='228'>G</text>
@ -299,25 +298,25 @@ svg {
<text x='256' y='228'>r</text>
<text x='264' y='228'>e</text>
<text x='272' y='228'>r</text>
<text x='824' y='228'>P</text>
<text x='832' y='228'>N</text>
<text x='840' y='228'>G</text>
<text x='848' y='228'>,</text>
<text x='864' y='228'>J</text>
<text x='872' y='228'>P</text>
<text x='880' y='228'>E</text>
<text x='888' y='228'>G</text>
<text x='896' y='228'>,</text>
<text x='824' y='244'>R</text>
<text x='832' y='244'>e</text>
<text x='840' y='244'>v</text>
<text x='848' y='244'>e</text>
<text x='856' y='244'>r</text>
<text x='864' y='244'>s</text>
<text x='872' y='244'>e</text>
<text x='888' y='244'>B</text>
<text x='896' y='244'>M</text>
<text x='904' y='244'>P</text>
<text x='680' y='228'>P</text>
<text x='688' y='228'>N</text>
<text x='696' y='228'>G</text>
<text x='704' y='228'>,</text>
<text x='720' y='228'>J</text>
<text x='728' y='228'>P</text>
<text x='736' y='228'>E</text>
<text x='744' y='228'>G</text>
<text x='752' y='228'>,</text>
<text x='680' y='244'>R</text>
<text x='688' y='244'>e</text>
<text x='696' y='244'>v</text>
<text x='704' y='244'>e</text>
<text x='712' y='244'>r</text>
<text x='720' y='244'>s</text>
<text x='728' y='244'>e</text>
<text x='744' y='244'>B</text>
<text x='752' y='244'>M</text>
<text x='760' y='244'>P</text>
<text x='16' y='276'>I</text>
<text x='24' y='276'>f</text>
<text x='40' y='276'>t</text>
@ -352,16 +351,16 @@ svg {
<text x='88' y='308'>i</text>
<text x='96' y='308'>p</text>
<text x='104' y='308'>t</text>
<text x='824' y='308'>P</text>
<text x='832' y='308'>o</text>
<text x='840' y='308'>s</text>
<text x='848' y='308'>t</text>
<text x='856' y='308'>s</text>
<text x='864' y='308'>c</text>
<text x='872' y='308'>r</text>
<text x='880' y='308'>i</text>
<text x='888' y='308'>p</text>
<text x='896' y='308'>t</text>
<text x='680' y='308'>P</text>
<text x='688' y='308'>o</text>
<text x='696' y='308'>s</text>
<text x='704' y='308'>t</text>
<text x='712' y='308'>s</text>
<text x='720' y='308'>c</text>
<text x='728' y='308'>r</text>
<text x='736' y='308'>i</text>
<text x='744' y='308'>p</text>
<text x='752' y='308'>t</text>
<text x='32' y='340'>P</text>
<text x='40' y='340'>l</text>
<text x='48' y='340'>a</text>
@ -390,21 +389,21 @@ svg {
<text x='328' y='340'>n</text>
<text x='336' y='340'>e</text>
<text x='344' y='340'>s</text>
<text x='824' y='340'>P</text>
<text x='832' y='340'>l</text>
<text x='840' y='340'>a</text>
<text x='848' y='340'>i</text>
<text x='856' y='340'>n</text>
<text x='864' y='340'>t</text>
<text x='872' y='340'>e</text>
<text x='880' y='340'>x</text>
<text x='888' y='340'>t</text>
<text x='680' y='340'>P</text>
<text x='688' y='340'>l</text>
<text x='696' y='340'>a</text>
<text x='704' y='340'>i</text>
<text x='712' y='340'>n</text>
<text x='720' y='340'>t</text>
<text x='728' y='340'>e</text>
<text x='736' y='340'>x</text>
<text x='744' y='340'>t</text>
<text x='32' y='372'>P</text>
<text x='40' y='372'>N</text>
<text x='48' y='372'>G</text>
<text x='824' y='372'>P</text>
<text x='832' y='372'>N</text>
<text x='840' y='372'>G</text>
<text x='680' y='372'>P</text>
<text x='688' y='372'>N</text>
<text x='696' y='372'>G</text>
<text x='32' y='404'>J</text>
<text x='40' y='404'>P</text>
<text x='48' y='404'>E</text>
@ -419,26 +418,26 @@ svg {
<text x='240' y='404'>i</text>
<text x='248' y='404'>f</text>
<text x='256' y='404'>y</text>
<text x='824' y='404'>J</text>
<text x='832' y='404'>P</text>
<text x='840' y='404'>E</text>
<text x='848' y='404'>G</text>
<text x='824' y='420'>(</text>
<text x='832' y='420'>B</text>
<text x='840' y='420'>a</text>
<text x='848' y='420'>s</text>
<text x='856' y='420'>e</text>
<text x='864' y='420'>l</text>
<text x='872' y='420'>i</text>
<text x='880' y='420'>n</text>
<text x='888' y='420'>e</text>
<text x='904' y='420'>p</text>
<text x='912' y='420'>r</text>
<text x='920' y='420'>o</text>
<text x='928' y='420'>f</text>
<text x='936' y='420'>i</text>
<text x='944' y='420'>l</text>
<text x='952' y='420'>e</text>
<text x='960' y='420'>)</text>
<text x='680' y='404'>J</text>
<text x='688' y='404'>P</text>
<text x='696' y='404'>E</text>
<text x='704' y='404'>G</text>
<text x='680' y='420'>(</text>
<text x='688' y='420'>B</text>
<text x='696' y='420'>a</text>
<text x='704' y='420'>s</text>
<text x='712' y='420'>e</text>
<text x='720' y='420'>l</text>
<text x='728' y='420'>i</text>
<text x='736' y='420'>n</text>
<text x='744' y='420'>e</text>
<text x='760' y='420'>p</text>
<text x='768' y='420'>r</text>
<text x='776' y='420'>o</text>
<text x='784' y='420'>f</text>
<text x='792' y='420'>i</text>
<text x='800' y='420'>l</text>
<text x='808' y='420'>e</text>
<text x='816' y='420'>)</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -3,10 +3,9 @@ Type=Application
Icon=harbour-seaprint
X-Nemo-Application-Type=silica-qt5
Exec=harbour-seaprint
X-DBusActivatable=true
Name=SeaPrint
[X-Sailjail]
Permissions=Internet;Pictures;Documents;Downloads;RemovableMedia;MediaIndexing;Compatibility
OrganizationName=net.attah
ApplicationName=seaprint
ExecDBus=harbour-seaprint --prestart

View file

@ -26,17 +26,14 @@ INSTALLS += i18n
system(lrelease $$PWD/translations/*.ts)
CONFIG += sailfishapp
QT += svg dbus
PKGCONFIG += mlite5 libcurl glib-2.0
INCLUDEPATH += $$system(pkg-config --cflags-only-I poppler-glib | sed 's/-I//g')
QT += svg
PKGCONFIG += mlite5 libcurl poppler-glib glib-2.0 cairo libjpeg
LIBS += -lcurl -lglib-2.0 -lgobject-2.0 -ldl
DEFINES += MADNESS=1
DEFINES += PDF_CREATOR='\\"SeaPrint\ $$VERSION\\"'
DEFINES += SEAPRINT_VERSION='\\"$$VERSION\\"'
SOURCES += src/harbour-seaprint.cpp \
src/dbusadaptorbase.cpp \
src/freedesktopdbusadaptor.cpp \
src/rangelistchecker.cpp \
src/convertchecker.cpp \
src/curlrequester.cpp \
@ -45,19 +42,17 @@ SOURCES += src/harbour-seaprint.cpp \
src/ippmsg.cpp \
src/ippprinter.cpp \
src/mimer.cpp \
ppm2pwg/printparameters.cpp \
ppm2pwg/ppm2pwg.cpp \
ppm2pwg/pdf2printable.cpp \
ppm2pwg/baselinify.cpp \
ppm2pwg/bytestream/bytestream.cpp \
src/overrider.cpp \
src/printerworker.cpp \
src/seaprintdbusadaptor.cpp \
src/settings.cpp
DISTFILES += qml/harbour-seaprint.qml \
qml/cover/CoverPage.qml \
qml/components/*qml \
qml/components/*.qml \
qml/pages/*.qml \
qml/pages/*.js \
qml/pages/*svg \
@ -86,8 +81,6 @@ TRANSLATIONS += translations/harbour-seaprint-de.ts \
translations/harbour-seaprint-pl.ts
HEADERS += \
src/dbusadaptorbase.h \
src/freedesktopdbusadaptor.h \
src/rangelistchecker.h \
src/convertchecker.h \
src/curlrequester.h \
@ -107,11 +100,9 @@ HEADERS += \
ppm2pwg/UrfPgHdr.codable \
ppm2pwg/bytestream/bytestream.h \
ppm2pwg/bytestream/codable.h \
ppm2pwg/argget.h \
src/overrider.h \
src/papersizes.h \
src/printerworker.h \
src/seaprintdbusadaptor.h \
src/settings.h
INCLUDEPATH += ppm2pwg \

@ -1 +1 @@
Subproject commit acc32f3769c3b18bd6b94c55b882c7b7b778854c
Subproject commit 927ef3e4b876f18f2881bf624474056608781fce

View file

@ -7,7 +7,7 @@ Setting {
property var preferred_choices: []
property string preferred_choice_suffix: ""
property var actual_choices: Utils.fixupChoices(name, choices, parent.selectedFileType, parent.printer)
property var actual_choices: Utils.fixupChoices(name, choices, parent.selectedFileType)
property int num_large_choices: 8

View file

@ -20,9 +20,10 @@ Dialog {
id: valueField
validator: IntValidator{bottom: min; top: max;}
width: parent.width
placeholderText: ""+min+"-"+(max == 65535 ? "..." : max)
placeholderText: ""+min+"-"+max
label: title
focus: true
labelVisible: true
inputMethodHints: Qt.ImhDigitsOnly
}

View file

@ -53,7 +53,7 @@ Setting {
anchors.right: parent.right
icon.source: "image://theme/icon-s-edit"
onClicked: {var dialog = pageStack.push(Qt.resolvedUrl("IntegerInputDialog.qml"),
{title: prettyName,
{value: choice, title: prettyName,
min: low, max: high});
dialog.accepted.connect(function() {
choice = dialog.value;

View file

@ -104,7 +104,7 @@ Setting {
anchors.right: parent.right
icon.source: "image://theme/icon-s-edit"
onClicked: {var dialog = pageStack.push(Qt.resolvedUrl("IntegerInputDialog.qml"),
{title: prettyName + " (" + qsTr("Low") + ")",
{value: choice, title: prettyName,
min: 1, max: high});
dialog.accepted.connect(function() {
choice_low = dialog.value;
@ -132,7 +132,7 @@ Setting {
anchors.right: parent.right
icon.source: "image://theme/icon-s-edit"
onClicked: {var dialog = pageStack.push(Qt.resolvedUrl("IntegerInputDialog.qml"),
{title: prettyName + " (" + qsTr("High") + ")",
{value: choice, title: prettyName,
min: 1, max: high});
dialog.accepted.connect(function() {
choice_high = dialog.value;

View file

@ -13,37 +13,9 @@ ApplicationWindow
{
id: appWin
property Page _mainPage
property bool expectCalligra: true
function openFile(file) {
selectedFile = file
selectedFileType = Mimer.get_type(selectedFile);
if(selectedFileType == "")
{
selectedFile = ""
notifier.notify(qsTr("Unsupported document format"))
}
if(pageStack.currentPage.busyPage)
{
notifier.notify(qsTr("New file selected"))
}
else
{
pageStack.pop(appWin._mainPage, PageStackAction.Immediate)
}
}
property string selectedFile: ""
property string selectedFileType
initialPage: Component {
FirstPage {
Component.onCompleted: appWin._mainPage = this
}
}
initialPage: Component { FirstPage { selectedFile: Qt.application.arguments[1] ? Qt.application.arguments[1] : "" } }
cover: Qt.resolvedUrl("cover/CoverPage.qml")
allowedOrientations: Orientation.All

View file

@ -62,7 +62,7 @@ Page {
AboutLabel {
font.pixelSize: Theme.fontSizeSmall
color: Theme.primaryColor
text: "© 2019-2023 Anton Thomasson et al."
text: "© 2019-2022 Anton Thomasson et al."
}

View file

@ -3,8 +3,6 @@ import Sailfish.Silica 1.0
import "utils.js" as Utils
Page {
property bool busyPage: true
allowedOrientations: Orientation.All
Component.onCompleted: {

View file

@ -12,6 +12,9 @@ Page {
id: page
allowedOrientations: Orientation.All
property string selectedFile: ""
property string selectedFileType
Connections {
target: wifi
onConnectedChanged: {
@ -57,6 +60,11 @@ Page {
Component.onCompleted: {
IppDiscovery.discover();
if(selectedFile != "")
{
var type = Mimer.get_type(selectedFile);
selectedFileType = type;
}
}
property bool nagged: false
@ -135,7 +143,7 @@ Page {
property string name: Utils.unknownForEmptyString(printer.attrs["printer-name"].value)
property var supported_formats: Utils.supported_formats(printer, considerAdditionalFormatsSetting.value)
property bool canPrint: supported_formats.mimetypes.indexOf(appWin.selectedFileType) != -1
property bool canPrint: supported_formats.mimetypes.indexOf(selectedFileType) != -1
Connections {
target: printer
@ -174,7 +182,7 @@ Page {
{
if(printer.attrs.hasOwnProperty("printer-uuid"))
{
return JSON.parse(db.getJobSettings(printer.attrs["printer-uuid"].value, appWin.selectedFileType));
return JSON.parse(db.getJobSettings(printer.attrs["printer-uuid"].value, selectedFileType));
}
else
{
@ -191,7 +199,7 @@ Page {
return;
}
debugCountReset.restart();
if(appWin.selectedFile == "")
if(selectedFile == "")
{
noFileSelected();
}
@ -201,7 +209,7 @@ Page {
}
else
{
pageStack.push(Qt.resolvedUrl("PrinterPage.qml"), {printer: printer, selectedFile: appWin.selectedFile, jobParams: maybeGetParams()})
pageStack.push(Qt.resolvedUrl("PrinterPage.qml"), {printer: printer, selectedFile: selectedFile, jobParams: maybeGetParams()})
}
}
@ -242,13 +250,13 @@ Page {
Label {
id: name_label
color: canPrint || appWin.selectedFile == "" ? Theme.primaryColor : Theme.secondaryColor
color: canPrint || selectedFile == "" ? Theme.primaryColor : Theme.secondaryColor
text: name
}
Label {
id: mm_label
color: canPrint || appWin.selectedFile == "" ? Theme.primaryColor : Theme.secondaryColor
color: canPrint || selectedFile == "" ? Theme.primaryColor : Theme.secondaryColor
font.pixelSize: Theme.fontSizeExtraSmall
text: Utils.unknownForEmptyString(printer.attrs["printer-make-and-model"].value)
+ (Utils.existsAndNotEmpty("printer-location", printer) ? " • "+printer.attrs["printer-location"].value : "")
@ -256,7 +264,7 @@ Page {
Label {
id: uri_label
color: canPrint || appWin.selectedFile == "" ? Theme.highlightColor : Theme.secondaryColor
color: canPrint || selectedFile == "" ? Theme.highlightColor : Theme.secondaryColor
font.pixelSize: Theme.fontSizeTiny
text: printer.url
}
@ -277,7 +285,7 @@ Page {
width: Theme.itemSizeExtraSmall/2
visible: supported_formats.pdf
highlightColor: "red"
highlighted: !(appWin.selectedFile == "" || canPrint)
highlighted: !(selectedFile == "" || canPrint)
source: "image://theme/icon-m-file-pdf"
}
HighlightImage {
@ -285,7 +293,7 @@ Page {
width: Theme.itemSizeExtraSmall/2
visible: supported_formats.postscript
highlightColor: "red"
highlighted: !(appWin.selectedFile == "" || canPrint)
highlighted: !(selectedFile == "" || canPrint)
source: "image://theme/icon-m-file-other"
}
@ -294,7 +302,7 @@ Page {
width: Theme.itemSizeExtraSmall/2
visible: supported_formats.plaintext
highlightColor: "red"
highlighted: !(appWin.selectedFile == "" || canPrint)
highlighted: !(selectedFile == "" || canPrint)
source: "image://theme/icon-m-file-document"
}
HighlightImage {
@ -302,7 +310,7 @@ Page {
width: Theme.itemSizeExtraSmall/2
visible: supported_formats.office
highlightColor: "red"
highlighted: !(appWin.selectedFile == "" || canPrint)
highlighted: !(selectedFile == "" || canPrint)
source: "image://theme/icon-m-file-formatted"
}
HighlightImage {
@ -310,7 +318,7 @@ Page {
width: Theme.itemSizeExtraSmall/2
visible: supported_formats.office
highlightColor: "red"
highlighted: !(appWin.selectedFile == "" || canPrint)
highlighted: !(selectedFile == "" || canPrint)
source: "image://theme/icon-m-file-presentation"
}
HighlightImage {
@ -318,7 +326,7 @@ Page {
width: Theme.itemSizeExtraSmall/2
visible: supported_formats.images
highlightColor: "red"
highlighted: !(appWin.selectedFile == "" || canPrint)
highlighted: !(selectedFile == "" || canPrint)
source: "image://theme/icon-m-file-image"
}
}
@ -373,7 +381,7 @@ Page {
Row {
id: warningRow
anchors.horizontalCenter: parent.horizontalCenter
visible: Mimer.isOffice(appWin.selectedFileType)
visible: Mimer.isOffice(page.selectedFileType)
HighlightImage {
source: "image://theme/icon-s-warning"
@ -396,7 +404,7 @@ Page {
horizontalAlignment: contentWidth > width ? Text.AlignRight : Text.AlignHCenter
truncationMode: TruncationMode.Fade
text: appWin.selectedFile != "" ? appWin.selectedFile : qsTr("No file selected")
text: selectedFile != "" ? selectedFile : qsTr("No file selected")
SequentialAnimation {
id: noFileSelectedAnimation
@ -449,7 +457,18 @@ Page {
title: qsTr("Choose file")
onSelectedContentPropertiesChanged: {
appWin.openFile(selectedContentProperties.filePath);
var mimeType = Mimer.get_type(selectedContentProperties.filePath)
if(mimeType == Mimer.PDF || mimeType == Mimer.Postscript || mimeType == Mimer.Plaintext || Mimer.isOffice(mimeType))
{
page.selectedFile = selectedContentProperties.filePath
page.selectedFileType = mimeType
}
else
{
notifier.notify(qsTr("Unsupported document format"))
page.selectedFile = ""
page.selectedFileType = ""
}
}
}
}
@ -459,7 +478,8 @@ Page {
allowedOrientations: Orientation.All
onSelectedContentPropertiesChanged: {
appWin.openFile(selectedContentProperties.filePath);
page.selectedFile = selectedContentProperties.filePath
page.selectedFileType = Mimer.get_type(selectedContentProperties.filePath)
}
}
}

View file

@ -445,7 +445,7 @@ function knownPaperSize(mediaName)
}
function fixupChoices(name, choices, mimeType, printer)
function fixupChoices(name, choices, mimeType)
{
switch(name) {
case "document-format":
@ -497,18 +497,7 @@ function fixupChoices(name, choices, mimeType, printer)
return choices;
}
case "media":
if(printer.attrs.hasOwnProperty("media-ready"))
{
for(var m in printer.attrs["media-ready"].value)
{
var value = printer.attrs["media-ready"].value[m];
if(!has(choices, value))
{
choices.push(value);
}
}
}
return choices;
return choices.filter(knownPaperSize);
default:
return choices;
}

View file

@ -21,9 +21,6 @@ BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(cairo)
BuildRequires: pkgconfig(libjpeg)
%define _source_payload w6T.xzdio
%define _binary_payload w6T.xzdio
%description
Network printing for Sailfish OS

View file

@ -1,25 +0,0 @@
#include "dbusadaptorbase.h"
#include <QtQuick>
void DBusAdaptorBase::doActivate()
{
QMetaObject::invokeMethod(_view->rootObject(), "activate");
}
void DBusAdaptorBase::doOpen(const QString& fileName)
{
QMetaObject::invokeMethod(_view->rootObject(), "openFile", Q_ARG(QVariant, fileName));
doActivate();
}
void DBusAdaptorBase::doCreateFileAndOpen(const QString& fileContents, const QString& name)
{
QTemporaryFile tmpfile(QDir::tempPath() + "/" + name);
tmpfile.setAutoRemove(false);
tmpfile.open();
tmpfile.write(fileContents.toUtf8());
tmpfile.close();
QMetaObject::invokeMethod(_view->rootObject(), "openFile", Q_ARG(QVariant, tmpfile.fileName()));
doActivate();
}

View file

@ -1,24 +0,0 @@
#ifndef DBUSADAPTORBASE_H
#define DBUSADAPTORBASE_H
#include <QObject>
#include <QtDBus/QDBusAbstractAdaptor>
#include <QQuickView>
class DBusAdaptorBase
{
public:
DBusAdaptorBase(QQuickView* view)
: _view(view)
{}
void doActivate();
void doOpen(const QString& fileName);
void doCreateFileAndOpen(const QString& fileContents, const QString& name);
protected:
QQuickView* _view;
};
#endif // DBUSADAPTORBASE_H

View file

@ -1,31 +0,0 @@
#include "freedesktopdbusadaptor.h"
#include <QtQuick>
FreedesktopDBusAdaptor::FreedesktopDBusAdaptor(QQuickView *view)
: QDBusAbstractAdaptor(view)
, DBusAdaptorBase(view)
{
}
FreedesktopDBusAdaptor::~FreedesktopDBusAdaptor()
{
}
void FreedesktopDBusAdaptor::Open(const QStringList& uris, const QVariantMap& platformData)
{
qDebug() << platformData;
if (!uris.isEmpty() && uris[0] != "") {
doOpen(uris.at(0));
}
else if(platformData.contains("data"))
{
doCreateFileAndOpen(platformData["data"].toString(),
(platformData.contains("name") ? platformData["name"].toString() : "seaprint"));
}
}
void FreedesktopDBusAdaptor::Activate(const QVariantMap&)
{
QMetaObject::invokeMethod(_view->rootObject(), "activate");
}

View file

@ -1,21 +0,0 @@
#ifndef FREEDESKTOPDBUSADAPTOR_H
#define FREEDESKTOPDBUSADAPTOR_H
#include "dbusadaptorbase.h"
class FreedesktopDBusAdaptor : public QDBusAbstractAdaptor, public DBusAdaptorBase
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Application")
public:
FreedesktopDBusAdaptor(QQuickView *view);
~FreedesktopDBusAdaptor();
public Q_SLOTS:
Q_NOREPLY void Open(const QStringList& uris, const QVariantMap& platformData);
Q_NOREPLY void Activate(const QVariantMap& platformData);
};
#endif // FREEDESKTOPDBUSADAPTOR_H

View file

@ -1,6 +1,4 @@
#include <QtQuick>
#include <QVariant>
#include <QDBusConnection>
#include <sailfishapp.h>
#include <src/ippdiscovery.h>
@ -10,10 +8,6 @@
#include <src/convertchecker.h>
#include <src/settings.h>
#include <src/rangelistchecker.h>
#include <src/freedesktopdbusadaptor.h>
#include <src/seaprintdbusadaptor.h>
#include "argget.h"
#include <iostream>
Q_DECLARE_METATYPE(CURLcode)
Q_DECLARE_METATYPE(Bytestream)
@ -32,17 +26,6 @@ static QObject* singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngi
int main(int argc, char *argv[])
{
bool prestart = false;
std::string FileName;
SwitchArg<bool> pretsartOpt(prestart, {"--prestart"}, "Run prestart");
PosArg fileArg(FileName, "File to print", true);
ArgGet args({&pretsartOpt}, {&fileArg});
if(!args.get_args(argc, argv))
{
return 1;
}
qRegisterMetaType<CURLcode>();
qRegisterMetaType<Bytestream>();
qRegisterMetaType<PrintParameters>();
@ -69,26 +52,8 @@ int main(int argc, char *argv[])
QQuickView* view = SailfishApp::createView();
view->engine()->addImportPath(SailfishApp::pathTo("qml/pages").toString());
view->setSource(SailfishApp::pathToMainQml());
FreedesktopDBusAdaptor freedesktopDbus(view);
SeaPrintDBusAdaptor seaprintDbus(view);
if (!QDBusConnection::sessionBus().registerObject("/net/attah/seaprint", view))
qWarning() << "Could not register /net/attah/seaprint D-Bus object.";
if (!QDBusConnection::sessionBus().registerService("net.attah.seaprint"))
qWarning() << "Could not register net.attah.seaprint D-Bus service.";
if(!FileName.empty())
{
qDebug() << "Opening" << FileName.c_str();
QVariant fileNameVariant(FileName.c_str());
QMetaObject::invokeMethod(view->rootObject(), "openFile", Q_ARG(QVariant, fileNameVariant));
}
if(!prestart)
{
view->show();
}
return app->exec();
}

View file

@ -288,7 +288,6 @@ QString IppMsg::consume_attribute(QJsonObject& attrs, Bytestream& data)
|| name.startsWith("printer-firmware")
|| name.endsWith("-supported")
|| name == "printer-icons"
|| name == "media-ready"
|| name.endsWith("-reasons")));
if(!unnamed.empty() || forceArray)

View file

@ -55,12 +55,5 @@ Mimer* Mimer::instance()
QString Mimer::get_type(QString filename) {
QString type = _db.mimeTypeForFile(filename).name();
qDebug() << "MimeType:" << type;
if(type == PDF || type == Postscript || type == Plaintext || isImage(type) || isOffice(type))
{
return type;
}
else
{
return "";
}
}

View file

@ -149,16 +149,9 @@ void PrinterWorker::print(QString filename, QString mimeType, QString targetForm
convertPdf(filename, contents, Params);
}
else if(mimeType == Mimer::Plaintext)
{
if(Params.paperSizeH == 0 && Params.getPaperSizeWInMillimeters() < 26)
{
convertPlaintextLabel(filename, contents, Params);
}
else
{
convertPlaintext(filename, contents, Params);
}
}
else if(Mimer::isImage(mimeType))
{
convertImage(filename, contents, Params, margins);
@ -656,6 +649,7 @@ void PrinterWorker::convertPlaintext(QString filename, Bytestream header, PrintP
doc.setDefaultFont(font);
(void)doc.documentLayout(); // wat
// Needs to be before painter
pdfWriter.setMargins({mmMargin, mmMargin, mmMargin, mmMargin});
@ -738,70 +732,6 @@ void PrinterWorker::convertPlaintext(QString filename, Bytestream header, PrintP
qDebug() << "posted";
}
void PrinterWorker::convertPlaintextLabel(QString filename, Bytestream header, PrintParameters Params)
{
QFile inFile(filename);
if(!inFile.open(QIODevice::ReadOnly))
{
throw ConvertFailedException(tr("Failed to open file"));
}
QString allText = inFile.readAll();
while(allText.endsWith('\n'))
{
allText.chop(1);
}
if(allText.contains('\n') || allText.contains('\f'))
{
throw ConvertFailedException(tr("Multiline label not supported"));
}
QTemporaryFile tmpPdfFile;
tmpPdfFile.open();
// NB: running with rotated format - pdf2printable will sort that out
int pixelHeight = Params.getPaperSizeWInPixels();
QFont font = QFont("Arial");
font.setPixelSize(pixelHeight);
QFontMetrics fm(font);
QString bigText = "AXgjqÈÅÄÖþ";
QRect rect = fm.boundingRect(bigText);
while(rect.height() > pixelHeight*(8.0/10.0))
{
font.setPixelSize(font.pixelSize()-1);
fm = QFontMetrics(font);
rect = fm.boundingRect(bigText);
}
rect = fm.boundingRect(allText);
int pixelWidth = rect.width() + pixelHeight/2;
float ratio = pixelWidth*1.0/pixelHeight;
Params.paperSizeH = Params.paperSizeW * ratio;
QPdfWriter pdfWriter(tmpPdfFile.fileName());
pdfWriter.setCreator("SeaPrint " SEAPRINT_VERSION);
QPageSize pageSize({Params.getPaperSizeHInPoints(), Params.getPaperSizeWInPoints()}, QPageSize::Point);
pdfWriter.setPageSize(pageSize);
pdfWriter.setMargins({0,0,0,0});
pdfWriter.setResolution(Params.hwResH);
QPainter painter(&pdfWriter);
int xOffset = -rect.x() + pixelHeight/4;
int yOffset = -rect.y() + pixelHeight/10;
painter.setFont(font);
painter.drawText(xOffset, yOffset, allText);
painter.end();
convertPdf(tmpPdfFile.fileName(), header, Params);
qDebug() << "Finished";
qDebug() << "posted";
}
void PrinterWorker::awaitResult(CurlRequester& cr, QString callback)
{
Bytestream resMsg;

View file

@ -60,7 +60,6 @@ private:
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 convertPlaintextLabel(QString filename, Bytestream header, PrintParameters Params);
void awaitResult(CurlRequester& cr, QString callback);

View file

@ -1,21 +0,0 @@
#include "seaprintdbusadaptor.h"
#include <QtQuick>
SeaPrintDBusAdaptor::SeaPrintDBusAdaptor(QQuickView *view)
: QDBusAbstractAdaptor(view)
, DBusAdaptorBase(view)
{
}
SeaPrintDBusAdaptor::~SeaPrintDBusAdaptor()
{
}
void SeaPrintDBusAdaptor::Open(const QString& fileName)
{
doOpen(fileName);
}
void SeaPrintDBusAdaptor::OpenPlaintext(const QString& fileContents, const QString& name)
{
doCreateFileAndOpen(fileContents, name);
}

View file

@ -1,21 +0,0 @@
#ifndef SEAPRINTDBUSADAPTOR_H
#define SEAPRINTDBUSADAPTOR_H
#include "dbusadaptorbase.h"
class SeaPrintDBusAdaptor : public QDBusAbstractAdaptor, public DBusAdaptorBase
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "net.attah.seaprint")
public:
SeaPrintDBusAdaptor(QQuickView *view);
~SeaPrintDBusAdaptor();
public Q_SLOTS:
Q_NOREPLY void Open(const QString& fileName);
Q_NOREPLY void OpenPlaintext(const QString& fileContents, const QString& name);
};
#endif // SEAPRINTDBUSADAPTOR_H

View file

@ -276,6 +276,10 @@
<source>Not on WiFi</source>
<translation>Nicht mit einem WLAN verbunden</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Dieses Dokumentformat wird nicht unterstützt</translation>
</message>
<message>
<source>This format may not render correctly</source>
<translation>Dieses Format wird möglicherweise nicht richtig dargestellt</translation>
@ -520,10 +524,6 @@ auf diesem Drucker</translation>
<source>Inconsistent duplex setting</source>
<translation>Uneinheitliche Duplex-Einstellung</translation>
</message>
<message>
<source>Multiline label not supported</source>
<translation>Mehrzeilige Etiketten werden nicht unterstützt</translation>
</message>
</context>
<context>
<name>RangeSetting</name>
@ -535,14 +535,6 @@ auf diesem Drucker</translation>
<source>Advanced</source>
<translation>Fortgeschrittene</translation>
</message>
<message>
<source>Low</source>
<translation>Niedrigster</translation>
</message>
<message>
<source>High</source>
<translation>Höchster</translation>
</message>
</context>
<context>
<name>Setting</name>
@ -627,14 +619,6 @@ auf diesem Drucker</translation>
<source>SVGs</source>
<translation>SVGs</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Dieses Dokumentformat wird nicht unterstützt</translation>
</message>
<message>
<source>New file selected</source>
<translation>Neue Datei ausgewählt</translation>
</message>
</context>
<context>
<name>strings</name>
@ -1308,35 +1292,35 @@ auf diesem Drucker</translation>
</message>
<message>
<source>184 x 260mm</source>
<translation>184 x 260mm</translation>
<translation type="unfinished">184 x 260mm</translation>
</message>
<message>
<source>195 x 270mm</source>
<translation>195 x 270mm</translation>
<translation type="unfinished">195 x 270mm</translation>
</message>
<message>
<source>55 x 85mm</source>
<translation>55 x 85mm</translation>
<translation type="unfinished">55 x 85mm</translation>
</message>
<message>
<source>55 x 91mm</source>
<translation>55 x 91mm</translation>
<translation type="unfinished">55 x 91mm</translation>
</message>
<message>
<source>54 x 86mm</source>
<translation>54 x 86mm</translation>
<translation type="unfinished">54 x 86mm</translation>
</message>
<message>
<source>275 x 395mm</source>
<translation>275 x 395mm</translation>
<translation type="unfinished">275 x 395mm</translation>
</message>
<message>
<source>89 x 119mm</source>
<translation>89 x 119mm</translation>
<translation type="unfinished">89 x 119mm</translation>
</message>
<message>
<source>Folio</source>
<translation>Folio</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Folio (Special)</source>
@ -5193,6 +5177,10 @@ auf diesem Drucker</translation>
</context>
<context>
<name>utils</name>
<message>
<source></source>
<translation></translation>
</message>
<message>
<source>pending</source>
<translation>Ausstehend</translation>

View file

@ -276,6 +276,10 @@
<source>Not on WiFi</source>
<translation>No hay WiFi</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Formato de documento no soportado</translation>
</message>
<message>
<source>This format may not render correctly</source>
<translation>Este formato puede no renderizarse correctamente</translation>
@ -519,10 +523,6 @@
<source>Inconsistent duplex setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Multiline label not supported</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RangeSetting</name>
@ -534,14 +534,6 @@
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Low</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>High</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setting</name>
@ -626,14 +618,6 @@
<source>SVGs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Formato de documento no soportado</translation>
</message>
<message>
<source>New file selected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>strings</name>
@ -5192,6 +5176,10 @@
</context>
<context>
<name>utils</name>
<message>
<source></source>
<translation></translation>
</message>
<message>
<source>pending</source>
<translation type="unfinished"></translation>

View file

@ -276,6 +276,10 @@
<source>Not on WiFi</source>
<translation>Pas en WiFi</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Format de document non supporté</translation>
</message>
<message>
<source>This format may not render correctly</source>
<translation>Ce format peut ne pas être rendu correctement</translation>
@ -520,10 +524,6 @@ sur cette imprimante</translation>
<source>Inconsistent duplex setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Multiline label not supported</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RangeSetting</name>
@ -535,14 +535,6 @@ sur cette imprimante</translation>
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Low</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>High</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setting</name>
@ -627,14 +619,6 @@ sur cette imprimante</translation>
<source>SVGs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Format de document non supporté</translation>
</message>
<message>
<source>New file selected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>strings</name>
@ -5193,6 +5177,10 @@ sur cette imprimante</translation>
</context>
<context>
<name>utils</name>
<message>
<source></source>
<translation></translation>
</message>
<message>
<source>pending</source>
<translation type="unfinished"></translation>

View file

@ -276,6 +276,10 @@
<source>Not on WiFi</source>
<translation>Niet met WiFi netwerk verbonden</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Niet-ondersteunde documentindeling</translation>
</message>
<message>
<source>This format may not render correctly</source>
<translation>Dit formaat wordt mogelijk niet correct weergegeven</translation>
@ -519,10 +523,6 @@
<source>Inconsistent duplex setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Multiline label not supported</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RangeSetting</name>
@ -534,14 +534,6 @@
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Low</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>High</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setting</name>
@ -626,14 +618,6 @@
<source>SVGs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Niet-ondersteunde documentindeling</translation>
</message>
<message>
<source>New file selected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>strings</name>
@ -5192,6 +5176,10 @@
</context>
<context>
<name>utils</name>
<message>
<source></source>
<translation></translation>
</message>
<message>
<source>pending</source>
<translation type="unfinished"></translation>

View file

@ -276,6 +276,10 @@
<source>Not on WiFi</source>
<translation>Brak połączenia WiFi</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Nieobsługiwany rodzaj dokumentu</translation>
</message>
<message>
<source>This format may not render correctly</source>
<translation>Ten format może zostać przetworzony niepoprawnie</translation>
@ -519,10 +523,6 @@
<source>Inconsistent duplex setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Multiline label not supported</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RangeSetting</name>
@ -534,14 +534,6 @@
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Low</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>High</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setting</name>
@ -626,14 +618,6 @@
<source>SVGs</source>
<translation>SVG</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation>Nieobsługiwany rodzaj dokumentu</translation>
</message>
<message>
<source>New file selected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>strings</name>
@ -5192,6 +5176,10 @@
</context>
<context>
<name>utils</name>
<message>
<source></source>
<translation></translation>
</message>
<message>
<source>pending</source>
<translation>oczekujące</translation>

View file

@ -276,6 +276,10 @@
<source>Not on WiFi</source>
<translation>WiFi</translation>
</message>
<message>
<source>Unsupported document format</source>
<translation></translation>
</message>
<message>
<source>This format may not render correctly</source>
<translation></translation>
@ -519,10 +523,6 @@
<source>Inconsistent duplex setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Multiline label not supported</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RangeSetting</name>
@ -534,14 +534,6 @@
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Low</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>High</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setting</name>
@ -626,14 +618,6 @@
<source>SVGs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported document format</source>
<translation></translation>
</message>
<message>
<source>New file selected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>strings</name>
@ -5192,6 +5176,10 @@
</context>
<context>
<name>utils</name>
<message>
<source></source>
<translation></translation>
</message>
<message>
<source>pending</source>
<translation type="unfinished"></translation>

View file

@ -276,6 +276,10 @@
<source>Not on WiFi</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported document format</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This format may not render correctly</source>
<translation type="unfinished"></translation>
@ -519,10 +523,6 @@
<source>Inconsistent duplex setting</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Multiline label not supported</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RangeSetting</name>
@ -534,14 +534,6 @@
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Low</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>High</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Setting</name>
@ -626,14 +618,6 @@
<source>plaintext</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unsupported document format</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New file selected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>strings</name>