def __init__(self, *args, **kwargs):
        Browser.__init__(self, *args, **kwargs)

        # Creation du configCtrl
        from CONF import configCtrl
        self.configManager = configCtrl()
        if not self.configManager.is_conf_valid: raise

        self.host = self.configManager.host
        self.user = self.configManager.user
        self.password = self.configManager.password
        self.remotedirList = self.configManager.remotedirList

        #self.localdirList       = self.configManager.localdirList
        #self.downloadTypeList   = self.configManager.downloadTypeLst

        self.racineDisplayList = [
            Item.TYPE_SKIN, Item.TYPE_SCRAPER, Item.TYPE_SCRIPT,
            Item.TYPE_PLUGIN
        ]
        self.pluginDisplayList = [
            Item.TYPE_PLUGIN_MUSIC, Item.TYPE_PLUGIN_PICTURES,
            Item.TYPE_PLUGIN_PROGRAMS, Item.TYPE_PLUGIN_VIDEO
        ]
        self.scraperDisplayList = [
            Item.TYPE_SCRAPER_MUSIC, Item.TYPE_SCRAPER_VIDEO
        ]

        self.connected = False  # status de la connection ( inutile pour le moment )
        self.index = ""
        self.rightstest = ""
        self.CACHEDIR = self.configManager.CACHEDIR

        # Connection to FTP server
        try:

            self.passionFTPCtrl = FtpDownloadCtrl(self.host, self.user,
                                                  self.password,
                                                  self.remotedirList,
                                                  self.CACHEDIR)
            self.connected = True
        except:
            print "PassionFtpBrowser::__init__: Exception durant la connection FTP"
            print "Impossible de se connecter au serveur FTP: %s" % self.host
            print_exc()

        # Creons ItemInfosManager afin de recuperer les descriptions des items
        self.itemInfosManager = ItemInfosManager(mainwin=self)
        self.infoswarehouse = self.itemInfosManager.get_info_warehouse()
    def __init__(self, *args, **kwargs):
        Browser.__init__(self, *args, **kwargs)

        # Creation du configCtrl
        from CONF import configCtrl

        self.configManager = configCtrl()
        if not self.configManager.is_conf_valid:
            raise

        self.host = self.configManager.host
        self.user = self.configManager.user
        self.password = self.configManager.password
        self.remotedirList = self.configManager.remotedirList

        # self.localdirList       = self.configManager.localdirList
        # self.downloadTypeList   = self.configManager.downloadTypeLst

        self.racineDisplayList = [Item.TYPE_SKIN, Item.TYPE_SCRAPER, Item.TYPE_SCRIPT, Item.TYPE_PLUGIN]
        self.pluginDisplayList = [
            Item.TYPE_PLUGIN_MUSIC,
            Item.TYPE_PLUGIN_PICTURES,
            Item.TYPE_PLUGIN_PROGRAMS,
            Item.TYPE_PLUGIN_VIDEO,
        ]
        self.scraperDisplayList = [Item.TYPE_SCRAPER_MUSIC, Item.TYPE_SCRAPER_VIDEO]

        self.connected = False  # status de la connection ( inutile pour le moment )
        self.index = ""
        self.rightstest = ""
        self.CACHEDIR = self.configManager.CACHEDIR

        # Connection to FTP server
        try:

            self.passionFTPCtrl = FtpDownloadCtrl(
                self.host, self.user, self.password, self.remotedirList, self.CACHEDIR
            )
            self.connected = True
        except:
            print "PassionFtpBrowser::__init__: Exception durant la connection FTP"
            print "Impossible de se connecter au serveur FTP: %s" % self.host
            print_exc()

        # Creons ItemInfosManager afin de recuperer les descriptions des items
        self.itemInfosManager = ItemInfosManager(mainwin=self)
        self.infoswarehouse = self.itemInfosManager.get_info_warehouse()
class PassionFtpBrowser(Browser):
    """
    Browser FTP server using FTP command and display information about item stored in the database
    """

    #    def __init__(self):
    def __init__(self, *args, **kwargs):
        Browser.__init__(self, *args, **kwargs)

        # Creation du configCtrl
        from CONF import configCtrl

        self.configManager = configCtrl()
        if not self.configManager.is_conf_valid:
            raise

        self.host = self.configManager.host
        self.user = self.configManager.user
        self.password = self.configManager.password
        self.remotedirList = self.configManager.remotedirList

        # self.localdirList       = self.configManager.localdirList
        # self.downloadTypeList   = self.configManager.downloadTypeLst

        self.racineDisplayList = [Item.TYPE_SKIN, Item.TYPE_SCRAPER, Item.TYPE_SCRIPT, Item.TYPE_PLUGIN]
        self.pluginDisplayList = [
            Item.TYPE_PLUGIN_MUSIC,
            Item.TYPE_PLUGIN_PICTURES,
            Item.TYPE_PLUGIN_PROGRAMS,
            Item.TYPE_PLUGIN_VIDEO,
        ]
        self.scraperDisplayList = [Item.TYPE_SCRAPER_MUSIC, Item.TYPE_SCRAPER_VIDEO]

        self.connected = False  # status de la connection ( inutile pour le moment )
        self.index = ""
        self.rightstest = ""
        self.CACHEDIR = self.configManager.CACHEDIR

        # Connection to FTP server
        try:

            self.passionFTPCtrl = FtpDownloadCtrl(
                self.host, self.user, self.password, self.remotedirList, self.CACHEDIR
            )
            self.connected = True
        except:
            print "PassionFtpBrowser::__init__: Exception durant la connection FTP"
            print "Impossible de se connecter au serveur FTP: %s" % self.host
            print_exc()

        # Creons ItemInfosManager afin de recuperer les descriptions des items
        self.itemInfosManager = ItemInfosManager(mainwin=self)
        self.infoswarehouse = self.itemInfosManager.get_info_warehouse()

    def reset(self):
        """
        Reset the browser (back to start page)
        """
        Browser.reset()

    def _createRootList(self):
        """
        Create and return the root list (all type available)
        Returns list and name of the list
        """
        list = []
        listTitle = _(10)

        # List the main categorie at the root level
        for cat in self.racineDisplayList:
            item = {}
            # item['id']                = ""
            item["name"] = Item.get_type_title(cat)
            # item['parent']            = self.type
            item["downloadurl"] = None
            item["type"] = "CAT"
            item["xbmc_type"] = cat
            item["previewpictureurl"] = None
            item["description"] = Item.get_type_title(cat)
            item["language"] = ""
            item["version"] = ""
            item["author"] = ""
            item["date"] = ""
            item["added"] = ""
            item["thumbnail"] = Item.get_thumb(cat)
            item["previewpicture"] = ""  # Item.get_thumb( cat )
            item[
                "image2retrieve"
            ] = (
                False
            )  # Temporary patch for reseting the flag after download (would be better in the thread in charge of the download)

            list.append(item)
            print item

        return listTitle, list

    def _createPluginList(self):
        """
        Create and return the list of plugin types
        Returns list and name of the list
        """
        list = []
        listTitle = Item.get_type_title(Item.TYPE_PLUGIN)

        # List all the type of plugins
        for cat in self.pluginDisplayList:
            item = {}
            # item['id']                = ""
            # item['parent']            = Item.TYPE_PLUGIN
            item["name"] = Item.get_type_title(cat)
            item["downloadurl"] = None
            item["type"] = "CAT"
            item["xbmc_type"] = cat
            item["previewpictureurl"] = None
            item["description"] = Item.get_type_title(cat)
            item["language"] = ""
            item["version"] = ""
            item["author"] = ""
            item["date"] = ""
            item["added"] = ""
            item["thumbnail"] = Item.get_thumb(cat)
            item["previewpicture"] = ""  # Item.get_thumb( cat )
            item[
                "image2retrieve"
            ] = (
                False
            )  # Temporary patch for reseting the flag after download (would be better in the thread in charge of the download)

            list.append(item)
            print item

        return listTitle, list

    def _createScraperList(self):
        """
        Create and return the list of scraper types
        Returns list and name of the list
        """
        list = []
        listTitle = Item.get_type_title(Item.TYPE_SCRAPER)

        # List all the type of plugins
        for cat in self.scraperDisplayList:
            item = {}
            item["name"] = Item.get_type_title(cat)
            item["downloadurl"] = None
            item["type"] = "CAT"
            item["xbmc_type"] = cat
            item["previewpictureurl"] = None
            item["description"] = Item.get_type_title(cat)
            item["language"] = ""
            item["version"] = ""
            item["author"] = ""
            item["date"] = ""
            item["added"] = ""
            item["thumbnail"] = Item.get_thumb(cat)
            item["previewpicture"] = ""  # Item.get_thumb( cat )
            item[
                "image2retrieve"
            ] = (
                False
            )  # Temporary patch for reseting the flag after download (would be better in the thread in charge of the download)

            list.append(item)
            print item

        return listTitle, list

    def _setDefaultImages(self, item):
        """
        Set the images with default value depending on the type of the item
        """
        print "_setDefaultImages"
        print item["previewpictureurl"]
        if item["previewpictureurl"] == "None":
            # No picture available -> use default one
            item["thumbnail"] = Item.get_thumb(item["xbmc_type"])  # icone
            item["previewpicture"] = ""  # Item.THUMB_NOT_AVAILABLE # preview
        else:
            # Check if picture is already downloaded and available
            downloadImage = False
            thumbnail, checkPathPic = set_cache_thumb_name(item["previewpictureurl"])
            if thumbnail and os.path.isfile(thumbnail):
                item["thumbnail"] = thumbnail
            else:
                item["thumbnail"] = Item.THUMB_NOT_AVAILABLE
                downloadImage = True

            if os.path.exists(checkPathPic):
                item["previewpicture"] = checkPathPic
            else:
                item["previewpicture"] = ""  # Item.THUMB_NOT_AVAILABLE
                downloadImage = True

            if downloadImage == True:
                # Set flag for download (separate thread)
                item["image2retrieve"] = True

    def _downloadImage(self, picname):
        """
        Download picture from the server, save it, create the thumbnail and return path of it
        """
        print "_downloadImage %s" % picname
        try:

            filetodlUrl = picname  # image path on FTP server
            print "filetodlUrl"
            print filetodlUrl
            thumbnail, localFilePath = set_cache_thumb_name(picname)
            print thumbnail
            print localFilePath

            # Retrieve image
            if not self.passionFTPCtrl.downloadImage(filetodlUrl, localFilePath):
                print "ERROR while retrieving image via FTP"
                thumbnail, localFilePath = "", ""

            # remove file if size is 0 bytes and report error if exists error
            if localFilePath and os.path.isfile(localFilePath):
                if os.path.getsize(localFilePath) <= 0:
                    os.remove(localFilePath)
                    # TODO: create a thumb for the default image?
                    # TODO: return empty and manage default image at the level of the caller
                    thumbnail = ""
                else:
                    thumb_size = int(self.thumb_size_on_load)
                    thumbnail = makeThumbnails(localFilePath, thumbnail, w_h=(thumb_size, thumb_size))
                    if thumbnail == "":
                        thumbnail = localFilePath

            #            if thumbnail and os.path.isfile( thumbnail ) and hasattr( listitem, "setThumbnailImage" ):
            #                listitem.setThumbnailImage( thumbnail )
            else:
                thumbnail, localFilePath = "", ""
        except Exception, e:
            # TODO: create a thumb for the default image?
            # TODO: return empty and manage default image at the level of the caller
            thumbnail, localFilePath = "", ""
            print "_downloadImage: Exception - Impossible to download the picture: %s" % picname
            print_exc()
        print "thumbnail = %s" % thumbnail
        print "localFilePath = %s" % localFilePath
        return thumbnail, localFilePath
class PassionFtpBrowser(Browser):
    """
    Browser FTP server using FTP command and display information about item stored in the database
    """

    #    def __init__(self):
    def __init__(self, *args, **kwargs):
        Browser.__init__(self, *args, **kwargs)

        # Creation du configCtrl
        from CONF import configCtrl
        self.configManager = configCtrl()
        if not self.configManager.is_conf_valid: raise

        self.host = self.configManager.host
        self.user = self.configManager.user
        self.password = self.configManager.password
        self.remotedirList = self.configManager.remotedirList

        #self.localdirList       = self.configManager.localdirList
        #self.downloadTypeList   = self.configManager.downloadTypeLst

        self.racineDisplayList = [
            Item.TYPE_SKIN, Item.TYPE_SCRAPER, Item.TYPE_SCRIPT,
            Item.TYPE_PLUGIN
        ]
        self.pluginDisplayList = [
            Item.TYPE_PLUGIN_MUSIC, Item.TYPE_PLUGIN_PICTURES,
            Item.TYPE_PLUGIN_PROGRAMS, Item.TYPE_PLUGIN_VIDEO
        ]
        self.scraperDisplayList = [
            Item.TYPE_SCRAPER_MUSIC, Item.TYPE_SCRAPER_VIDEO
        ]

        self.connected = False  # status de la connection ( inutile pour le moment )
        self.index = ""
        self.rightstest = ""
        self.CACHEDIR = self.configManager.CACHEDIR

        # Connection to FTP server
        try:

            self.passionFTPCtrl = FtpDownloadCtrl(self.host, self.user,
                                                  self.password,
                                                  self.remotedirList,
                                                  self.CACHEDIR)
            self.connected = True
        except:
            print "PassionFtpBrowser::__init__: Exception durant la connection FTP"
            print "Impossible de se connecter au serveur FTP: %s" % self.host
            print_exc()

        # Creons ItemInfosManager afin de recuperer les descriptions des items
        self.itemInfosManager = ItemInfosManager(mainwin=self)
        self.infoswarehouse = self.itemInfosManager.get_info_warehouse()

    def reset(self):
        """
        Reset the browser (back to start page)
        """
        Browser.reset()

    def _createRootList(self):
        """
        Create and return the root list (all type available)
        Returns list and name of the list
        """
        list = []
        listTitle = _(10)

        # List the main categorie at the root level
        for cat in self.racineDisplayList:
            item = {}
            #item['id']                = ""
            item['name'] = Item.get_type_title(cat)
            #item['parent']            = self.type
            item['downloadurl'] = None
            item['type'] = 'CAT'
            item['xbmc_type'] = cat
            item['previewpictureurl'] = None
            item['description'] = Item.get_type_title(cat)
            item['language'] = ""
            item['version'] = ""
            item['author'] = ""
            item['date'] = ""
            item['added'] = ""
            item['thumbnail'] = Item.get_thumb(cat)
            item['previewpicture'] = ""  #Item.get_thumb( cat )
            item[
                'image2retrieve'] = False  # Temporary patch for reseting the flag after download (would be better in the thread in charge of the download)

            list.append(item)
            print item

        return listTitle, list

    def _createPluginList(self):
        """
        Create and return the list of plugin types
        Returns list and name of the list
        """
        list = []
        listTitle = Item.get_type_title(Item.TYPE_PLUGIN)

        # List all the type of plugins
        for cat in self.pluginDisplayList:
            item = {}
            #item['id']                = ""
            #item['parent']            = Item.TYPE_PLUGIN
            item['name'] = Item.get_type_title(cat)
            item['downloadurl'] = None
            item['type'] = 'CAT'
            item['xbmc_type'] = cat
            item['previewpictureurl'] = None
            item['description'] = Item.get_type_title(cat)
            item['language'] = ""
            item['version'] = ""
            item['author'] = ""
            item['date'] = ""
            item['added'] = ""
            item['thumbnail'] = Item.get_thumb(cat)
            item['previewpicture'] = ""  #Item.get_thumb( cat )
            item[
                'image2retrieve'] = False  # Temporary patch for reseting the flag after download (would be better in the thread in charge of the download)

            list.append(item)
            print item

        return listTitle, list

    def _createScraperList(self):
        """
        Create and return the list of scraper types
        Returns list and name of the list
        """
        list = []
        listTitle = Item.get_type_title(Item.TYPE_SCRAPER)

        # List all the type of plugins
        for cat in self.scraperDisplayList:
            item = {}
            item['name'] = Item.get_type_title(cat)
            item['downloadurl'] = None
            item['type'] = 'CAT'
            item['xbmc_type'] = cat
            item['previewpictureurl'] = None
            item['description'] = Item.get_type_title(cat)
            item['language'] = ""
            item['version'] = ""
            item['author'] = ""
            item['date'] = ""
            item['added'] = ""
            item['thumbnail'] = Item.get_thumb(cat)
            item['previewpicture'] = ""  #Item.get_thumb( cat )
            item[
                'image2retrieve'] = False  # Temporary patch for reseting the flag after download (would be better in the thread in charge of the download)

            list.append(item)
            print item

        return listTitle, list

    def _setDefaultImages(self, item):
        """
        Set the images with default value depending on the type of the item
        """
        print "_setDefaultImages"
        print item['previewpictureurl']
        if item['previewpictureurl'] == 'None':
            # No picture available -> use default one
            item['thumbnail'] = Item.get_thumb(item['xbmc_type'])  # icone
            item['previewpicture'] = ""  #Item.THUMB_NOT_AVAILABLE # preview
        else:
            # Check if picture is already downloaded and available
            downloadImage = False
            thumbnail, checkPathPic = set_cache_thumb_name(
                item['previewpictureurl'])
            if thumbnail and os.path.isfile(thumbnail):
                item['thumbnail'] = thumbnail
            else:
                item['thumbnail'] = Item.THUMB_NOT_AVAILABLE
                downloadImage = True

            if os.path.exists(checkPathPic):
                item['previewpicture'] = checkPathPic
            else:
                item['previewpicture'] = ""  #Item.THUMB_NOT_AVAILABLE
                downloadImage = True

            if downloadImage == True:
                # Set flag for download (separate thread)
                item['image2retrieve'] = True

    def _downloadImage(self, picname):
        """
        Download picture from the server, save it, create the thumbnail and return path of it
        """
        print "_downloadImage %s" % picname
        try:

            filetodlUrl = picname  # image path on FTP server
            print "filetodlUrl"
            print filetodlUrl
            thumbnail, localFilePath = set_cache_thumb_name(picname)
            print thumbnail
            print localFilePath

            # Retrieve image
            if not self.passionFTPCtrl.downloadImage(filetodlUrl,
                                                     localFilePath):
                print "ERROR while retrieving image via FTP"
                thumbnail, localFilePath = "", ""

            # remove file if size is 0 bytes and report error if exists error
            if localFilePath and os.path.isfile(localFilePath):
                if os.path.getsize(localFilePath) <= 0:
                    os.remove(localFilePath)
                    #TODO: create a thumb for the default image?
                    #TODO: return empty and manage default image at the level of the caller
                    thumbnail = ""
                else:
                    thumb_size = int(self.thumb_size_on_load)
                    thumbnail = makeThumbnails(localFilePath,
                                               thumbnail,
                                               w_h=(thumb_size, thumb_size))
                    if thumbnail == "": thumbnail = localFilePath

#            if thumbnail and os.path.isfile( thumbnail ) and hasattr( listitem, "setThumbnailImage" ):
#                listitem.setThumbnailImage( thumbnail )
            else:
                thumbnail, localFilePath = "", ""
        except Exception, e:
            #TODO: create a thumb for the default image?
            #TODO: return empty and manage default image at the level of the caller
            thumbnail, localFilePath = "", ""
            print "_downloadImage: Exception - Impossible to download the picture: %s" % picname
            print_exc()
        print "thumbnail = %s" % thumbnail
        print "localFilePath = %s" % localFilePath
        return thumbnail, localFilePath