Lecture des playlits m3u

0/5 (8 avis)

Vue 21 082 fois - Téléchargée 586 fois

Description

Ce petit utilitaire recherche tous les fichiers M3U (playlists) dans un dossier (et ses sous-dossiers) et de les insèrent dans un TreeView triés par artiste et par albums. Un clic sur un album affiche la jaquette et un double clic permet d'ouvrir la playlist dans le lecteur par défaut.

C'est un programme simple mais qui me simplifie la vie... lol!!

Source / Exemple :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Musique
{
    public partial class frmMusique : Form
    {
        public frmMusique()
        {
            InitializeComponent();
        }

        confini conf = new confini();
        ImageList listeImage;

        private void frmMusique_Load(object sender, EventArgs e)
        {
            configIni();
            listeImage = new ImageList();
            listeImage.Images.Add(Image.FromFile("../../icones/cd.gif"));
            listeImage.Images.Add(Image.FromFile("../../icones/micro.jpg"));
            this.tvMusique.ImageList = listeImage;
            remplirTvMusique();
        }

        private void configIni()
        {
            if (conf.read("folder", "0") == "")
            {
                conf.write("folder", "0", "G:\\Musique");
            }
            if (conf.read("jaquette", "0") == "")
            {
                conf.write("jaquette", "0", "folder.jpg");
            }
            this.txtRep.Text = conf.read("folder", "0");
            this.txtJaquette.Text = conf.read("jaquette", "0");
        }

        private void remplirTvMusique()
        {
            this.tvMusique.Nodes.Clear();
            String[] listeFichiers = Directory.GetFiles(conf.read("folder", "0"), "*.m3u", SearchOption.AllDirectories);
            if (listeFichiers.Length > 0)
            {
                TreeNode artiste = new TreeNode();
                foreach (string ligne in listeFichiers)
                {
                    String[] info = ligne.Split('\\');
                    if (this.tvMusique.Nodes.Count > 0)
                    {
                        if (artiste.Text == info[info.Length - 3])
                        {
                            artiste.Nodes.Add(ligne, info[info.Length - 2], 0);
                        }
                        else
                        {
                            artiste = new TreeNode(info[info.Length - 3], 1, 1);
                            artiste.Nodes.Add(ligne, info[info.Length - 2], 0);
                            this.tvMusique.Nodes.Add(artiste);
                        }
                    }
                    else
                    {
                        artiste = new TreeNode(info[info.Length - 3], 1, 1);
                        artiste.Nodes.Add(ligne, info[info.Length - 2], 0);
                        this.tvMusique.Nodes.Add(artiste);
                    }
                }
                this.lblInfo.Text = "Il y a " + this.tvMusique.Nodes.Count.ToString() + " artiste(s) et " + listeFichiers.Length.ToString() + " album(s).";
                this.tvMusique.Sort();
                this.tvMusique.Focus();
            }
            else
            {
                this.tvMusique.Nodes.Add("Aucun fichier");
            }
        }

        private void tvMusique_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (this.tvMusique.SelectedNode.Parent != null)
            {
                this.pbAlbum.ImageLocation = folder(this.tvMusique.SelectedNode.Name) + conf.read("jaquette", "0");
                this.tvMusique.SelectedImageIndex = 0;
            }
            else
            {
                this.pbAlbum.Image = null;
            }
        }

        private string folder(string uneAdresse)
        {
            FileInfo fi = new FileInfo(uneAdresse);
            return fi.Directory.ToString() + "\\";
        }

        private void tvMusique_DoubleClick(object sender, EventArgs e)
        {
            if (this.tvMusique.SelectedNode.Parent != null)
            {
                System.Diagnostics.Process.Start(this.tvMusique.SelectedNode.Name);
            }
        }

        private void cmdParcourir_Click(object sender, EventArgs e)
        {
            if (this.fbdRep.ShowDialog() == DialogResult.OK)
            {
                this.txtRep.Text = this.fbdRep.SelectedPath;
            }
        }

        private void cmdOk_Click(object sender, EventArgs e)
        {
            if (this.txtRep.Text.Trim() != "")
            {
                if (this.txtJaquette.Text.Trim() != "")
                {
                    if (Directory.Exists(this.txtRep.Text.Trim()))
                    {
                        if (this.txtJaquette.Text.Trim().Split('.').Length >= 2)
                        {
                            conf.write("jaquette", "0", this.txtJaquette.Text.Trim());
                            conf.write("folder", "0", this.txtRep.Text.Trim());
                            remplirTvMusique();
                        }
                        else
                        {
                            afficheErreur("Le nom de la jaquette est erroné.");
                        }
                    }
                    else
                    {
                        afficheErreur("Ce répertoire n'existe pas.");
                    }
                }
                else
                {
                    afficheErreur("Vous devez insérer le nom de la jaquette.");
                }
            }
            else
            {
                afficheErreur("Vous devez choisir un répertoire.");
            }
        }

        private void afficheErreur(string message)
        {
            MessageBox.Show(message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void agrandirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Show();
            this.Activate();
            this.WindowState = FormWindowState.Normal;
        }

        private void reduireToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void fermerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Conclusion :


Il faut que tous les albums comporte une jaquette, un fichier .m3u et qu'ils soient rangés comme cela :
- Musique

-- artiste 1
---- album 1
---- album 2

-- artiste 2
---- album 1

-- artiste 3
---- album 1
---- album 2
...

bien sur, le dossier initiale de recherche et le nom de la jaquette est paramètrable
l'enregistrement des options se fait dans un fichier .ini dont j'ai emprumter la classe sur ce site!!
http://www.csharpfr.com/code.aspx?ID=27564

voila, je suis ouvert à toutes les remarques et futures modifications...

Julien

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
255
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
21 avril 2009

merci pour vos informations...
je tiendrais compte pour les futures modifications...!!
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Sauf que XML est aussi simple en VB6 qu'il est en .NET (App.config exclus).
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Je ne suis pas certain que le registre soit la meilleure place pour stocker ce genre de données.

Je pense comme maf, xml is good :p

Et pas dans le répertoire de l'application, mais dans les répertoires de l'utilisateur !!!Environment.GetFolderPath est votre amie ;-)
Messages postés
81
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2008

C'est plus simple de mettre les paramètre dans la base de registre
Messages postés
255
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
21 avril 2009

ben je ferai la midification...
lol
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.