Lecture des playlits m3u

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

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.