def __init__( self, m3u8URL, nomFichier, navigateur, stopDownloadEvent, progressFnct ): self.m3u8URL = m3u8URL self.nomFichier = nomFichier self.navigateur = navigateur self.stopDownloadEvent = stopDownloadEvent self.progressFnct = progressFnct self.historique = Historique() self.nomFichierFinal = "%s.mkv" % ( self.nomFichier[ :-3 ] )
def __init__( self, manifestURL, nomFichier, navigateur, stopDownloadEvent, progressFnct ): self.manifestURL = manifestURL self.nomFichier = nomFichier self.navigateur = navigateur self.stopDownloadEvent = stopDownloadEvent self.progressFnct = progressFnct self.historique = Historique() self.configuration = Configuration() self.hmacKey = self.configuration[ "hmac_key" ].decode( "hex" ) self.playerHash = self.configuration[ "player_hash" ]
def __init__(self): # On cree l'instance de la classe dialog self.dialog = Dialog() self.dialog.setBackgroundTitle("TVDownloader") # On recupere l'instance de API self.api = API.getInstance() # On instancie le gestionnaire de download self.downloader = Downloader() # On instancie le gestionnaire d'historique self.historique = Historique() # On instancie le gestionnaire de preferences self.preferences = Preferences() # Liste des telechargements self.listeTelechargements = [] # Quand le programme se termine, on execute la fonction actionsAvantQuitter atexit.register(self.actionsAvantQuitter) # On commence self.bouclePrincipale()
def Menu_principal(): os.system('cls') print("--".center(92, "-")) print("{0:^32}".format("RESTO DU PEUPLE").center(92, "-")) print("{0:^32}".format("18 RUE DU CUL").center(92, "-")) print("{0:^32}".format("TOMBOUKTOU").center(92, "-")) print("--".center(92, "-")) print("\nMENU PRINCIPAL :\n") print("1. PRISE DE COMMANDE") print("2. GESTION DES STOCK") print("3. GESTION DU MENU") print("4. HISTORIQUE DES COMMANDES") print("5. QUITTER") choice = 0 while choice != 5: choice = int(input("\nQUE VOULEZ VOUS FAIRE ? (1-5) : ")) if choice == 1: Commande() Menu_principal() return elif choice == 2: Stock() Menu_principal() return elif choice == 3: Gestionnaire_menu() Menu_principal() return elif choice == 4: Historique() Menu_principal() return
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("TVDownloader") # 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) # # Barre du haut # # Layout horizontal qui contiendra les listes deroulantes self.horizontalLayoutBarreHaut = QtGui.QHBoxLayout() # Liste deroulante pour choisir le site (plugin) self.comboBoxSite = QtGui.QComboBox(self.centralWidget) self.horizontalLayoutBarreHaut.addWidget(self.comboBoxSite) # Liste deroulante pour choisir une chaine du site courant self.comboBoxChaine = QtGui.QComboBox(self.centralWidget) self.horizontalLayoutBarreHaut.addWidget(self.comboBoxChaine) # Liste deroulante pour choisir une emission de la chaine courante self.comboBoxEmission = QtGui.QComboBox(self.centralWidget) self.horizontalLayoutBarreHaut.addWidget(self.comboBoxEmission) # # Onglets # # Gestionnaire onglets self.tabWidget = QtGui.QTabWidget(self.centralWidget) # Onglet Fichiers self.tabFichiers = QtGui.QSplitter( self.centralWidget) # L'onglet Fichier contient un splitter self.tabWidget.addTab(self.tabFichiers, u"Choix des fichiers") # Onglet Telechargements self.tabTelechargements = QtGui.QWidget(self.centralWidget) self.tabWidget.addTab(self.tabTelechargements, u"Téléchargements") # # Liste des fichiers # # Layout de grille qui contient le tableau qui liste les fichiers + boutons self.gridLayoutFichiers = 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")) # On l'ajoute au layout self.gridLayoutFichiers.addWidget(self.tableWidgetFichier, 0, 1, 6, 1) # 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 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.gridLayoutFichiers.addWidget(self.pushButtonToutAjouter, 0, 0, 2, 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.gridLayoutFichiers.addWidget(self.pushButtonRafraichirPlugin, 2, 0, 2, 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.gridLayoutFichiers.addWidget(self.pushButtonPreferencesPlugin, 4, 0, 2, 1) # On met en place ce layout sur un widget (pour le splitter) self.widgetFichiers = QtGui.QWidget() self.widgetFichiers.setLayout(self.gridLayoutFichiers) # # Descriptif des fichiers # # Layout de grille self.gridLayoutDescriptif = QtGui.QGridLayout() # Label pour afficher un logo self.logoFichierDefaut = QtGui.QPixmap() self.logoFichierDefaut.load("img/gtk-dialog-question.svg") self.labelLogo = QtGui.QLabel(self.centralWidget) self.labelLogo.setPixmap( self.logoFichierDefaut.scaled(QtCore.QSize(150, 150), QtCore.Qt.KeepAspectRatio)) self.gridLayoutDescriptif.addWidget(self.labelLogo, 0, 0, 1, 1) # Zone de texte pour afficher un descriptif self.plainTextEdit = QtGui.QPlainTextEdit(self.centralWidget) self.gridLayoutDescriptif.addWidget(self.plainTextEdit, 0, 1, 1, 2) # On met en place ce layout sur un widget (pour le splitter) self.widgetDescriptif = QtGui.QWidget() self.widgetDescriptif.setLayout(self.gridLayoutDescriptif) # Onrientation verticale du splitter self.tabFichiers.setOrientation(QtCore.Qt.Vertical) # On ajoute les 2 elements au splitter (qui est notre onglet) self.tabFichiers.addWidget(self.widgetFichiers) self.tabFichiers.addWidget(self.widgetDescriptif) # # Liste des telechargements # # Layout de grille qui contient le tableau qui liste les fichiers a telecharger + les boutons pour le controller self.gridLayoutTelechargement = QtGui.QGridLayout( self.tabTelechargements) # Tableau qui contient la liste des fichiers a telecharger self.tableWidgetTelechargement = MyQTableWidget( self.tabTelechargements) # Il a 5 colonnes et 0 ligne (pour l'instant) self.tableWidgetTelechargement.setColumnCount(3) self.tableWidgetTelechargement.setRowCount(0) # On ajoute le titre des 5 colonnes self.tableWidgetTelechargement.setHorizontalHeaderItem( 0, self.tableWidgetTelechargement.creerItem("Date")) self.tableWidgetTelechargement.setHorizontalHeaderItem( 1, self.tableWidgetTelechargement.creerItem("Emission")) self.tableWidgetTelechargement.setHorizontalHeaderItem( 2, self.tableWidgetTelechargement.creerItem("Etat")) # On l'ajoute au layout self.gridLayoutTelechargement.addWidget(self.tableWidgetTelechargement, 0, 1, 4, 1) # Bouton pour monter l'element selectionne tout en haut de la liste self.pushButtonExtremiteMonter = MyQPushButton(self.tabTelechargements) self.pushButtonExtremiteMonter.setIcon( QtGui.QIcon("ico/gtk-jump-to-rtl.svg")) self.pushButtonExtremiteMonter.setToolTip( u"Placer l'élément sélectionné tout en haut") self.gridLayoutTelechargement.addWidget(self.pushButtonExtremiteMonter, 0, 0, 1, 1) # Bouton pour monter l'element selectionne d'un cran dans la liste self.pushButtonMonter = MyQPushButton(self.tabTelechargements) self.pushButtonMonter.setIcon(QtGui.QIcon("ico/gtk-go-up.svg")) self.pushButtonMonter.setToolTip(u"Monter l'élément sélectionné") self.gridLayoutTelechargement.addWidget(self.pushButtonMonter, 1, 0, 1, 1) # Bouton pour descendre l'element selectionne d'un cran dans la liste self.pushButtonDescendre = MyQPushButton(self.tabTelechargements) self.pushButtonDescendre.setIcon(QtGui.QIcon("ico/gtk-go-down.svg")) self.pushButtonDescendre.setToolTip(u"Descendre l'élément selectionné") self.gridLayoutTelechargement.addWidget(self.pushButtonDescendre, 2, 0, 1, 1) # Bouton pour descendre l'element selectionne tout en bas de la liste self.pushButtonExtremiteDescendre = MyQPushButton( self.tabTelechargements) self.pushButtonExtremiteDescendre.setIcon( QtGui.QIcon("ico/gtk-jump-to-ltr.svg")) self.pushButtonExtremiteDescendre.setToolTip( u"Placer l'élément sélectionné tout en bas") self.gridLayoutTelechargement.addWidget( self.pushButtonExtremiteDescendre, 3, 0, 1, 1) # Bouton pour supprimer tous les elements de la liste self.pushButtonToutSupprimer = MyQPushButton(self.tabTelechargements) self.pushButtonToutSupprimer.setIcon(QtGui.QIcon("ico/gtk-cancel.svg")) self.pushButtonToutSupprimer.setToolTip( u"Supprimer tous les téléchargements") self.gridLayoutTelechargement.addWidget(self.pushButtonToutSupprimer, 0, 2, 1, 1) # Bouton pour supprimer de la liste les telechargements termines self.pushButtonNettoyer = MyQPushButton(self.tabTelechargements) self.pushButtonNettoyer.setIcon(QtGui.QIcon("ico/gtk-delete-full.svg")) self.pushButtonNettoyer.setToolTip( u"Supprimer les téléchargement terminés") self.gridLayoutTelechargement.addWidget(self.pushButtonNettoyer, 1, 2, 1, 1) # Bouton pour ouvrir le dossier des telechargements self.pushButtonOuvrirDossierTelechargement = MyQPushButton( self.tabTelechargements) self.pushButtonOuvrirDossierTelechargement.setIcon( QtGui.QIcon("ico/gtk-folder.svg")) self.pushButtonOuvrirDossierTelechargement.setToolTip( u"Ouvrir le dossier des téléchargements") self.gridLayoutTelechargement.addWidget( self.pushButtonOuvrirDossierTelechargement, 2, 2, 1, 1) # # 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) # On ajoute la barre du haut self.gridLayout.addLayout(self.horizontalLayoutBarreHaut, 0, 0, 1, 3) # On ajoute le gestionnaire d'onglets self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 3) # On ajoute la barre de progression de telechargement d'un fichier self.gridLayout.addWidget(self.progressBarTelechargementFichier, 2, 0, 1, 3) # On ajoute la barre de progression de telechargement des fichiers self.gridLayout.addWidget(self.progressBarTelechargement, 3, 0, 1, 3) # On ajoute les boutons ajouter/supprimer/lancer self.gridLayout.addLayout(self.horizontalLayoutBarreBas, 4, 0, 1, 3) ### # Mise en place le 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) 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) 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) 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) self.actionAPropos.setIconVisibleInMenu(True) self.menuAide.addAction(self.actionAPropos) # Ajout du menu a l'interface self.setMenuBar(self.menubar) ### # Signaux provenants de l'interface ### QtCore.QObject.connect(self.tableWidgetFichier, QtCore.SIGNAL("cellClicked(int,int)"), self.afficherInformationsFichier) QtCore.QObject.connect(self.tableWidgetFichier, QtCore.SIGNAL("cellDoubleClicked(int,int)"), self.gererTelechargement) QtCore.QObject.connect(self.pushButtonToutAjouter, QtCore.SIGNAL("clicked()"), self.ajouterTousLesFichiers) QtCore.QObject.connect(self.pushButtonRafraichirPlugin, QtCore.SIGNAL("clicked()"), self.rafraichirPlugin) QtCore.QObject.connect(self.tableWidgetTelechargement, QtCore.SIGNAL("cellDoubleClicked(int,int)"), self.supprimerTelechargement) QtCore.QObject.connect( self.pushButtonExtremiteMonter, QtCore.SIGNAL("clicked()"), lambda versLeHaut=True, extremite=True: self. tableWidgetTelechargement.deplacerLigne(versLeHaut, extremite)) QtCore.QObject.connect( self.pushButtonMonter, QtCore.SIGNAL("clicked()"), lambda versLeHaut=True, extremite=False: self. tableWidgetTelechargement.deplacerLigne(versLeHaut, extremite)) QtCore.QObject.connect( self.pushButtonDescendre, QtCore.SIGNAL("clicked()"), lambda versLeHaut=False, extremite=False: self. tableWidgetTelechargement.deplacerLigne(versLeHaut, extremite)) QtCore.QObject.connect( self.pushButtonExtremiteDescendre, QtCore.SIGNAL("clicked()"), lambda versLeHaut=False, extremite=True: self. tableWidgetTelechargement.deplacerLigne(versLeHaut, extremite)) QtCore.QObject.connect(self.pushButtonToutSupprimer, QtCore.SIGNAL("clicked()"), self.supprimerTousLesTelechargements) QtCore.QObject.connect(self.pushButtonNettoyer, QtCore.SIGNAL("clicked()"), self.nettoyer) QtCore.QObject.connect(self.pushButtonLancer, QtCore.SIGNAL("clicked()"), self.lancerTelechargement) QtCore.QObject.connect(self.pushButtonStop, QtCore.SIGNAL("clicked()"), self.stopperTelechargement) QtCore.QObject.connect(self.actionQuitter, QtCore.SIGNAL("triggered()"), self.close) ################################################ # Instanciations + initialisation de variables # ################################################ # Fenetre About self.aProposDialog = None # Fenetre des preferences du logiciel self.preferencesDialog = None # Fenetre de mise a jour des plugins self.updateManagerDialog = None # Nom plugin courant self.nomPluginCourant = "" # Liste des fichiers self.listeFichiers = [] # Liste des fichiers a telecharger self.listeFichiersATelecharger = [] # Cache des images descriptive # Clef : urlImage Valeur : image (binaire) self.cacheImage = {} # On intancie le lanceur de signaux self.signaux = Signaux() # On instancie le gestionnaire de preferences self.preferences = Preferences() # On instancie le gestionnaire de preferences des plugins self.preferencesPluginDialog = PreferencePluginDialog(self) # On instancie le gestionnaire de download self.downloader = Downloader(self.signaux) # On recupere l'instance de API self.api = API.getInstance() # On instancie le gestionnaire d'historique self.historique = Historique() # On instancie la fenetre d'attente self.fenetreAttenteProgressDialog = FenetreAttenteProgressDialog(self) # On instancie le gest # # Fenetre de confirmation pour quitter le logiciel # self.quitterMessageBox = QtGui.QMessageBox(self) self.quitterMessageBox.setWindowTitle("Fermeture de TVDownloader") self.quitterMessageBox.setText( u"Voulez-vous réellement quitter TVDownloader ?") self.quitterMessageBox.setInformativeText( u"Votre liste de téléchargement sera perdue") self.quitterMessageBox.addButton("Oui", QtGui.QMessageBox.AcceptRole) self.quitterMessageBox.addButton("Non", QtGui.QMessageBox.RejectRole) ############################################################ # On connecte les signaux des instances precedements crees # ############################################################ QtCore.QObject.connect(self.pushButtonOuvrirDossierTelechargement, QtCore.SIGNAL("clicked()"), self.ouvrirRepertoireTelechargement) QtCore.QObject.connect(self.comboBoxSite, QtCore.SIGNAL("activated(QString)"), self.listerChaines) QtCore.QObject.connect(self.comboBoxChaine, QtCore.SIGNAL("activated(QString)"), self.listerEmissions) QtCore.QObject.connect(self.comboBoxEmission, QtCore.SIGNAL("activated(QString)"), self.listerFichiers) QtCore.QObject.connect(self.pushButtonPreferencesPlugin, QtCore.SIGNAL("clicked()"), self.ouvrirPreferencesPlugin) QtCore.QObject.connect(self.actionPreferences, QtCore.SIGNAL("triggered()"), self.ouvrirPreferencesLogiciel) QtCore.QObject.connect(self.actionMAJ, QtCore.SIGNAL("triggered()"), self.ouvrirFenetreMiseAJour) QtCore.QObject.connect(self.actionAPropos, QtCore.SIGNAL("triggered()"), self.ouvrirFenetreAPropos) QtCore.QObject.connect( self.signaux, QtCore.SIGNAL("debutActualisation(PyQt_PyObject)"), self.fenetreAttenteProgressDialog.ouvrirFenetreAttente) QtCore.QObject.connect( self.signaux, QtCore.SIGNAL("finActualisation()"), self.fenetreAttenteProgressDialog.fermerFenetreAttente) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("actualiserListesDeroulantes()"), self.actualiserListesDeroulantes) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("listeChaines(PyQt_PyObject)"), self.ajouterChaines) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("listeEmissions(PyQt_PyObject)"), self.ajouterEmissions) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("listeFichiers(PyQt_PyObject)"), self.ajouterFichiers) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("nouvelleImage(PyQt_PyObject)"), self.mettreEnPlaceImage) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("debutTelechargement(int)"), self.debutTelechargement) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("finTelechargement(int)"), self.finTelechargement) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("finDesTelechargements()"), self.activerDesactiverInterface) QtCore.QObject.connect(self.signaux, QtCore.SIGNAL("pourcentageFichier(int)"), self.progressBarTelechargementFichier.setValue) ######### # Début # ######### # La fenetre prend la dimension qu'elle avait a sa fermeture taille = self.preferences.getPreference("tailleFenetre") self.resize(taille[0], taille[1]) # Si aucun plugin n'est active, on ouvre la fenetre des preferences if (len(self.preferences.getPreference("pluginsActifs")) == 0): self.ouvrirPreferencesLogiciel() # On actualise tous les plugins self.rafraichirTousLesPlugins()
def testSingleton(self): """Test si le pattern singleton est bien en place""" self.assertEqual(id(self.historique), id(Historique()))
def setUp(self): self.historique = Historique()