#!/usr/bin/env python3

# compressor.py
from subprocess import Popen, PIPE

def compress(value):
    """Compresses a byte array with the xz binary"""

    process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def decompress(value):
    """Decompresses a byte array with the xz binary"""

    process = Popen(["xz", "--decompress", "--stdout", "--force"],
                    stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def compress_file(path):
    """Compress the file at 'path' with the xz binary"""

    process = Popen(["xz", "--compress", "--force", "--stdout", path], stdout=PIPE)
    return process.communicate()[0]

# compressor.py

import os
import sys
from optparse import OptionParser
from sys import argv
import base64
import json
from io import BytesIO

from os.path import basename
from errno import EPIPE
import lzma

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = json.loads(ppds_decompressed.decode(encoding='ASCII'))
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.items():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            try:
                print(ppd.replace('"', '"' + binary_name + ':', 1))
            except IOError as e:
                # Errors like broken pipes (program which takes the standard
                # output terminates before this program terminates) should not
                # generate a traceback.
                if e.errno == EPIPE: exit(0)
                raise

def cat(ppd):
    # Ignore driver's name, take only PPD's
    ppd = ppd.split(":")[-1]
    # Remove also the index
    ppd = "0/" + ppd[ppd.find("/")+1:]

    # Object for streaming decompression
    decompressor = lzma.LZMADecompressor()
    # size for one decompression i.e. ~20MB
    size = 20000000

    ppds = load()
    ppds['ARCHIVE'] = base64.b64decode(ppds['ARCHIVE'].encode('ASCII'))
    ppdtext=bytearray()

    if ppd in ppds:
        start = ppds[ppd][0]
        length = ppds[ppd][1]

        text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
        for i in range(int(start/size)):
            text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
        text.seek(start%size)

        if((size-(start%size)) < length):
            ppdtext.extend(text.read())
            length = length - (size-(start%size))
            text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
            while(size < length):
                ppdtext.extend(text.read())
                length = length - size
                text = BytesIO(decompressor.decompress(ppds['ARCHIVE'],size))
            ppdtext.extend(text.read(length))
        else:
            ppdtext.extend(text.read(length))
        
        return ppdtext

def main():
    usage = "usage: %prog list\n" \
            "       %prog cat URI"
    version = "%prog 1.1.0\n" \
              "Copyright (c) 2013 Vitor Baptista.\n" \
              "This is free software; see the source for copying conditions.\n" \
              "There is NO warranty; not even for MERCHANTABILITY or\n" \
              "FITNESS FOR A PARTICULAR PURPOSE."
    parser = OptionParser(usage=usage,
                          version=version)
    (options, args) = parser.parse_args()

    if len(args) == 0 or len(args) > 2:
        parser.error("incorrect number of arguments")

    if args[0].lower() == 'list':
        ls()
    elif args[0].lower() == 'cat':
        if not len(args) == 2:
            parser.error("incorrect number of arguments")
        ppd = cat(args[1])
        if not ppd:
            parser.error("Printer '%s' does not have default driver!" % args[1])
        try:
            # avoid any assumption of encoding or system locale; just print the
            # bytes of the PPD as they are
            if sys.version_info.major < 3:
                sys.stdout.write(ppd)
            else:
                sys.stdout.buffer.write(ppd)
        except IOError as e:
            # Errors like broken pipes (program which takes the standard output
            # terminates before this program terminates) should not generate a
            # traceback.
            if e.errno == EPIPE: exit(0)
            raise
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = b"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"

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        # We don't want a KeyboardInterrupt throwing a
        # traceback into stdout.
        pass
