#!/usr/local/bin/python2.7
#
# Copyright 2008 Dan Smith <dsmith@danplanet.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


from chirp import platform, CHIRP_VERSION
from chirpui import config

# Hack to setup environment
platform.get_platform()

import gtk
import sys
import os
import locale
import gettext

p = platform.get_platform()
if hasattr(sys, "frozen"):
    log = file(p.config_file("debug.log"), "w", 0)
    sys.stderr = log
    sys.stdout = log
elif not os.isatty(0):
    log = file(p.config_file("debug.log"), "w", 0)
    sys.stdout = log
    sys.stderr = log

print "CHIRP %s on %s (Python %s)" % (CHIRP_VERSION,
                                      platform.get_platform().os_version_string(),
                                      sys.version.split()[0])

execpath = platform.get_platform().executable_path()
localepath = os.path.abspath(os.path.join(execpath, "locale"))
if not os.path.exists(localepath):
    localepath = "/usr/share/chirp/locale"

conf = config.get()
manual_language = conf.get("language", "state")
langs = []
if manual_language and manual_language != "Auto":
    lang_codes = { "English"   : "en_US",
                   "Polish"    : "pl",
                   "Italian"   : "it",
                   "Dutch"     : "nl",
                   "German"    : "de",
                   "Hungarian" : "hu",
                   }
    try:
        print lang_codes[manual_language]
        langs = [lang_codes[manual_language]]
    except KeyError:
        print "Unsupported language `%s'" % manual_language
else:
    lc, encoding = locale.getdefaultlocale()
    if (lc):
	langs = [lc]
    try:
        langs += os.getenv("LANG").split(":")
    except:
        pass

path = "locale"
gettext.bindtextdomain("CHIRP", localepath)
gettext.textdomain("CHIRP")
lang = gettext.translation("CHIRP", localepath, languages=langs,
                           fallback=True)

# Python <2.6 does not have str.format(), which chirp uses to make translation
# strings nicer. So, instead of installing the gettext standard "_()" function,
# we can install our own, which returns a string of the following class,
# which emulates the new behavior, thus allowing us to run on older Python
# versions.
class CompatStr(str):
    def format(self, **kwargs):
        base = lang.gettext(self)
        for k,v in kwargs.items():
            base = base.replace("{%s}" % k, str(v))
        return base

pyver = sys.version.split()[0]
vmaj, vmin, vrel = pyver.split(".", 3)
if int(vmaj) < 2 or int(vmin) < 6:
    # Python <2.6, emulate str.format()
    import __builtin__
    def lang_with_format(string):
        return CompatStr(string)
    __builtin__._ = lang_with_format
else:
    # Python >=2.6, use normal gettext behavior
    lang.install()

from chirp import *
from chirpui import mainapp, config

a = mainapp.ChirpMain()

profile = False
if len(sys.argv) > 1:
    arg = sys.argv[1]
    index = 2
    if arg == "--profile":
        profile = True
    elif arg == "--help":
        print "Usage: %s [file...]" % sys.argv[0]
        sys.exit(0)
    else:
        index = 1
else:
    index = 1

for i in sys.argv[index:]:
    print "Opening %s" % i
    a.do_open(i)

a.show()

if profile:
    import cProfile, pstats
    cProfile.run("gtk.main()", "chirpw.stats")
    p = pstats.Stats("chirpw.stats")
    p.sort_stats("cumulative").print_stats(10)
else:
    gtk.main()

if config._CONFIG:
    config._CONFIG.set("last_dir",
                       platform.get_platform().get_last_dir(),
                       "state")
    config._CONFIG.save()
