#!/usr/bin/env python2.4
# -*- mode: python -*-

# This comes first.  Seriously.
import democracy.xlibhelper as xlibhelper
if xlibhelper.XInitThreads() == 0:
    print "WARNING: XInitThreads() failed!"

import os.path
import sys
import optparse

import pygtk
pygtk.require('2.0')

import democracy
# Make sure democracy modules are on the search path
sys.path.insert(0, os.path.abspath(os.path.dirname(democracy.__file__)))

# Set up gettext before everything else
import gtcache
gtcache.init()

import config
import prefs

if '--unittest' in sys.argv:
    # handle this outside optparse, because unittest has its own option set
    sys.argv.remove('--unittest')
    import app
    import unittest
    import test
    unittest.main(module=test)

usage = "usage: %prog [options] [torrent files] [video files]"
parser = optparse.OptionParser(usage=usage)
parser.add_option('--unittest', dest='unittest', default=False,
    action='store_true', 
    help='run unittests instead of launching the program')
parser.add_option('-v', '--version', dest='version', default=False,
    action='store_true', help='print version info')
parser.add_option('--profile', metavar='FILE', help='write profiling information to FILE')
parser.add_option('--bias', metavar='BIAS', help='set profiling bias to BIAS', type=float, default=None)
parser.add_option('--sync', metavar='SYNC', help='Use X Syncronously', default=False, action="store_true")
(options, args) = parser.parse_args()

def startapp():
    import platformutils
    platformutils.initializeLocale()

    import singleclick
    for i in xrange(len(args)):
        if args[i].startswith('file://'):
            args[i] = args[i][len('file://'):]
    singleclick.setCommandLineArgs(args)
    import app
    app.main()
if options.version:
    print "Democracy Player"
    print "Version: %s" % config.get(prefs.APP_VERSION)
    print ""
    print "Democracy Player comes with ABSOLUTELY NO WARRANTY."
    print "This is free software, and you are welcome to redistribute it"
    print "under certain conditions.  See license.txt for details."
elif options.profile:
    import profile
    import eventloop
    if options.sync:
        pass
    def main():
        import app
        app.main()
    if (options.bias):
        profile.Profile.bias = options.bias
    eventloop.profile_file = options.profile
    profile.run ('main()', options.profile)
else:
    try:
	import dbus
	try:
	    import dbus_bindings
	except ImportError, main_error:
	    try:
		dbus_bindings = dbus.dbus_bindings
	    except:
		raise main_error
        import onetime
        try:
            onetime.OneTime()
            startapp()
        except onetime.NameExistsException:
            bus = dbus.SessionBus()
            proxy_obj = bus.get_object('org.participatoryculture.dtv.onetime', '/org/participatoryculture/dtv/OneTime')
            iface = dbus.Interface(proxy_obj, 'org.participatoryculture.dtv.OneTimeIface')
    
            dbusargs = dbus.Array(args, signature="s")
    
            iface.HandleArgs(dbusargs)
        except dbus_bindings.DBusException:
            startapp()
    except ImportError:
        startapp()
