예제 #1
0
    def __init__(self):
        super(Server, self).__init__()

        self.config = Config()

        self.log_level = levels[self.config.get("server.log_level", "info")]
        self.motd = self.config.get("server.motd", "PyMine Server")
        self.online_mode = self.config.get("server.online_mode", True)
        self.max_players = self.config.get("server.max_players", 10)

        self.logger = logging.getLogger("Server")
        self.logger.setLevel(self.log_level)
        file = os.path.join(os.path.dirname(__file__), "..", "logs",
                            "server.log")
        filehandler = logging.handlers.RotatingFileHandler(file,
                                                           maxBytes=10000,
                                                           backupCount=1)
        filehandler.setLevel(self.logger.level)
        filehandler.setFormatter(
            logging.Formatter("%(asctime)s - %(levelname)s : %(message)s"))

        self.logger.addHandler(filehandler)
        self.logger.info("Server started on {}:{}.".format(
            self.config.get("server.ip", "127.0.0.2"),
            self.config.get("server.port", 25565)))

        self.command_manager = CommandManager(self)
        self.plugin_manager = PluginManager(self,
                                            self.config.get("plugins", []))
        self.plugin_manager.call("start", self)
예제 #2
0
 def test_call(self):
     try:
         p0 = Plugin('mock0', 'mock')
         p0.save()
         pm = PluginManager()
         self.assertEqual(pm.call_plugin('mock0', 'test'), 'test')
     finally:
         p0.delete()
예제 #3
0
 def test_loading(self):
     try:
         p0 = Plugin('mock0', 'mock')
         p0.save()
         p1 = Plugin('mock1', 'mock')
         p1.save()
         pm = PluginManager()
         self.assertEqual(pm.list_all().sort(), ['mock0', 'mock1'].sort())
     finally:
         p0.delete()
         p1.delete()
예제 #4
0
파일: Core.py 프로젝트: euklyd/PenguinBot3K
    def __init__(self):
        # Setup logger and load config
        self.setup_logger()
        self.config = self.load_config("settings")
        self.bot_name = self.config.name

        # Setup managers
        self.watchdog = Watchdog(self)
        self.plugin = PluginManager(self)
        self.event = EventManager(self)
        self.command = CommandManager(self)
        self.ACL = ACL()
        self.workers = Workers(self.config.worker_queue_size,
                               self.config.worker_threads)

        # Setup connection
        self.connection = self.load_connector(self)

        # Load plugins
        self.logger.info("Loading Plugins")
        self.load_plugins()
예제 #5
0
    def __init__(self):
        # Setup logger and load config
        self.setupLogger()
        self.logger.info("Starting new bot session")
        self.logger.info("Loading bot configuration")
        self.config = self.loadConfig("settings")

        # Setup managers
        self.watchdog = Watchdog(self)
        self.plugin = PluginManager(self)
        self.event = EventManager(self)
        self.command = CommandManager(self)
        self.ACL = ACL()
        self.threadPool = ThreadPool(self.config.threadPoolQueueSize,
                                     self.config.threadedWorkers)

        # Setup connection
        self.connection = self.loadConnector(self)

        # Load plugins
        self.logger.info("Loading Plugins")
        self.loadPlugins()
예제 #6
0
 def testCreatePass(self):
   parameterHelper = ParameterHelper()
   parameterHelper.setParameters(['-s=orcl'])
   
   configReader = ConfigReader('project.conf')
   connector = OracleConnectorStub()
 
   sqlLoaderConnector = SqlLoaderConnectorStub()
   createPlugin = CreatePlugin()
   createPlugin.setConfigReader(configReader)
   createPlugin.setConnector(connector)
   createPlugin.setSqlLoaderConnector(sqlLoaderConnector)
   
   
   app = NoOraApp()
   pluginManager = PluginManager()
   
   createPlugin.execute(app,parameterHelper,pluginManager)
예제 #7
0
 def getClassesFromProperties(self) -> Dict[str, HierarchyPropertyParser]:
     hpps = dict()
     className = self.m_ClassType.__name__
     cls = PluginManager.getPluginNamesOfType(className)
     if cls is None:
         return hpps
     b = ""
     for s in cls:
         b += s + ","
     listS = b[0:-1]
     typeOptions = self.sortClassesByRoot(listS)
     Utils.debugOut("All Class:", typeOptions)
     if typeOptions is not None:
         enm = typeOptions.keys()
         for root in enm:
             typeOption = typeOptions.get(root)
             hpp = HierarchyPropertyParser()
             hpp.build(typeOption, ',')
             hpps.update({root: hpp})
     return hpps
예제 #8
0
 def loadProperties(self):
     try:
         cf = ConfigParser()
         cf.read("./core/config/GenericObject.conf")
         kvs = cf.items("Classifier")
         for item in kvs:
             PluginManager.addPlugin("Classifier", item[1])
         kvs = cf.items("Clusterer")
         for item in kvs:
             PluginManager.addPlugin("Clusterer",item[1])
         kvs = cf.items("Filter")
         for item in kvs:
             PluginManager.addPlugin("Filter", item[1])
     except BaseException as e:
         print(repr(e))
예제 #9
0
	def main(self):
		#TODO: Print banner, 
		try:
			self.wsdlhelper = WSDLHelper()
			self.proj_manager = ProjectManager()
			self.analyzer = responseAnalyzer()
			self.plugin_manager = PluginManager()
			self.core = Core()
			self.gui.start(self)
			
			"""
			#paths['main_path'] = self.mainPath()
			#logger.debug("Main path is: %s" % paths['main_path'])
			parser = optparse.OptionParser('usage %prog -t <seconds>')
			parser.add_option('-t', dest='tout', type='int', default='60', help='specify HTTP timeout in seconds')
			(opts, args) = parser.parse_args()
			if opts.tout:
				socket.setdefaulttimeout(opts.tout)
			else:
				socket.setdefaulttimeout(60)
			logger.info("Setting default timeout to %d seconds" % socket.getdefaulttimeout())
			"""
		except antaresDependenciesException:
			logger.debug("antaresDependenciesException @ Launcher")
예제 #10
0
	def __init__( self ):
		
		
		
		
		
		# Appel au constructeur de la classe mere
		QtGui.QMainWindow.__init__( self )
		
		###########
		# Fenetre #
		###########
		
		###
		# Reglages de la fenetre principale
		###
		
		# Nom de la fenetre
		self.setWindowTitle( "%s %s" %( Constantes.TVD_NOM, Constantes.TVD_VERSION ) )
		# Mise en place de son icone
		self.setWindowIcon( QtGui.QIcon( "ico/TVDownloader.png" ) )

		###
		# Mise en place des widgets dans la fenetre
		###
		
		# Widget central qui contiendra tout
		self.centralWidget = QtGui.QWidget( self )
		
		#
		# Onglets
		#
		
		# Gestionnaire onglets
		self.tabWidget = QtGui.QTabWidget( self.centralWidget )
		
		# Onglet Fichiers
		self.tabFichiers = QtGui.QWidget( self.centralWidget )
		self.tabWidget.addTab( self.tabFichiers, u"Fichiers" )
		
		# Onglet Telechargements
		self.tabTelechargements = QtGui.QWidget( self.centralWidget )
		self.tabWidget.addTab( self.tabTelechargements, u"Téléchargements" )				

		#
		# Onglet Fichiers
		#

		# Layout de grille qui contient les elements de l'onglet Fichier
		self.gridLayoutFichiers = QtGui.QGridLayout( self.tabFichiers )
		
		# Liste des plugins
		self.listWidgetPlugins = QtGui.QListWidget( self.tabFichiers )
		self.listWidgetPlugins.setIconSize( QtCore.QSize( 75, 75 ) )
		self.gridLayoutFichiers.addWidget( self.listWidgetPlugins, 0, 0, 4, 1 )
		
		# Liste des chaines
		self.listWidgetChaines = QtGui.QListWidget( self.tabFichiers )
		self.gridLayoutFichiers.addWidget( self.listWidgetChaines, 0, 1, 1, 1 )
		
		# Liste des emissions
		self.listWidgetEmissions = QtGui.QListWidget( self.tabFichiers )
		self.gridLayoutFichiers.addWidget( self.listWidgetEmissions, 0, 2, 1, 1 )
		
		# Logo de l'emission
		self.logoFichierDefaut = QtGui.QPixmap()
		self.logoFichierDefaut.load( "img/logoVide.svg" )
		self.labelLogo = QtGui.QLabel( self.tabFichiers )
		self.labelLogo.setScaledContents( True )
		self.labelLogo.setPixmap( self.logoFichierDefaut.scaled( QtCore.QSize( 150, 150 ), QtCore.Qt.KeepAspectRatio ) )
		self.gridLayoutFichiers.addWidget( self.labelLogo, 0, 3, 1, 1 )
		
		# Descriptif du fichier
		# self.plainTextEditDescriptif = QtGui.QPlainTextEdit( self.tabFichiers )
		# self.gridLayoutFichiers.addWidget( self.plainTextEditDescriptif, 3, 1, 1, 3 )
		
		#
		# Onglet Fichiers - Liste des fichiers
		#
		
		# Layout de grille qui contient le tableau qui liste les fichiers et ses boutons
		self.gridLayoutListeFichiers = QtGui.QGridLayout( self.tabFichiers )
		
		# Tableau qui contient la liste des fichiers disponibles pour l'emission courante
		self.tableWidgetFichier = MyQTableWidget( self.tabFichiers )
		# Il a 4 colonnes et 0 ligne (pour l'instant)
		self.tableWidgetFichier.setColumnCount( 3 )
		self.tableWidgetFichier.setRowCount( 0 )
		# On ajoute les titres
		self.tableWidgetFichier.setHorizontalHeaderItem( 0,
														 self.tableWidgetFichier.creerItem( "" ) )
		self.tableWidgetFichier.setHorizontalHeaderItem( 1,
														 self.tableWidgetFichier.creerItem( "Date" ) )
		self.tableWidgetFichier.setHorizontalHeaderItem( 2,
														 self.tableWidgetFichier.creerItem( "Emission" ) )
		# Ajout au layout
		self.gridLayoutListeFichiers.addWidget( self.tableWidgetFichier, 0, 1, 4, 3 )
		
		# Icones du tableWidget
		self.iconeFichier     = QtGui.QIcon( "ico/gtk-file.svg" )
		self.iconeAjoute      = QtGui.QIcon( "ico/gtk-add.svg" )
		self.iconeTelecharge  = QtGui.QIcon( "ico/gtk-apply.svg" )
		
		# Bouton pour lire le fichier selectionnne
		self.pushButtonLire = MyQPushButton( self.tabFichiers )
		self.pushButtonLire.setIcon( QtGui.QIcon( "ico/gtk-media-play-ltr.svg" ) )
		self.pushButtonLire.setToolTip( u"Lire la vidéo selectionnée" )
		self.gridLayoutListeFichiers.addWidget( self.pushButtonLire, 0, 0, 1, 1 )
		
		# Bouton pour ajouter tous les fichiers a la liste des telechargements
		self.pushButtonToutAjouter = MyQPushButton( self.tabFichiers )
		self.pushButtonToutAjouter.setIcon( QtGui.QIcon( "ico/gtk-add.svg" ) )
		self.pushButtonToutAjouter.setToolTip( u"Ajouter tous les fichiers à la liste des téléchargements" )
		self.gridLayoutListeFichiers.addWidget( self.pushButtonToutAjouter, 1, 0, 1, 1 )
		
		# Bouton pour rafraichir le plugin courant
		self.pushButtonRafraichirPlugin = MyQPushButton( self.tabFichiers )
		self.pushButtonRafraichirPlugin.setIcon( QtGui.QIcon( "ico/gtk-refresh.svg" ) )
		self.pushButtonRafraichirPlugin.setToolTip( "Rafraichir le plugin" )
		self.gridLayoutListeFichiers.addWidget( self.pushButtonRafraichirPlugin, 2, 0, 1, 1 )

		# Bouton pour ouvrir la fenetre des preferences du plugin courant
		self.pushButtonPreferencesPlugin = MyQPushButton( self.tabFichiers )
		self.pushButtonPreferencesPlugin.setIcon( QtGui.QIcon( "ico/gtk-preferences.svg" ) )
		self.pushButtonPreferencesPlugin.setToolTip( u"Ouvrir les préférences du plugin" )
		self.gridLayoutListeFichiers.addWidget( self.pushButtonPreferencesPlugin, 3, 0, 1, 1 )		
		
		# Mise en place du layout sur un widget
		self.widgetFichiers = QtGui.QWidget( self.tabFichiers )
		self.widgetFichiers.setLayout( self.gridLayoutListeFichiers )
		self.gridLayoutFichiers.addWidget( self.widgetFichiers, 1, 1, 2, 3 )

		#
		# Barre progression de telechargement d'un fichier
		#
		self.progressBarTelechargementFichier = QtGui.QProgressBar( self.centralWidget )
		self.progressBarTelechargementFichier.setProperty( "value", 0 )
		
		#
		# Barre de progression de telechargement des fichiers
		#
		self.progressBarTelechargement = QtGui.QProgressBar( self.centralWidget )
		self.progressBarTelechargement.setProperty( "value", 0 )
		
		#
		# Boutons du bas pour gerer ajouter/supprimer/lancer telechargements
		#
		
		# Layout horizontal qui contiendra les boutons
		self.horizontalLayoutBarreBas = QtGui.QHBoxLayout()
		
		# Bouton pour lancer les telechargements
		self.pushButtonLancer = QtGui.QPushButton( QtGui.QIcon( "ico/gtk-media-play-ltr.svg" ), u"Lancer téléchargement", self.centralWidget )
		self.horizontalLayoutBarreBas.addWidget( self.pushButtonLancer )

		# Bouton pour stopper les telechargements
		self.pushButtonStop = QtGui.QPushButton( QtGui.QIcon( "ico/gtk-media-stop.svg" ), u"Stopper le téléchargement", self.centralWidget )
		self.pushButtonStop.setEnabled( False )
		self.horizontalLayoutBarreBas.addWidget( self.pushButtonStop )	
		
		###
		# Positionnement des differents widgets/layouts sur le layout de grille
		###
		
		# Layout de grille dans lequel on va placer nos widgets/layouts
		self.gridLayout = QtGui.QGridLayout( self.centralWidget )
		self.gridLayout.addWidget( self.tabWidget, 0, 0, 1, 2 )
		self.gridLayout.addWidget( self.progressBarTelechargementFichier, 2, 0, 1, 3 )
		self.gridLayout.addWidget( self.progressBarTelechargement, 3, 0, 1, 3 )
		self.gridLayout.addLayout( self.horizontalLayoutBarreBas, 4, 0, 1, 3 )		
		
		###
		# Mise en place du  central widget dans la fenetre
		###
		
		self.setCentralWidget( self.centralWidget )		
		
		###
		# Mise en place du menu
		###
		
		# Menu barre
		self.menubar = QtGui.QMenuBar( self )
		self.menubar.setGeometry( QtCore.QRect( 0, 0, 480, 25 ) )
		
		# Menu Fichier
		self.menuFichier = QtGui.QMenu( "&Fichier", self.menubar )
		self.menubar.addAction( self.menuFichier.menuAction() )
		
		# Action Fichier -> Quitter
		self.actionQuitter = QtGui.QAction( QtGui.QIcon( "ico/gtk-quit.svg" ), "&Quitter", self.menuFichier )
		self.actionQuitter.setIconVisibleInMenu( True )
		self.menuFichier.addAction( self.actionQuitter )
		
		# Menu Edition
		self.menuEdition = QtGui.QMenu( "&Edition", self.menubar )
		self.menubar.addAction( self.menuEdition.menuAction() )
		
		# Action Edition -> Mise a jour
		self.actionMAJ = QtGui.QAction( QtGui.QIcon( "ico/gtk-refresh.svg" ), u"&Mise à jour des plugins", self.menuEdition )
		self.actionMAJ.setIconVisibleInMenu( True )
		self.menuEdition.addAction( self.actionMAJ )
		
		# Action Edition -> Preferences
		self.actionPreferences = QtGui.QAction( QtGui.QIcon( "ico/gtk-preferences.svg" ), u"&Préférences", self.menuEdition )
		self.actionPreferences.setIconVisibleInMenu( True )
		self.menuEdition.addAction( self.actionPreferences )
		
		# Menu Aide
		self.menuAide = QtGui.QMenu( "&Aide", self.menubar )
		self.menubar.addAction( self.menuAide.menuAction() )
		
		# Action Aide -> A propos
		self.actionAPropos = QtGui.QAction( QtGui.QIcon( "ico/gtk-about.svg" ), u"À p&ropos", self.menuAide )
		self.actionAPropos.setIconVisibleInMenu( True )
		self.menuAide.addAction( self.actionAPropos )
		
		# Ajout du menu a l'interface
		self.setMenuBar( self.menubar )		
		
		
		
		
		
		
		
		self.resize( 500, 500 )



		################################################
		# Instanciations + initialisation de variables #
		################################################
		
		# Plugin Manager
		self.pluginManager = PluginManager()
		# Mise en place des plugins
		self.ajouterPlugins( [ ( inst.nom, inst.logo ) for inst in self.pluginManager.getPluginListeInstances() ] )
예제 #11
0
파일: Core.py 프로젝트: euklyd/PenguinBot3K
class Bot():
    def __init__(self):
        # Setup logger and load config
        self.setup_logger()
        self.config = self.load_config("settings")
        self.bot_name = self.config.name

        # Setup managers
        self.watchdog = Watchdog(self)
        self.plugin = PluginManager(self)
        self.event = EventManager(self)
        self.command = CommandManager(self)
        self.ACL = ACL()
        self.workers = Workers(self.config.worker_queue_size,
                               self.config.worker_threads)

        # Setup connection
        self.connection = self.load_connector(self)

        # Load plugins
        self.logger.info("Loading Plugins")
        self.load_plugins()

    def login(self):
        self.connection.connect()

    def logout(self):
        self.connection.disconnect()

    def exit(self):
        """
            Summary:
                Does any nessessary clean up (like killing threads) before the bot exits

            Args:
                None

            Returns:
                None
        """
        for plugin in config.plugins:
            self.plugin.unload(plugin)

        self.logout()
        self.workers.threads = 0

    def setup_logger(self):
        """
            Summary:
                Creates global settings for all logging
                Pretty colors are pretty

            Args:
                None

            Returns:
                None
        """
        from colorlog import ColoredFormatter
        logging.getLogger("requests").setLevel(logging.WARNING)
        logging.getLogger("urllib3.connectionpool").setLevel(logging.WARNING)
        logging.getLogger('peewee').setLevel(logging.WARNING)

        log = logging.getLogger('')
        log.setLevel(logging.INFO)

        # Create console handler
        console_hdlr = logging.StreamHandler(stdout)
        console_formatter = ColoredFormatter(
            "%(asctime)s %(log_color)s%(levelname)-8s%(reset)s %(blue)s%(name)-25.25s%(reset)s %(white)s%(message)s%(reset)s",
            datefmt="[%m/%d/%Y %H:%M:%S]",
            reset=True,
            log_colors={
                'DEBUG': 'cyan',
                'INFO': 'green',
                'WARNING': 'yellow',
                'ERROR': 'red',
                'CRITICAL': 'bg_red',
            })
        console_hdlr.setFormatter(console_formatter)
        console_hdlr.setLevel(logging.INFO)
        log.addHandler(console_hdlr)

        # Create log file handler
        file_hdlr = logging.handlers.TimedRotatingFileHandler("logs/botlog",
                                                              when="midnight")
        file_formatter = logging.Formatter(
            "%(asctime)s %(levelname)-8s %(name)-25.25s %(message)s",
            datefmt="[%m/%d/%Y %H:%M:%S]")
        file_hdlr.setFormatter(file_formatter)
        file_hdlr.setLevel(logging.INFO)
        log.addHandler(file_hdlr)

        self.logger = logging.getLogger(__name__)

    def load_config(self, name):
        """
            Summary:
                Establishes a connection to the server
                Emits login event
                Starts message consumer thread
                Expects to have already loaded connection module
                Exits if it cannot find or load the config

            Args:
                name (str): Name of the config module to be loaded

            Returns:
                (Config): instance of Config class, storing all global config options
        """

        path.append("conf")

        try:
            config_canadiate = find_module(name, path=['conf'])
            config_module = load_module(name, *config_canadiate)

            self.logger.info("Loaded configuration from \"" +
                             config_canadiate[1] + "\"")
            logging.getLogger('').setLevel(config_module.log_level)

            return config_module

        except ImportError as e:
            self.logger.critical("ImportError: " + str(e))
            exit(1)
        except AttributeError as e:
            self.logger.critical("Config class not found in conf/" + name)
            exit(1)

    def load_connector(self, core):
        """
            Summary:
                Looks for and loads the connector defined in config
                Will exit if cannot find or load the connector module

            Args:
                None

            Returns:
                (Connector): The low level connection manager instance
        """
        path.append("connectors")

        try:
            connector_candidate = find_module(config.connector,
                                              path=["connectors"])
            connector_module = load_module(config.connector,
                                           *connector_candidate)
            connector = getattr(connector_module,
                                config.connector)(core,
                                                  **config.connector_options)
            self.logger.info("Loaded connector from: \"" +
                             connector_candidate[1] + "\"")

            return connector

        except ImportError as e:
            self.logger.critical("ImportError: " + str(e))
            exit(1)
        except AttributeError as e:
            print(e)
            self.logger.critical("Could not find connector class: " +
                                 config.connector)
            exit(1)

    def load_plugins(self):
        """
            Summary:
                Looks in plugins list in config and attempts to load each

            Args:
                None

            Returns:
                None
        """
        for plugin in config.plugins:
            self.plugin.load(plugin)
예제 #12
0
    def __init__(self):

        # Appel au constructeur de la classe mere
        QtGui.QMainWindow.__init__(self)

        ###########
        # Fenetre #
        ###########

        ###
        # Reglages de la fenetre principale
        ###

        # Nom de la fenetre
        self.setWindowTitle("%s %s" %
                            (Constantes.TVD_NOM, Constantes.TVD_VERSION))
        # Mise en place de son icone
        self.setWindowIcon(QtGui.QIcon("ico/TVDownloader.png"))

        ###
        # Mise en place des widgets dans la fenetre
        ###

        # Widget central qui contiendra tout
        self.centralWidget = QtGui.QWidget(self)

        #
        # Onglets
        #

        # Gestionnaire onglets
        self.tabWidget = QtGui.QTabWidget(self.centralWidget)

        # Onglet Fichiers
        self.tabFichiers = QtGui.QWidget(self.centralWidget)
        self.tabWidget.addTab(self.tabFichiers, u"Fichiers")

        # Onglet Telechargements
        self.tabTelechargements = QtGui.QWidget(self.centralWidget)
        self.tabWidget.addTab(self.tabTelechargements, u"Téléchargements")

        #
        # Onglet Fichiers
        #

        # Layout de grille qui contient les elements de l'onglet Fichier
        self.gridLayoutFichiers = QtGui.QGridLayout(self.tabFichiers)

        # Liste des plugins
        self.listWidgetPlugins = QtGui.QListWidget(self.tabFichiers)
        self.listWidgetPlugins.setIconSize(QtCore.QSize(75, 75))
        self.gridLayoutFichiers.addWidget(self.listWidgetPlugins, 0, 0, 4, 1)

        # Liste des chaines
        self.listWidgetChaines = QtGui.QListWidget(self.tabFichiers)
        self.gridLayoutFichiers.addWidget(self.listWidgetChaines, 0, 1, 1, 1)

        # Liste des emissions
        self.listWidgetEmissions = QtGui.QListWidget(self.tabFichiers)
        self.gridLayoutFichiers.addWidget(self.listWidgetEmissions, 0, 2, 1, 1)

        # Logo de l'emission
        self.logoFichierDefaut = QtGui.QPixmap()
        self.logoFichierDefaut.load("img/logoVide.svg")
        self.labelLogo = QtGui.QLabel(self.tabFichiers)
        self.labelLogo.setScaledContents(True)
        self.labelLogo.setPixmap(
            self.logoFichierDefaut.scaled(QtCore.QSize(150, 150),
                                          QtCore.Qt.KeepAspectRatio))
        self.gridLayoutFichiers.addWidget(self.labelLogo, 0, 3, 1, 1)

        # Descriptif du fichier
        # self.plainTextEditDescriptif = QtGui.QPlainTextEdit( self.tabFichiers )
        # self.gridLayoutFichiers.addWidget( self.plainTextEditDescriptif, 3, 1, 1, 3 )

        #
        # Onglet Fichiers - Liste des fichiers
        #

        # Layout de grille qui contient le tableau qui liste les fichiers et ses boutons
        self.gridLayoutListeFichiers = QtGui.QGridLayout(self.tabFichiers)

        # Tableau qui contient la liste des fichiers disponibles pour l'emission courante
        self.tableWidgetFichier = MyQTableWidget(self.tabFichiers)
        # Il a 4 colonnes et 0 ligne (pour l'instant)
        self.tableWidgetFichier.setColumnCount(3)
        self.tableWidgetFichier.setRowCount(0)
        # On ajoute les titres
        self.tableWidgetFichier.setHorizontalHeaderItem(
            0, self.tableWidgetFichier.creerItem(""))
        self.tableWidgetFichier.setHorizontalHeaderItem(
            1, self.tableWidgetFichier.creerItem("Date"))
        self.tableWidgetFichier.setHorizontalHeaderItem(
            2, self.tableWidgetFichier.creerItem("Emission"))
        # Ajout au layout
        self.gridLayoutListeFichiers.addWidget(self.tableWidgetFichier, 0, 1,
                                               4, 3)

        # Icones du tableWidget
        self.iconeFichier = QtGui.QIcon("ico/gtk-file.svg")
        self.iconeAjoute = QtGui.QIcon("ico/gtk-add.svg")
        self.iconeTelecharge = QtGui.QIcon("ico/gtk-apply.svg")

        # Bouton pour lire le fichier selectionnne
        self.pushButtonLire = MyQPushButton(self.tabFichiers)
        self.pushButtonLire.setIcon(QtGui.QIcon("ico/gtk-media-play-ltr.svg"))
        self.pushButtonLire.setToolTip(u"Lire la vidéo selectionnée")
        self.gridLayoutListeFichiers.addWidget(self.pushButtonLire, 0, 0, 1, 1)

        # Bouton pour ajouter tous les fichiers a la liste des telechargements
        self.pushButtonToutAjouter = MyQPushButton(self.tabFichiers)
        self.pushButtonToutAjouter.setIcon(QtGui.QIcon("ico/gtk-add.svg"))
        self.pushButtonToutAjouter.setToolTip(
            u"Ajouter tous les fichiers à la liste des téléchargements")
        self.gridLayoutListeFichiers.addWidget(self.pushButtonToutAjouter, 1,
                                               0, 1, 1)

        # Bouton pour rafraichir le plugin courant
        self.pushButtonRafraichirPlugin = MyQPushButton(self.tabFichiers)
        self.pushButtonRafraichirPlugin.setIcon(
            QtGui.QIcon("ico/gtk-refresh.svg"))
        self.pushButtonRafraichirPlugin.setToolTip("Rafraichir le plugin")
        self.gridLayoutListeFichiers.addWidget(self.pushButtonRafraichirPlugin,
                                               2, 0, 1, 1)

        # Bouton pour ouvrir la fenetre des preferences du plugin courant
        self.pushButtonPreferencesPlugin = MyQPushButton(self.tabFichiers)
        self.pushButtonPreferencesPlugin.setIcon(
            QtGui.QIcon("ico/gtk-preferences.svg"))
        self.pushButtonPreferencesPlugin.setToolTip(
            u"Ouvrir les préférences du plugin")
        self.gridLayoutListeFichiers.addWidget(
            self.pushButtonPreferencesPlugin, 3, 0, 1, 1)

        # Mise en place du layout sur un widget
        self.widgetFichiers = QtGui.QWidget(self.tabFichiers)
        self.widgetFichiers.setLayout(self.gridLayoutListeFichiers)
        self.gridLayoutFichiers.addWidget(self.widgetFichiers, 1, 1, 2, 3)

        #
        # Barre progression de telechargement d'un fichier
        #
        self.progressBarTelechargementFichier = QtGui.QProgressBar(
            self.centralWidget)
        self.progressBarTelechargementFichier.setProperty("value", 0)

        #
        # Barre de progression de telechargement des fichiers
        #
        self.progressBarTelechargement = QtGui.QProgressBar(self.centralWidget)
        self.progressBarTelechargement.setProperty("value", 0)

        #
        # Boutons du bas pour gerer ajouter/supprimer/lancer telechargements
        #

        # Layout horizontal qui contiendra les boutons
        self.horizontalLayoutBarreBas = QtGui.QHBoxLayout()

        # Bouton pour lancer les telechargements
        self.pushButtonLancer = QtGui.QPushButton(
            QtGui.QIcon("ico/gtk-media-play-ltr.svg"),
            u"Lancer téléchargement", self.centralWidget)
        self.horizontalLayoutBarreBas.addWidget(self.pushButtonLancer)

        # Bouton pour stopper les telechargements
        self.pushButtonStop = QtGui.QPushButton(
            QtGui.QIcon("ico/gtk-media-stop.svg"),
            u"Stopper le téléchargement", self.centralWidget)
        self.pushButtonStop.setEnabled(False)
        self.horizontalLayoutBarreBas.addWidget(self.pushButtonStop)

        ###
        # Positionnement des differents widgets/layouts sur le layout de grille
        ###

        # Layout de grille dans lequel on va placer nos widgets/layouts
        self.gridLayout = QtGui.QGridLayout(self.centralWidget)
        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 2)
        self.gridLayout.addWidget(self.progressBarTelechargementFichier, 2, 0,
                                  1, 3)
        self.gridLayout.addWidget(self.progressBarTelechargement, 3, 0, 1, 3)
        self.gridLayout.addLayout(self.horizontalLayoutBarreBas, 4, 0, 1, 3)

        ###
        # Mise en place du  central widget dans la fenetre
        ###

        self.setCentralWidget(self.centralWidget)

        ###
        # Mise en place du menu
        ###

        # Menu barre
        self.menubar = QtGui.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 480, 25))

        # Menu Fichier
        self.menuFichier = QtGui.QMenu("&Fichier", self.menubar)
        self.menubar.addAction(self.menuFichier.menuAction())

        # Action Fichier -> Quitter
        self.actionQuitter = QtGui.QAction(QtGui.QIcon("ico/gtk-quit.svg"),
                                           "&Quitter", self.menuFichier)
        self.actionQuitter.setIconVisibleInMenu(True)
        self.menuFichier.addAction(self.actionQuitter)

        # Menu Edition
        self.menuEdition = QtGui.QMenu("&Edition", self.menubar)
        self.menubar.addAction(self.menuEdition.menuAction())

        # Action Edition -> Mise a jour
        self.actionMAJ = QtGui.QAction(QtGui.QIcon("ico/gtk-refresh.svg"),
                                       u"&Mise à jour des plugins",
                                       self.menuEdition)
        self.actionMAJ.setIconVisibleInMenu(True)
        self.menuEdition.addAction(self.actionMAJ)

        # Action Edition -> Preferences
        self.actionPreferences = QtGui.QAction(
            QtGui.QIcon("ico/gtk-preferences.svg"), u"&Préférences",
            self.menuEdition)
        self.actionPreferences.setIconVisibleInMenu(True)
        self.menuEdition.addAction(self.actionPreferences)

        # Menu Aide
        self.menuAide = QtGui.QMenu("&Aide", self.menubar)
        self.menubar.addAction(self.menuAide.menuAction())

        # Action Aide -> A propos
        self.actionAPropos = QtGui.QAction(QtGui.QIcon("ico/gtk-about.svg"),
                                           u"À p&ropos", self.menuAide)
        self.actionAPropos.setIconVisibleInMenu(True)
        self.menuAide.addAction(self.actionAPropos)

        # Ajout du menu a l'interface
        self.setMenuBar(self.menubar)

        self.resize(500, 500)

        ################################################
        # Instanciations + initialisation de variables #
        ################################################

        # Plugin Manager
        self.pluginManager = PluginManager()
        # Mise en place des plugins
        self.ajouterPlugins([
            (inst.nom, inst.logo)
            for inst in self.pluginManager.getPluginListeInstances()
        ])