Beispiel #1
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 #2
0
 def miseAJourTimerBA(self, timerBA, entryNewValueDureeAttente):
     'p1 timerBA'
     'p2 tk entry'
     newDureeAttente = entryNewValueDureeAttente.get()
     timerBA.reinitialiser(duree=newDureeAttente)
     Util.setConfigValue('commun', 'dureeAttenteLecturePL', newDureeAttente) #modifie la propriete globalement
     timerBA.afficherChrono(False) #actualise la widget du timerBA
Beispiel #3
0
 def supprimerVideoPL(self, playlistIHM):
 
     '''
     methode qui supprime la selection courante de la playlist
     p1: evt touche suppr
     p2, playlistIHM
    
     '''
     
     if playlistIHM.curselection():
         #au moins un element dans la liste
         #on actualise la duree pl en soustrayant la duree de la video supprimee
         if playlistIHM.size() ==1:
             #on supprime la derniere video donc on remet a blanc
             self.__setChampDisabledValue('entryDureePL', '')
         else:
             index = playlistIHM.curselection()[0]
     # il faut calculer la nouvelle duree en soustrayant
             selVideoIHM = playlistIHM.get(index)
             try:
                 selVideoObj = self.bm.rechercherVideo(selVideoIHM)
                 duree = self.bibliIHM.getId('entryDureePL').get()
                 dureeEnSecondes = int(Util.minTosec(duree))
                 dureeEnSecondes -= selVideoObj.duree
                 self.__setChampDisabledValue('entryDureePL', Util.secToms(dureeEnSecondes))
             except CineException:
                 #Cas anormal ou l'objet video n'a pas ete trouve
                 #on ne bloque pas mais on affiche juste un message
                 print ('probleme de recherche video obj')    
         playlistIHM.delete(playlistIHM.curselection()[0])
Beispiel #4
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 #5
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 #6
0
 def ajouterVideoPL(self, evt):
 
     '''
     methode qui prend la selection video de la liste IHM et l'ajoute en fin de playlist de l'IHM
     '''
     
 # get the line's text
     listWidget = self.bibliIHM.getId('listVideos')  
     plIHM = self.bibliIHM.getId('listPlL5C3')
     duree = self.bibliIHM.getId('entryDureePL').get() #la duree de la PL est la somme  des durees des videos
     dureeEnSecondes = int(Util.minTosec(duree))
     
     videosIHM = self._getCurrentVideoBibli(oneSelectionOnly=False)
     for i,selVideoIHM in enumerate(videosIHM): 
         selVideoObj = self.bm.rechercherVideo(selVideoIHM)
     #controler que la video selectionnee n'est pas une pub inactive (couleur yellow3)
         if self.bm.getColor(selVideoObj)=='yellow3':
             raise CineException('PubOutOfDate')
         if selVideoObj.duree ==0:
             raise CineException('VideoDureeZero')
         index = listWidget.curselection()[i]
         bgVideo = listWidget.itemcget(index, "bg") #permet de recopier l'attribut couleur sur la PL
         plIHM.insert(tk.END, selVideoIHM)
         plIHM.itemconfig(tk.END, bg=bgVideo)
         #mettre a jour la duree PL
         dureeEnSecondes += selVideoObj.duree
     self.__setChampDisabledValue('entryDureePL', Util.secToms(dureeEnSecondes))
Beispiel #7
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 #8
0
 def displayTime(self):
     '''affiche temps et  update progress bar'''
     self.value = time.time()
     self.strValue.set("{0} / {1} (min)".format(Util.secToms(self.value- self.debuttime),\
                       Util.secToms(self.duree)))
     self["value"] = ((self.value - self.debuttime) /
                      self.duree) * 100  #pourcentage du temps ecoule
     #self.progress.update()
     if self.value < self.maxtime and not self.ordreStop:
         # read more bytes after 300 ms
         self.after(300, self.displayTime)
Beispiel #9
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 #10
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 #11
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 #12
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 #13
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 #14
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 #15
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 #16
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 #17
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 #18
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 #19
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
Beispiel #20
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 #21
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 #22
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 #23
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 #24
0
 def chargerPL(self, pnomPL=None):
     '''
     p1 si à l'init de l'ihm pour charger la playlist du jour
     methode qui ouvre une boite dialogue pour selectionner fichier playlist
     remplit les widgets afferent à la playlist à partir de l'objet modele playlist
     '''
     repPL=Util.configValue('commun', 'repertoirePL')
     if pnomPL:
         nomficPL=repPL+pnomPL
     else:    #boite de dialogue selection de fichier .obj
         nomficPL = askopenfilename(title="Ouvrir le fichier playlist:", initialdir=repPL, \
             filetypes = [("Fichiers Playlist","*.obj")]) 
     if len(nomficPL) > 0:
         plAChargee = self.pm.load(nomficPL)
         #charger les zones de la pl
         (nomFilm, date, heure) = self.pm.calculerNomIHMPL(plAChargee)
         entryDate=self.bibliIHM.getId('dateDiffu')
         entryDate.delete(0, tk.END)
         entryDate.insert(0,date+heure)
         entryVideoPL = self.bibliIHM.getId('entryVideoPL')
         self.__setChampDisabledValue('entryVideoPL', nomFilm)
         playlistIHM = self.bibliIHM.getId('listPlL5C3')
         self.viderPL(playlistIHM)
         #ajouter les videos PlayList
         dureePL=0
         for video in plAChargee.videos:
             playlistIHM.insert(tk.END, video.getNom())
             playlistIHM.itemconfig(tk.END, bg=self.bm.getColor(video))
             dureePL+=video.duree
         
         self.__setChampDisabledValue('entryDureePL', Util.secToms(dureePL))
         
         #charger la frame affiche film
         oeuvre = None
         if entryVideoPL.get():
             #si le champ est renseigne alors l'oeuvre fait obligatoirement partie du fichier serialise
             baPL = self.bm.rechercherVideo(entryVideoPL.get()) #la video est forcement de type BA
             oeuvre = baPL.oeuvreCinema
             #on teste au cas ou
             if oeuvre:
                 self._majAfficheOeuvreCinema(oeuvre)     
         else:
             '''on peut rechercher affiche uniquement avec date et heure pl'''
             oeuvre = self.__calculerOeuvreFilmWeb()
Beispiel #25
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 #26
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 #27
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 #28
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 #29
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 #30
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)