Beispiel #1
0
 def initialiserDonnees(self):
     '''methode qui charge l'ihm des donnees
        ne doit pas etre bloquant pour ne pass empecher l'affichage de l'ihm
        donc on intercepte les exceptions'''
     
     self.miseAJourEtat('etatDebut')
     '''scan du repertoire video'''
     self.bm.scanDisk()
     '''methode asynchrone qui remplit les widgets de donnees
     '''
     self.initialiserVideosBibliIHM()
     try:
         '''recherche et charge la playlist du jour à cette heure'''
         plJour = self.pm.rechercherPLprocheDate(datetime.datetime.now())
         self.chargerPL(plJour)
         libelleMessage = Util.configValue('messages', 'PLRechercheOK')
         messagebox.showwarning(
             "Succes:",
             libelleMessage 
             )
     except CineException:
         libelleMessage = Util.configValue('messages', 'PLRechercheKO')
         messagebox.showwarning(
             "Attention",
             libelleMessage 
             )
     #on regarde si un scandisk est en cours d'executio
     #met a jour status application si scandisk asynchrone est termine
     self.checkStatusChargementBibliotheque()
Beispiel #2
0
 def playPL(self, playlistIHM, pbarIHM, timerIHM):
 
     '''
     methode qui joue toutes les v1ideos de la playlist
     p1: widget playlist des videos
     p2 : widget pbar
     p4 : widget timer 20 sec
     '''
     if playlistIHM.size() == 0:
         raise CineException('VidePLKO')
     dureeAttente = Util.configValue('commun', 'dureeAttenteLecturePL')
     timerIHM.reinitialiser(duree=dureeAttente)
     timerIHM.afficherChrono(True) #attente bloquante
     wdw = tk.Toplevel()
     #recherche des parametres externalises
     paramVLC = Util.configValue('ECRAN2', 'paramVLC')
     geometry= Util.configValue('ECRAN2', 'geometry')
     
     self.vlcPlayer =  PlayerVLC2.Player(wdw, \
                                    title='playlist beaulieu' , fullscreen=True, geometry=geometry, paramVLC=paramVLC )
     #on force le volume a 100
     self.vlcPlayer.volume_var.set(100)
     self.vlcPlayer.volume_sel(None) #envoie message init volume
     #on desactive le bouton play
     self.bibliIHM.getId('btnPlay').config(state=tk.DISABLED)
     self.__itererPlayPL(playlistIHM, pbarIHM, timerIHM, -1, self.vlcPlayer)  
Beispiel #3
0
 def enregistrerPL(self, bibliIHM):
 
     '''
     methode qui controle et enregistre une playlist sur disque
     calcule l'oeuvre rattachee à la BA sur le site internet
     p1, dico des widgets
     '''
    
    #test si PL existeDeja
     if self.pm.existeFichierPL(bibliIHM.getId('dateDiffu').get()):
        if not messagebox.askyesno(Util.configValue('messages', 'PLDejaPresenteTitre'), 
                                   Util.configValue('messages', 'PLDejaPresenteMsg')):
            return
     #PL nouvelle ou confirmation ecrasement   
     nomPL = self.pm.enregistrerPL(bibliIHM.getId('dateDiffu').get(), \
         bibliIHM.getId('entryVideoPL').get(),bibliIHM.getId('listPlL5C3').get(0, tk.END))
     self._majStatusPL('enregPlOK', nomPL)
     #rechercher une video de la BA si la zone est renseignee
     oeuvre = None
     if bibliIHM.getId('entryVideoPL').get():
         baPL = self.bm.rechercherVideo(bibliIHM.getId('entryVideoPL').get()) #la video est forcement de type BA
         if not baPL.oeuvreCinema:
         #rechercher les infos sur le site web du cinema
             oeuvre = self.__calculerOeuvreFilmWeb()
             baPL.setOeuvreCinema(oeuvre)
         else:
             #oeuvre a deja ete calculee precedement et est stockee dans fichier
             #evite de rafaire du parsing
             oeuvre = baPL.oeuvreCinema
             self._majAfficheOeuvreCinema(oeuvre)     
     else:
         '''on peut rechercher affiche uniquement avec date et heure pl'''
         oeuvre = self.__calculerOeuvreFilmWeb()
Beispiel #4
0
 def __init__(self):
     '''
     Constructor
     '''
     #calcul des criteres
     self.critere_roi = int(Util.configValue('criteres', 'roi'))
     self.critere_tips = int(Util.configValue('criteres', 'tips'))
     self.critere_ic = int(Util.configValue('criteres', 'ic'))
     self.lancerFirefox = False  #permet de activer/desactiver appel au navigateur
     self.__load()
Beispiel #5
0
 def __init__(self):
     super().__init__()
     
     self.root=tk.Tk()
     self.root.title(Util.configValue('commun', 'titre'))
     tk.Grid.columnconfigure(self.root,5,weight=1)
     tk.Grid.rowconfigure(self.root,2,weight=1)
     self.root.geometry(Util.configValue('commun', 'geometry'))
     self.root.configure(bg="#FEFEE2")
     #enreg StringVar
     self.tm = TipsManager()
     self.dicoWidget = {}
Beispiel #6
0
 def attenteCb(self):
     entry=self.bibliIHM.getId('entryAdminDureeAttente')
     entry.delete(0, tk.END) #efface ancienne valeur
     if self.bibliIHM.getId('varCheckAttente').get()==1:
         minDelaiAttente = Util.configValue('commun', 'dureeAttenteLecturePLMin')
         #on ecrit la valeur dans le champ input
         entry.insert(0, minDelaiAttente)
     else:
         maxDelaiAttente = Util.configValue('commun', 'dureeAttenteLecturePLMax')
         #on ecrit la valeur dans le champ input
         entry.insert(0, maxDelaiAttente)
     self.miseAJourTimerBA(self.bibliIHM.getId('tbaL7C4'), entry)
Beispiel #7
0
    def __init__(self):
        super().__init__()

        self.root = tk.Tk()
        self.root.title(Util.configValue('commun', 'titre'))
        self.evtProxy = EvtIHM()
        self.photosIHM = {}  #garder une reference sur les photos
        tk.Grid.columnconfigure(self.root, 5, weight=1)
        tk.Grid.rowconfigure(self.root, 10, weight=1)
        self.root.geometry(Util.configValue('commun', 'geometry'))
        self.root.configure(bg="#FEFEE2")
        #enreg StringVar
        self.dicoWidget = {}  #dictionnaire de tous les objets graphiques
Beispiel #8
0
 def supprimerFichier(self, tk):
     '''
     methode qui demande confirmation de la suppression d'une video puis si ok effectue la suppression
     sur disque et dans la bibliotheque de(s)  video(s) selectionnee(s)
     '''
     if not messagebox.askyesno(Util.configValue('messages', 'BibliSuppVideoTitre'), 
                                   Util.configValue('messages', 'BibliSuppVideoMsg')):
            return
     videosIHM =self._getCurrentVideoBibli(oneSelectionOnly=False)
     for selVideoIHM in videosIHM:
         selVideoObj = self.bm.rechercherVideo(selVideoIHM)
         self.bm.supprimerVideo(selVideoObj)
     #reactualiser la vue
     self.initialiserVideosBibliIHM()
Beispiel #9
0
 def afficher(self):
     wdw = Tkinter.Toplevel()
     wdw.geometry(Util.configValue('dimensions', 'geometryCalender'))
     wdw.title(Util.configValue('commun', 'titreCal'))
    # wdw.geometry("{}x{}+{}+{}".format(300, 390, 400, 300))
     #wdw.geometry('+400+300')
     self.frame = wdw
     
     self.__dessiner()
     self.associerEvts()
     #rendre la fenetre modale
    # wdw.transient(self.tk)
     wdw.grab_set()
    # self.tk.wait_window(wdw)
     #wdw.pack(expand=True, fill="both")
     self.calendar_frame.pack(anchor="w")
Beispiel #10
0
 def __itererPlayPL(self, playlistIHM, pbarIHM, timerIHM, rangPLAjouer, vlcPlayer):
 
     '''
     methode qui joue toutes les videos de la playlist
     p1: widget playlist des videos
     p2 : widget pbar
     p3: timer widget
     p4 : rangPL (index)
     p5: vlcPlayer
     '''
    # print ("rang {0}".format(rangPLAjouer))
     if (rangPLAjouer >= playlistIHM.size()):
         #c'est fini on tue le timer
         self.__finLecturePL(vlcPlayer)
         return #plus de videos a traiter dans la PL
     '''la video en cours est-elle finie ?'''
     
     if ((timerIHM and not timerIHM.decompteTermine) or not vlcPlayer.isVideoFinished()):
         #soit le decompte de 20 sec n'est pas fini soit la video en cours n'est pas fini
          #on attend 300 ms et on reteste
         playlistIHM.after(300, lambda x=playlistIHM,y=pbarIHM,v=timerIHM,z=rangPLAjouer,w=vlcPlayer:\
                           self.__itererPlayPL(x, y, v, z, w))
         return
     #ici soit on est sur premiere video a jouer soit la video vient de se finir
     #on prend la video suivante de la liste si il en reste dans la liste
     if (rangPLAjouer >= 0):
         playlistIHM.itemconfig(rangPLAjouer, bg ='black') #ligne grisee donc traitee
     
     rangPLAjouer+=1
    # playlistIHM.selection_set(rangPLAjouer)
     if (rangPLAjouer < playlistIHM.size()):
         playlistIHM.itemconfig(rangPLAjouer, bg ='red')    
             
         selVideoIHM = playlistIHM.get(rangPLAjouer)
         try:
             selVideoObj = self.bm.rechercherVideo(selVideoIHM)
         except CineException:
             selVideoObj = None    
         if selVideoObj:
             #video bien trouvee
             #lancement de la barre de progression
             pbarIHM.start(selVideoObj.duree)
             #lecture de la video avec vlc
             if self.debug:
                 print ('Lecture {0} ieme/{1} video'.format(rangPLAjouer, playlistIHM.size()))    
             vlcPlayer.play(Util.configValue('commun', 'repertoireVideo') + selVideoObj.nomFichier) #asynchrone
             self.miseAJourEtat('vlcPlay', selVideoObj.getNom())
             if selVideoObj.type.value == Type.PUB.value:
                 self._majStatusPL('InfoPUB', '', duree=200, clignotant=True)
         else:
             #probleme de recherche video
             #Une video est presente dans la PL mais plus sur le disque
             #affichage d'un message et passage au suivant
             self._majStatusPL('NoVideoTrouve', selVideoIHM, 30) 
                    
             #appel recursif
         self.__itererPlayPL(playlistIHM, pbarIHM, None, rangPLAjouer, vlcPlayer) #None pour le timer pour ne plus faire le controle avec videoFinished
     else:
         #c'est fini on tue le timer et vlc
         self.__finLecturePL(vlcPlayer)
Beispiel #11
0
 def miseAJourEtat(self, codeMessageEtat, param=''):
      libelleMessage = Util.configValue('messages', codeMessageEtat)
      try:    
          self.bibliIHM.getId('SVetatLibelle').set("ETAT: " + libelleMessage + ' ' +param)
      except AttributeError:
          pass    #peut arriver lors d'un test unitaire
  
      '''methode qui teste le status du chargement de la bibliotheque et rafraichit etat si termine'''
Beispiel #12
0
 def playVideoWebcam(self):
     '''
     methode qui lance un vlc player(non bloquant) sur ecran pc avec la video temps reel webcam
     '''
     file='BA-test.flv'
     vlcPlayer = PlayerVLC2.Player(None,  title='webcam hall cinema' , fullscreen=False )
    # vlcPlayer.play(Util.configValue('commun', 'repertoireVideo') + file) #asynchrone
     vlcPlayer.play(Util.configValue('commun', 'urlWebcam')) #asynchrone
Beispiel #13
0
 def initialiserDonnees(self):
     '''methode qui charge l'ihm des donnees
       '''
     #toutes les minutes on lance firefox sur blogabet
     if self.tm.lancerFirefox:
         self.tm.rechercherTipsWeb()
         self.tm.save()
     duree=int(Util.configValue('commun', 'dureeSleepFirefox'))
     self.root.after(1000*duree, self.initialiserDonnees) 
Beispiel #14
0
 def _majStatusPL(self, codeMessageInfo, param="", duree=8, clignotant=False):
     'p1 code message'
     'p2 param'
     'p3 duree affichage en seconde'
     
     libelleMessage = Util.configValue('messages', codeMessageInfo) + param
     #Affichage du message si condition
     statusPLWidget = self.bibliIHM.getId('statusPL') #widget LabelPlus
     statusPLWidget.affiche(libelleMessage, duree, clignotant)
Beispiel #15
0
 def playVideoPC(self, tk):
     '''
     methode qui lance un vlc player(non bloquant) sur ecran pc avec la video selectionnee
     p1: widget parent global tk
     '''
     selVideoIHM =self._getCurrentVideoBibli()
     selVideoObj = self.bm.rechercherVideo(selVideoIHM)
     vlcPlayer =  PlayerVLC2.Player(None,  title=selVideoObj.getNom() , fullscreen=False )
     vlcPlayer.play(Util.configValue('commun', 'repertoireVideo') + selVideoObj.nomFichier) #asynchrone
Beispiel #16
0
 def save(self):
     '''
     sauvegarde la liste des tips best dans un fichier tips.obj
     '''
     fichierTips = Util.configValue('commun', 'fichierTips')
     with open(fichierTips, 'wb') as fichier:
         mon_pickler = pickle.Pickler(fichier)
         mon_pickler.dump(self.bestTips)
     fichier.close()
Beispiel #17
0
 def save(self):
     '''
     sauvegarde la biblioGenerale dans un fichier bib.obj
     '''
     self.__purger()
     fichierBiblio = Util.configValue('commun', 'fichierBiblio')
     with open(fichierBiblio, 'wb') as fichier:
         mon_pickler = pickle.Pickler(fichier)
         mon_pickler.dump(self.biblioGenerale)
     fichier.close()
Beispiel #18
0
    def existeFichierPL(self, date):
        '''controle la presence du fichier PL
        retourne true si le fichier exite deja'''

        (nomPL, d, h) = self.__calculerNomPL(date)
        if os.path.isfile(
                Util.configValue('commun', 'repertoirePL') + nomPL + '.obj'):
            return True
        else:
            return False
Beispiel #19
0
    def validerPasswordAdmin(self, passwordSaisi):
        '''methode qui compare le mot de passe saisi par l'utilisateur avec le mot de passe cripte dans config.ini
        retourne true ou False selon la comparaison'''
        # On encode la saisie pour avoir un type bytes

        entreSaisi = passwordSaisi.encode()
        entreSaisi_chiffre = hashlib.sha1(entreSaisi).hexdigest()
        mot_de_passe_admin_chiffre = Util.configValue('commun',
                                                      'passAdminCrypte')
        return (entreSaisi_chiffre == mot_de_passe_admin_chiffre)
Beispiel #20
0
 def __save(self, pl: PlayList):
     '''
     sauvegarde d'une playlist dans un fichier sur disque (dossier resources/playlists)
     p1: playlist obj modele
     '''
     fichierPL = Util.configValue('commun',
                                  'repertoirePL') + pl.nom + '.obj'
     with open(fichierPL, 'wb') as fichier:
         mon_pickler = pickle.Pickler(fichier)
         mon_pickler.dump(pl)
     fichier.close()
Beispiel #21
0
 def afficher(self, videoIHM, listPL):
     wdw = tk.Toplevel()
     wdw.geometry(Util.configValue('dimensions', 'geometryRefPL'))
     
    # wdw.geometry("{}x{}+{}+{}".format(300, 390, 400, 300))
     #wdw.geometry('+400+300')
     self.frame = wdw
     self.__dessiner(videoIHM)
     self.initialiserPLReferenceesIHM(self.listboxPL, listPL)
     #rendre la fenetre modale
     wdw.transient(self.tk)
     wdw.grab_set()
     self.tk.wait_window(wdw)
Beispiel #22
0
    def testPlPlay(self):
        '''ajout de 4000 videos dans la PL'''
        return
        repVideos = Util.configValue('commun', 'repertoireVideo')
        ficVideos = Util.listerRepertoire(repVideos, False)

        for number in range(1, 1001):
            indAleatoire = random.randint(0, len(ficVideos) - 1)
            self.listPl.insert(tk.END, ficVideos[indAleatoire])

        #appel de la methode
        self.evt.playPL(self.listPl, self.pbar, self.timer)
        self.root.mainloop()
Beispiel #23
0
    def _getDimension(self, codeDimensionWidget):
        ecranresolution = Util.configValue('dimensions', 'ecran.resolution')
        resolution = re.match(r"([\d]{3,4})x([\d]{3,4})", ecranresolution)

        resolutionXecran = int(resolution.group(1))
        resolutionYecran = int(resolution.group(2))
        resolutionReferenceX = 1366
        resolutionReferenceY = 768

        widgetX = Util.configValue('dimensions', codeDimensionWidget +
                                   '.width')  #width est obligatoire
        widgetXCalculee = round(
            (int(widgetX) * resolutionXecran) / resolutionReferenceX)
        try:
            widgetY = Util.configValue('dimensions', codeDimensionWidget +
                                       '.height')  #height est optionnel
        except configparser.NoOptionError:
            return widgetXCalculee

        widgetYCalculee = round(
            (int(widgetY) * resolutionYecran) / resolutionReferenceY)
        return (widgetXCalculee, widgetYCalculee)
Beispiel #24
0
 def afficher(self, video:Video):
     wdw = tk.Toplevel()
     wdw.geometry(Util.configValue('dimensions', 'geometryFiche'))
     
    # wdw.geometry("{}x{}+{}+{}".format(300, 390, 400, 300))
     #wdw.geometry('+400+300')
     self.videoObj = video
     self.frame = wdw
     self.__dessiner()
     
     #rendre la fenetre modale
     wdw.transient(self.tk)
     wdw.grab_set()
     self.tk.wait_window(wdw)
Beispiel #25
0
 def rechercherPLAvecVideo(self, selVideoObj):
     '''
     methode qui recherche les playlist qui contiennent la video en parametre
     retourne une liste de PL
     '''
     retour = []
     ficPL = Util.listerRepertoire(
         Util.configValue('commun', 'repertoirePL'))
     for fichier in ficPL:
         plCur = self.load(fichier)
         for video in plCur.videos:
             if video.getNom() == selVideoObj.getNom():
                 retour.append(plCur)
     return retour
Beispiel #26
0
 def __purger(self):
     '''
     supprime les videos qui n'ont plus de fichier sur disque
     permet de ne plus gerer en memoire les anciennes videos
     '''
     #on clone le dictionnaire
     clonebibVideos = self.biblioGenerale.videos.copy()
     for videoFile in self.biblioGenerale.videos.values():
         if not os.path.isfile(
                 Util.configValue('commun', 'repertoireVideo') +
                 videoFile.nomFichier):
             del clonebibVideos[videoFile.nomFichier]
     #on met le clone eventuellement modifie par le del dans l'objet
     self.biblioGenerale.videos = clonebibVideos
Beispiel #27
0
 def supprimerVideo(self, video: Video):
     '''suppression dans la bibliotheque la video
     suppression sur disque dur du fichier video'''
     repVideos = Util.configValue('commun', 'repertoireVideo')
     #test si repVideos est bien un repertoire lisible
     if not os.path.isdir(repVideos):
         raise CineException('repVideoKO')
         return
     if not os.path.isfile(repVideos + video.nomFichier):
         raise CineException('ficVideoKO')
         return
     #suppression du fichier
     os.remove(repVideos + video.nomFichier)
     #suppression dans la bibliotheque
     del self.biblioGenerale.videos[video.nomFichier]
Beispiel #28
0
 def __load(self):
     '''
     construit la liste des tips a partir d'un fichier tips.obj'''
     try:
         fichierTips = Util.configValue('commun', 'fichierTips')
         with open(fichierTips, 'rb') as fichier:
             mon_depickler = pickle.Unpickler(fichier)
             self.bestTips = mon_depickler.load()
             fichier.close()
     except (IOError, FileNotFoundError) as e:
         print('creation du fichier')
         with open(fichierTips, 'w') as nouvFichier:  #on cree le fichier
             nouvFichier.close()
             self.bestTips = {}  #dictionnaire de tous tips conserves
     except EOFError:  #fichier vide
         self.bestTips = {}  #dictionnaire de tous tips conserves
Beispiel #29
0
 def __load(self):
     '''
     construit la biblioGenerale a partir d'un fichier bib.obj
     reconstruit a partir du fichier le dictionnaire des videos (ba, pub et animBeaulieu'''
     try:
         fichierBiblio = Util.configValue('commun', 'fichierBiblio')
         with open(fichierBiblio, 'rb') as fichier:
             mon_depickler = pickle.Unpickler(fichier)
             self.biblioGenerale = mon_depickler.load()
             fichier.close()
     except IOError:
         with open(fichierBiblio, 'w') as nouvFichier:  #on cree le fichier
             nouvFichier.close()
             self.biblioGenerale = Biblio("Bibliotheque generale")
     except EOFError:  #fichier vide
         self.biblioGenerale = Biblio("Bibliotheque generale")
Beispiel #30
0
 def calculerStatPL(self):
     '''
     recherche toutes les playlist sur le disque
     stocke dans un dictionnaire le nombre de PL par jour
     '''
     #on stocke l'heure du fichier
     ficPL = Util.listerRepertoire(
         Util.configValue('commun', 'repertoirePL'), False)
     for fichier in ficPL:
         retour = re.match(
             r"PL__([\d]{4})-([\d]{2})-([\d]{2})__([\d]{2})h00.obj",
             fichier)
         if retour:
             jjmmaaaaFichier = retour.group(3) + '-' + retour.group(
                 2) + '-' + retour.group(1)  #ex 09112017
             self.statPL['PL' + jjmmaaaaFichier] = self.statPL.get(
                 'PL' + jjmmaaaaFichier, 0) + 1