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

import sys
import pygtk
if not sys.platform == 'win32':
	pygtk.require('2.0')
import gtk
import gobject
import os.path
import urllib
import xml.etree.ElementTree
import string
import traceback
from lib import application

class TreeStoreCat(gtk.TreeStore):
	def __init__(self, config, parent):
		self.config = config
		self.parent = parent
		gtk.TreeStore.__init__(self, gtk.gdk.Pixbuf, str, gobject.TYPE_PYOBJECT)
		gtk.TreeStore.set_sort_column_id(self, 1, gtk.SORT_ASCENDING)
		
		self.import_src_list()
		
	def ajouter(self, categorie, parent = None):
		childiter = self.iter_children(parent)
		while childiter != None:
			if self.get_value(childiter, 1) == categorie:
				return childiter
			childiter = self.iter_next(childiter)
		
		return self.append(parent, [gtk.gdk.pixbuf_new_from_file(categorie.get("icon")).scale_simple(32,32,gtk.gdk.INTERP_BILINEAR), categorie.get("name"), categorie])
		
	def import_src_list(self):
		self.clear()
		self.erreur = []
		files = ""
		rootcat = application.Categorie(self.config, None)
		rootiter = self.ajouter(rootcat, None)
		childiter = self.parent.ListStoreAfficher.get_iter_first()
		while childiter != None:
			(activable, active, name, link) = self.parent.ListStoreAfficher.get(childiter)
			file = string.replace(link, "http://", "")
			file = string.replace(file, "\\", "-")
			file = string.replace(file, "/", "-")
			file = string.replace(file, "|", "-")
			file = string.replace(file, ":", "-")
			file = string.replace(file, "*", "-")
			file = string.replace(file, "?", "-")
			file = string.replace(file, "\"", "-")
			file = string.replace(file, "<", "-")
			file = string.replace(file, ">", "-")
			if activable and active and os.path.isfile("list/" + file):
				appschild = []
				appschild = self.import_xml_file("list/" + file, self.parent.fenetre, rootiter)
				rootcat.set("apps", rootcat.get("apps") + appschild)
			childiter = self.parent.ListStoreAfficher.iter_next(childiter)
			if len(self.erreur) > 0:
				for i in range(len(self.erreur)):
					files += "\n" + self.erreur[i]
				DialogErreur = gtk.MessageDialog(fenetre, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Erreur: Impossible de parser les fichiers suivants:" + files)
				DialogErreur.run()
				DialogErreur.destroy()

	def import_xml_file(self, xmlfile, fenetre, rootiter):
		try:
			xmlcontent = xml.etree.ElementTree.parse(xmlfile)
		except xml.parsers.expat.ExpatError:
			self.erreur.append(xmlfile)
			traceback.print_exc()
			return []
		return self.import_cat(xmlcontent, rootiter)
		
	def import_cat(self, element, iter = None):
		categories = element.findall("category")
		apps = []
		for elements in categories:
			categorie = application.Categorie(self.config, elements)
			newiter = self.ajouter(categorie, iter)
			appschild = self.import_cat(elements, newiter)
			categorie.set("apps", categorie.get("apps") + appschild)
			apps = apps + categorie.get("apps")
		return apps
