Exemple #1
0
	def set_tag(self, tag, value):
		Tags.setValue(self.path, tag, value)
		query = 'UPDATE tracks SET ' + tag + ' = ? WHERE track_ID = ?'
		t = (value, self.ID)
		bdd.execute(query, t)
		self.tags[tag] = value
		messager.diffuser('track_data_changed', self, self)
Exemple #2
0
	def togglePause(self):
		if self.is_paused():
			self.play()
		elif self.isStopped():
			messager.diffuser('need_piste_suivante', self, 'click')
		else:
			self.pause()
Exemple #3
0
	def valider(self, edit):
		name = self.E_Name.get_text()
		fichier = open(self.DYNAMIC_FOLDER + name, 'w')
		fichier.write(str(self.c_manager.get_config()))
		#if(self.RB_Random.get_active()):
			#fichier.write("random" + "\n")
		#else:
			#fichier.write("notrandom" + "\n")
			
		#if(self.RB_Criterion.get_active()):
			#fichier.write(" OR " + "\n")
		#else:
			#fichier.write(" AND " + "\n")
			
		#for critere in self.Box_Criteres:
			#children = critere.get_children()
			#criterion = children[0].get_active_text()
			#operator = children[1].get_active_text()
			#condition =  children[2].get_text()
			#t = [criterion, operator, condition]
			##column, operator, condition = criterion
			#fichier.write(str(t) + "\n")
		#fichier.close()
		if(edit == None): #Pas une édition
			messager.diffuser('playlist_ajoutee', self, ["intelligent", name])		
Exemple #4
0
 def charger_playlist(self, data):
     ID_list = data[0]  # data[1] = l'instance de queue
     # Charge une playlist
     table = []
     for ID in ID_list:
         table.append(self.get_track_data(int(ID)))
     messager.diffuser("desPistes", self, table, False)
     data[1].Liste.connect("row-changed", data[1].setModified)
Exemple #5
0
	def recule(self, data):
		if self.numero > 0:
			self.demarquer_piste()
			self.numero -= 1
			self.playing_iter = self.queue_jouee.get_iter(self.numero)
			chemin = self.queue_jouee[self.numero][4]
			messager.diffuser('musique_a_lire', self, chemin)
			self.marquer_piste()
Exemple #6
0
	def on_drag_data_receive(self, TreeView, drag_context, x, y, selection_data, info, timestamp):
		#fin d'un DND
		T_elements_ID = eval(selection_data.get_text()) # eval => permet de retransformer la chaîne de caractères en tableau
		numero_tuple = TreeView.get_dest_row_at_pos(x, y)[0]
		dic = self.what_is(numero_tuple, TreeView.get_model())
		
		for key in dic.iterkeys():
			messager.diffuser('fileIN', self, [self.module, T_elements_ID, key, dic[key]])
Exemple #7
0
	def toggle_pause(self):
		if self.is_paused():
			self.play()
			self.emit('unpause')
		elif self.is_stopped():
			self.emit('unpause')
			messager.diffuser('need_piste_suivante', self, 'click')
		else:
			self.pause()
			self.emit('pause')
Exemple #8
0
	def on_message(self, bus, message):
		t = message.type
		#EOS = End Of Song
		if t == gst.MESSAGE_EOS:
			messager.diffuser('need_piste_suivante', self, 'eos')
			#self.stop()
		elif t == gst.MESSAGE_ERROR:
			self.stop()
			err, debug = message.parse_error()
			print "Error: %s" % err, debug
Exemple #9
0
	def initialisation_raccourcis(self):
		raccourcis = (
			('<Control>W', lambda *e: self.closeQueue()),
			('<Control>T', lambda *e: self.addQueue()),
		)
		accel_group = gtk.AccelGroup()
		for key, function in raccourcis:
			key, mod = gtk.accelerator_parse(key)
			accel_group.connect_group(key, mod, gtk.ACCEL_VISIBLE,
				function)
		messager.diffuser('desRaccourcis', self, accel_group)
Exemple #10
0
    def add_file_in(self, data):
        """
		Détails paramètres : data[0] = type (~ table a modifier), data[1] = tableau contenant des ID, data[2] = nom champ conteneur (univers_ID ou categorie_ID), data[3] = valeur identifiant conteneur
		
		Ajoute les enregistrements dont l'ID est contenue dans le tableau data[1] au conteneur dont l'ID est contenu dans data[3]
		
		Les ID de sections étant des entiers pour tous les types de sections, une chaîne (type) est fournie en fonction du message reçu par la BDD
		"""
        ##self.c.execute('INSERT INTO lien_IC VALUES (?, ?)', t) abandonné
        type = data[0]
        query = "UPDATE " + type + "s SET " + data[2] + " = ? WHERE " + type + "_ID = ?"
        for ID in data[1]:
            t = (data[3], ID)
            self.c.execute(query, t)
        self.conn.commit()
        messager.diffuser("notification_etat", self, data[2] + " des " + type + "(s) modifié avec succès")
Exemple #11
0
	def charger_playlist(self, w, i, colonne, stop_mod=False):
		level = len(i)
		if(level == 2): #On est bien sur une playlist
			nom = self.model[i][2]
			if(i[0] == 0): #On est sur une playlist perso
				fichier = open(self.FOLDER + nom,'r')
				liste = fichier.readlines()
				fichier.close()
				#On envoie la liste d'ID à la BDD, elle va la traiter et renvoyer les infos au queue_manager
				messager.diffuser('playlistData', self, [liste, nom, stop_mod])
			else: #On est sur une playlist intelligente
				fichier = open(self.DYNAMIC_FOLDER + nom,'r')
				data = fichier.readlines()
				fichier.close()
				self.queueManager.addQueue()
				self.queueManager.addSelection(self.mdb.getDynamicListTracks(eval(data[0])))
Exemple #12
0
	def enregistrer(self, button):
		DN = gtk.Dialog()
		Entry = gtk.Entry()
		hbox = gtk.HBox()
		hbox.pack_start(gtk.Label(_("Name") + " : "), False, 5, 5)
		hbox.pack_end(Entry)
		DN.vbox.add(hbox)
		
		DN.add_button('OK', 1)
		DN.add_button(_("Cancel"), 0)
		DN.show_all()
		action = DN.run()
		nom = Entry.get_text()
		DN.destroy()
		if(action == 1):
			self.save(nom)
			messager.diffuser('playlist_ajoutee', self, ['personalised', nom])
Exemple #13
0
    def add_playlist(self, button):
        DN = gtk.Dialog()
        Entry = gtk.Entry()
        hbox = gtk.HBox()
        hbox.pack_start(gtk.Label(_("Name") + " : "), False, 5, 5)
        hbox.pack_end(Entry)
        DN.vbox.add(hbox)

        DN.add_button("OK", 1)
        DN.add_button(_("Cancel"), 0)
        DN.show_all()
        action = DN.run()
        name = Entry.get_text()
        DN.destroy()
        if action == 1:
            fichier = open(os.path.join(xdg.get_data_home(), "playlists" + os.sep) + name, "w")
            fichier.close()
            messager.diffuser("playlist_ajoutee", self, ["personalised", name])
Exemple #14
0
    def set_categorie_on_image(self, b, CB):
        if self.index == -1:
            return False

        image_ID = self.liste[self.index][0]
        liste = CB.get_model()
        categorie = CB.get_active_text()
        i = 0
        while (i < len(liste) - 1) and (liste[i][1] != categorie):
            i += 1

        if liste[i][1] != categorie:
            Dialog = gtk.MessageDialog(
                buttons=gtk.BUTTONS_YES_NO, message_format="Cette catégorie n'existe pas, voulez vous la créer?"
            )
            reponse = Dialog.run()
            Dialog.destroy()
            if reponse == -8:  # Oui
                messager.diffuser("nouvelle_categorieI", self, categorie)
                messager.diffuser("liste_sectionsI", self, liste)
            elif reponse == -9:  # Non
                return False

        i = 0
        while (i < len(liste) - 1) and (liste[i][1] != categorie):
            i += 1

            # TODO
        if liste[i][1] == categorie:
            categorie_ID = liste[i][0]
            messager.diffuser("imageINcategory", self, [image_ID, categorie_ID])
Exemple #15
0
    def get_tracks_data(self, data, send_message=True):
        """
			Créer une liste (tableau) de données sur les pistes correspondant aux critères passés en paramètre
			@param data : soit un dictionnaire (AND), soit une liste de dictionnaire (OU)
			@param send_message : si vrai envoie un message avec le résultat, si faux retourne directement le résultat
		"""
        t = []
        if type(data).__name__ == "dict":
            for key in data.iterkeys():
                try:
                    query += " AND " + key + " = ?"
                except NameError:
                    query = "SELECT * FROM tracks WHERE " + key + " = ?"
                t.append(unicode(data[key]))
        else:
            for dic in data:
                try:
                    query += " OR ("
                except NameError:
                    query = "SELECT * FROM tracks WHERE ("
                for key in dic.iterkeys():
                    try:
                        part += " AND " + key + " = ?"
                    except NameError:
                        part = key + " = ?"
                    t.append(unicode(dic[key]))

                query += part + ")"
                del part

        print (query)
        self.c.execute(query, t)
        table = []
        for row in self.c:
            table.append((row[0], row[1], row[2], row[3], row[4], row[6], row[7], row[8]))
        if send_message:
            messager.diffuser("desPistes", self, table)
        else:
            return table
Exemple #16
0
	def change_rating(self, w, new_rating):
		query = "UPDATE tracks SET rating = " + str(new_rating) + " WHERE track_ID = " + self.ID
		bdd.execute(query)
		self.rating = new_rating
		messager.diffuser('track_data_changed', self, self)
Exemple #17
0
	def on_folder_activated(self, w, i, c):
		dossier = self.folderModel[i][0]
		messager.diffuser("need_data_of", self, [self.module, "dossier", dossier])
Exemple #18
0
	def on_message(self, event):
		messager.diffuser('need_piste_suivante', self, 'eos')
Exemple #19
0
	def percentage(self):
		pos = round(self._player.get_position(), 2)
		if(pos == 1.0):
			messager.diffuser('need_piste_suivante', self, 'eos')
		return pos
Exemple #20
0
    def get_data_of(self, data):
        """
			Séléctionne toutes les infos sur les fichiers du type donné (image ou video) et appartenant à la section data[1] (categorie_ID, univers_ID, dossier)
			
			Data[0] contient le type de données et définit donc les tables sur lesquelles on va s'appuyer
			Data[1] contient une chaîne permettant de savoir quelle(s) section(s) est (sont) visée(s)
		"""
        type = data[0]
        mode = data[1]  # category, universe, category_and_universe or folder
        critere = data[2]  # category_ID, universe_ID or folder path
        dig = True

        t = []

        query = "SELECT " + type + "_ID, fichier, dossier, note, categorie_ID, univers_ID FROM " + type + "s "

        def dig_in(ID, query):
            for c_ID in self.categories[ID]:
                query += " OR categorie_ID = ?"
                t.append(c_ID)
                dig_in(c_ID, query)

        if mode == "dossier":
            t = (unicode(critere),)
            query += "WHERE dossier = ? ORDER BY fichier"
        elif mode == "category":
            t.append(int(critere))
            query += "WHERE categorie_ID = ?"
            if dig is True:
                dig_in(int(critere), query)
            query += " ORDER BY fichier"
        elif mode == "universe":
            t = (int(critere),)
            query += "WHERE univers_ID = ? ORDER BY fichier"
        elif mode == "category_and_universe":
            universe_ID = data[3]
            t = (int(critere), universe_ID)
            query += "WHERE categorie_ID = ? AND univers_ID = ? ORDER BY fichier"
        else:
            t = (unicode(critere),)
            query += "ORDER BY fichier"

        self.c.execute(query, t)
        table = []
        for row in self.c:
            path = unicode(row[2] + os.sep + row[1])
            print (path)
            ID = str(row[0])
            thumbnail_path = "thumbnails/" + type + "s/" + ID + ".jpg"
            if not os.path.exists(thumbnail_path):
                if type == "picture":
                    im = Image.open(path)
                    im.thumbnail((128, 128), Image.ANTIALIAS)
                    im.save(thumbnail_path, "JPEG")
                elif type == "video":
                    cmd = ["totem-video-thumbnailer", path, thumbnail_path]
                    ret = subprocess.call(cmd)
                else:
                    thumbnail_path = "thumbnails/none.jpg"

                    # if os.path.exists(thumbnail_path):
                    # thumbnail = gtk.gdk.pixbuf_new_from_file(thumbnail_path)
                    # else:
            thumbnail = gtk.gdk.pixbuf_new_from_file(thumbnail_path)
            # On veut : ID, chemin, libellé,  apperçu, note, categorie_ID, univers_ID
            table.append((row[0], path, row[1], thumbnail, row[3], row[4], row[5]))
        logger.debug(query)
        messager.diffuser("des_" + type + "s", self, table)
        return table
Exemple #21
0
	def charger_playlist(self, data):
		#data[0] = tracks ID, data[1] = playlist name
		queue = self.addQueue(data[1])
		messager.diffuser('ID_playlist', self, [data[0], queue], False)
Exemple #22
0
	def avance_ou_arrete(self, motif):
		'''
			Méthode primordiale permettant au MusicPlayer d'avoir sa piste sur demande (démarrage ou enchaînement)
		'''
		# Tout d'abord on incrémente si fin de piste atteinte et on vire le marquage de l'ancienne piste courante
		
		if(motif == "eos"):
			#ID_courant = self.queue_jouee.get_value(self.playing_iter, 3)
			self.incrementPlayedTrack()
			
		self.demarquer_piste()
			
		try:	
			if (self.queue_jouee.get_value(self.playing_iter, 2) is None):
				not_a_stop_track = True
			else:
				not_a_stop_track = False
		except:
			not_a_stop_track = True
			
		try:
			di = self.directList[0]
			self.directList.remove(di)
			if(di.row == None):
				di = None
		except IndexError:
			di = None
			
		if(not_a_stop_track): #On vérifie d'abord qu'on ne doit pas s'arrêter avant de mouliner
			#Quelle est la piste à jouer? 3 possibilités :
			if(di != None): # 1/ une piste prioritaire
				self.playing_track = Track(di.get_model()[di.get_path()][3])
				
				if di.temp:
					self.temp_queue_jouee = di.get_model()
					self.temp_playing_iter = self.temp_queue_jouee.get_iter(di.get_path())
				else:
					self.queue_jouee = di.get_model()
					self.playing_iter = self.queue_jouee.get_iter(di.get_path())
				
				messager.diffuser('musique_a_lire', self, self.playing_track)
				self.marquer_piste()
			else:
				if(self.playing_iter): # 2/ la piste qui suit la dernière piste lue
					bridge_key = self.queue_jouee.get_value(self.playing_iter, 12)
					if(bridge_key != None):
						try:
							ref = self.bridges_dest[bridge_key]
							queue = ref.get_model()
							next_iter = queue.get_iter(ref.get_path())
							self.queue_jouee = queue
						except:
							next_iter = self.queue_jouee.iter_next(self.playing_iter)
					else:
						next_iter = self.queue_jouee.iter_next(self.playing_iter)
				else: # 3/ la première piste de la queue visible
					self.queue_jouee = self.visibleQueue
					next_iter = self.queue_jouee.get_iter_first()
					
				
				if(next_iter): # Après recherche, on a obtenu une piste
					self.playing_iter = next_iter
					self.playing_track = Track(self.queue_jouee.get_value(self.playing_iter, 3))
					messager.diffuser('musique_a_lire', self, self.playing_track)
					self.marquer_piste()
				else: # Il n'y a pas de suivant
					self.queue_jouee.set_value(self.playing_iter, 2, None)
					messager.diffuser('arret_musique', self, True)
					print("Liste de lecture terminée ou stoppée")

		else: # On s'arrête simplement
			self.queue_jouee.set_value(self.playing_iter, 2, None)
			messager.diffuser('arret_musique', self, True)
			print("Liste de lecture terminée ou stoppée")
Exemple #23
0
	def stop(self, b=None):
		super(MusicPlayer, self).stop(b)
		messager.diffuser('MusicPlayerStopped', self, True)
Exemple #24
0
	def on_B_Prev_Click(self, w):
		messager.diffuser('need_piste_precedente', self, None)
Exemple #25
0
	def on_B_Next_clicked(self, w):
		#Joue la piste suivante de la queue courante, seulement si il y en a une (de piste hein)
		messager.diffuser('need_piste_suivante', self, 'demarre')