Okay, I never blogged this, my bad.

To sum up, about 2.5 weeks ago, I had made Print capable of USB printing.

Here are some screen shots:

I have yet to test the integration with the print device icon. I suppose it will work fine, because
the device icon works just fine for any usb print activity (last i checked with a printer).
For now it works like a charm for any file viewed in Print and which prints to Cups-PDF.

Feedback pleeaaaaaase 😀

p.s. Oh, the Print Setup will have an incarnation as a print dialog, but that’s a poll. 😉


What is this about?

The last ODFTOPS script was pretty generic, it was done keeping in mind only the abiword 2.6.8 version. So here we have a pretty efficient script which works checking for capabilities a specific version of abiword would have, and writes the PostScript accordingly for maximum efficiency.

Did I stumble into any glitches while making this?

Yes, in fact the problem was I didn’t realize that CUPS and its executioner the lp user write to their own special TMPDIR, and when I was debugging defining it to /tmp/ , it wouldn’t work. Also the new script invites subshells, so we dont have to mess with system specific messages like “Aborted” and/or abiword specific messages. But SubShells could not write in the lp user’s TMPDIR, so I had to make define a TMPDIR1 in /tmp/, so as to perform the subshell related operations there.

Do we have an algorithm for the approach?

Yes, we do.
1) Check if abiword can output to different folders other than the one in which the input file is in. Meaning we would be checking if our abiword is 2.6.6+
for that output to .doc, so that we wouldnt be crossing out 2.6.8, as it can write to other folders, but not output directly as .ps
2) if true, check if its abiword 2.6.8, so that we do an intermediate doc conversion and then proceed
3) Else, just convert to ps directly
4) if 2.6.6–, then do a cp into the cups defined tmp dir and then perform operations

Where is the code?

The filter code

Thats about it.

Current Activities
* I am currently reading the D-BUS Specification, so I get a grip on how our IPC model works, and how objects are handled in read.

Current Design scheme for the fork of Read, i.e. The Print Activity, that I am following is,
1) Abandon edit, as the print activity is meant only for preview purposes, the parent activity is better imo for editing
2) Make a new toolbar to Open and close documents from within the journal. Also make a Print toolbar
3) Implement a module which converts odt to pdf using pycups code, and in the end results in that pdf being displayed
4) Add pycups code as a handler to another print button, and save that already converted pdf into journal as the execution for the PDFify button
5) As a bonus configure the pycups print configuration features realistically based on how our document looks in the Print activity. Essentially this would mean, add pycups code in each module of the Print activity for configuring.

I’m open for suggestions on this design scheme. Also, I’ve started work only on the most generic features, I will proceed with the actual design once we agree on it.

*trumpets and drums*
The Filter Code!
And thus, we have a filter for ODF!

The part that lagged this was the lack of my knowledge to do a chmod on the filter so that it could be written and read by all,
and SELINUX , and the lack of knowledge that a filter cant write to user directories (that was the biggest part, as the sample program would work but this wouldn’t)

Anyway, what you should do to make it work ( I will make a package for this soon)

1) Open terminal in SU mode 'gedit /etc/cups/odftops.types'
# Local MIME definition for ODT files
application/vnd.oasis.opendocument.text odt
and save
2) in terminal/konsole 'gedit /etc/cups/odftops.convs'
# Local ODT to PostScript filter for CUPS
application/vnd.oasis.opendocument.text application/postscript 100 odftops
and save
3) again do a 'gedit /usr/lib/cups/filter/odftops'
Paste the pastebin code in it and save
4) now do a 'chmod 777 (or 755) /usr/lib/cups/filter/odftops' under root
and then do a restorecon

and voila we have a odt filter set up. 🙂
of course libabiword is a dependency