#!/usr/bin/python

__version__ = "0.1"

import sys
try:
    import hachoir
except ImportError:
    import os
    sys.path.append(os.path.join(sys.path[0], '..'))
    import hachoir

from hachoir.error import error
from hachoir.cmd_line import (getHachoirOptions, getTerminalCharset,
    createParser, initHachoir)
from optparse import OptionGroup, OptionParser
from hachoir.stream import InputStreamError

def displayVersion(*args):
    print "Hachoir urwid version %s" % __version__
    print "Hachoir library version %s" % hachoir.__version__
    print
    print "Website: %s" % hachoir.website
    sys.exit(0)

def parseOptions():
    parser = OptionParser(usage="%prog [options] filename")

    common = OptionGroup(parser, "Urwid", "Option of urwid explorer")
    common.add_option("--preload", help="Number of fields to preload at each read",
        type="int", action="store", default=3)
    common.add_option("--path", help="Initial path to focus on",
        type="str", action="store", default=None)
    common.add_option("--version", help="Display version and exit",
        action="callback", callback=displayVersion)
    parser.add_option_group(common)

    hachoir = getHachoirOptions(parser, console_ui=True)
    parser.add_option_group(hachoir)

    values, arguments = parser.parse_args()
    if len(arguments) != 1:
        parser.print_help()
        sys.exit(1)
    return values, arguments[0]

def main():
    # Parser options and initialize Hachoir
    values, filename = parseOptions()
    initHachoir(values)

    # Open file and create parser
    try:
        parser = createParser(filename)
    except InputStreamError, err:
        error("Unable to open file: %s" % err)
        sys.exit(1)
    if not parser:
        error("Unable to parse file: %s" % filename)
        sys.exit(1)

    # Explore file
    from hachoir.ui.urwid.urwid_ui import exploreFieldSet
    exploreFieldSet(parser, values.preload, values.path)

if __name__ == "__main__":
    main()

