#!/usr/bin/env python
# -*- coding: utf-8 -*-

""" wallpaperoptimizer start program

wallpaperoptimizer is multi wallpaper changer.
"""

# <singlerun>
#	wallpaperoptimiz  ../2560x1920.jpg ../1500x844.jpg -C
# <background>
#	wallpaperoptimiz -D -i 5
# <applet window mode>
#	wallpaperoptimiz -W
# <applet>
#	in GNOME panel

import sys
import logging

import pygtk
pygtk.require("2.0")
import gtk
import gnomeapplet
from optparse import OptionValueError

from WallpaperOptimizer.Options import Options
from WallpaperOptimizer.Core import Core
from WallpaperOptimizer.Applet import Applet

def _putlogOption(option):
	"""
	option instance dump.
	"""
	logging.debug('Command line option as.')
	logging.debug('%20s [%s,%s].'
		 % ( 'align', option.getLAlign(), option.getRAlign() ))
	logging.debug('%20s [%s,%s].'
		 % ( 'valign', option.getLValign(), option.getRValign() ))
	logging.debug('%20s [%d,%d,%d,%d]'
		 % ( 'mergin'
		 , option.getLMergin(), option.getRMergin()
		 , option.getTopMergin(), option.getBtmMergin() ))
	logging.debug('%20s [%s]'
		 % ( 'fixed', option.getFixed() ))
	logging.debug('%20s [%s,%s]'
		 % ( 'display', option.getLSize(), option.getRSize() ))
	logging.debug('%20s [%s]'
		 % ( 'bgcolor', option.getBgcolor() ))
	logging.debug('%20s [%s,%s]'
		 % ( 'srcdir', option.getLSrcdir(), option.getRSrcdir() ))
	logging.debug('%20s [%s]'
		 % ( 'setWall', option.getSetWall() ))
	logging.debug('%20s [%s]'
		 % ( 'savepath', option.getSavePath() ))
	logging.debug('%20s [%s]'
		 % ( 'daemon', option.getDaemonize() ))
	logging.debug('%20s [%s]'
		 % ( 'interval', option.getInterval() ))

def factory(applet, iid):
	"""
	for gnomeapplet factory method.
	"""
	Applet(applet, iid, logging)
	return gtk.TRUE

def do_main():
	try:
		option = Options()
	except OptionValueError, msg:
		logging.error('** OptionValueError: %s. ' % msg)
		sys.exit(2)

	Verbose = option.getVerbose()
	if Verbose:
		loglevel = logging.DEBUG
	else:
		loglevel = logging.INFO

	logging.basicConfig(level=loglevel
						, format='%(asctime)s %(levelname)5s %(message)s'
						, filename='/tmp/wallopt.log'
						, filemode='a')
	logging.info('Starting ... wallpaperoptimizer.')

	if option.getWindow():
		logging.debug('Running ... window mode.')
		main_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		main_window.set_title("Wallpaperoptimizer Applet Window")
		main_window.connect("destroy", gtk.main_quit)
		app = gnomeapplet.Applet()
		factory(app, None)
		app.reparent(main_window)
		main_window.show_all()
		wh = main_window.get_size()
		main_window.resize(wh[0]*2, wh[1])
		gtk.main()

	elif (option.getIID() == None and option.getFD() == None):
		if Verbose:
			console = logging.StreamHandler()
			console.setLevel(logging.DEBUG)
			formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
			console.setFormatter(formatter)
			logging.getLogger('').addHandler(console)
			_putlogOption(option)

		if option.getDaemonize():
			core = Core(option)
			logging.debug('Running ... daemonize mode.')
			try:
				core.background()
			except Core.CoreRuntimeError, msg:
				logging.error('** CoreRuntimeError: %s. ' % msg.value)
				sys.exit(2)

		else:
			core = Core(option)
			logging.debug('Running ... singlerun mode.')
			try:
				core.singlerun()
			except Core.CoreRuntimeError, msg:
				logging.error('** CoreRuntimeError: %s. ' % msg.value)
				sys.exit(2)

	else:
		logging.debug('Running ... applet mode.')
		gnomeapplet.bonobo_factory("OAFIID:wallpaperoptimizerApplet_Factory"
								, gnomeapplet.Applet.__gtype__
								, "wallpaper changer"
								, "1.0"
								, factory)

	logging.info('Quit ... wallpaperoptimizer.')

if __name__ == "__main__":
	do_main()
	sys.exit(0)

