DECODEUR/ENCODEUR DE PLAYLIST AU FORMAT PLS/M3U

Utilisateur anonyme - 17 oct. 2009 à 09:19
Chaotikmind Messages postés 16 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 5 avril 2011 - 28 oct. 2009 à 10:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50704-decodeur-encodeur-de-playlist-au-format-pls-m3u

Chaotikmind Messages postés 16 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 5 avril 2011
28 oct. 2009 à 10:11
>>... compilable gratuitement avec le compilateur du SDK de flex, et éditable avec le soft >>gratuit "flashdevlop" ;)

Rooh , un ami ;)
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
24 oct. 2009 à 19:18
Aprés une certaine réflexion je suis d'accord avec Peg'.
Une seule classe est bien suffisante. Une classe instanciable comme décrite avant avec en plus 4 méthodes statique :
- PlayList.encodeM3U(xml):String
- PlayList.decodeM3U(string):XML
- PlayList.encodePLS(xml):String
- PlayList.decodeM3U(string):XML

J'ai changé le nom du zip précedent.
http://hopemultimedias.com/lab/pegase31-classUnic.zip (la nouvelle version)
http://hopemultimedias.com/lab/pegase31-multiClasses.zip (l'ancienne version)
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
24 oct. 2009 à 00:28
http://hopemultimedias.com/lab/pegase31.zip

C'est ton projet réécrit selon le concept décrit précedement.
- media/IPlayList.as
- media/PlayList.as (abstract)
- media/PlayListM3U.as
- media/PlayListPLS.as
- net/PlayListLoader.as

J'ai testé rapidement cela semble fonctionner correctement...
A tester la focntion "moveTrack()...

A plus et encore bravo...
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
23 oct. 2009 à 19:39
+1 à gremlins7, c vrai que je chipote ;)
(d'autant que je factorise de cette façon depuis SPAS 2.0...)

mais je pense que ça mérite un peu + que 7 vu que ça sort largement du train train des codes à 2 balles qu'on à l'habitude de subir...

++ et bon codes
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
23 oct. 2009 à 18:55
La je trouve que vous chipotez !!! Perso, AbstractPlaylist.as me convient très bien, après les nomenclatures c'est toujours pareil : c'est un sujet de désaccord certain.

J'ai mis 7 ( source finalement bien utile 5, et écrite proprement +2 )
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
23 oct. 2009 à 15:49
¿Pourquoi si (selon moi) elle ne peut pas fonctionner seule?
Il lui faut absolument une sous classe qui surécrirait les fonctions "encode" et "decode".
Je serais d'accord avec toi, si, les instances de superclasse "PlaylistBase" pouvaient fonctionner seules, hors dans le schémas proposé, ce n'est pas le cas !

Dis nous vite pourquoi "base", jai hâte de me coucher moins bête...
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
23 oct. 2009 à 12:03
slt,

Pour respecter la logique architecturale, "AbstractPlaylist.as" doit s'appeller "PlaylistBase.as"

++
pascal
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
22 oct. 2009 à 22:59
Je profite qu'il faille un commentaire pour pouvoir noter (j'ai oublier) pour te préciser que j'ai inverser le concept pour l'interface "playlist":
--> encode(data:String):XML ; (EFFECTUANT l'ENCODAGE ET SUPPRIMANT l'ERREUR)
--> decode(data:XML):String ; (EFFECTUANT l'DECODAGE ET SUPPRIMANT l'ERREUR)

J'ai mis 9.5 (9 avec la souris, et 0.5 avec tout mon respect..)
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
22 oct. 2009 à 22:55
Et en plus mon analyse (que je dis pas que c'est la bonne ou la meilleure mais la mienne)
confirme ce que te dis Bananatree, le chargement des données est indépendant de la playlist.
La playlist désirant un "String" pour s'autogénérer à partir de celui-ci, que ce dernier provienne d'un chargement ou d'une variable de classe compilée, ou de mes dons de télépathie doit peut lui importer...
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
22 oct. 2009 à 22:50
Ben moi, aprés 2 whisky-coca et le plaisir de voir lire une bonne source je te dirais:
Une interface déterminant ce qu'est une Playlist"...
- IPlaylist.as
get length():uint;
getSongURLAt( index:uint ):String ;
getSongTitleAt( index:uint ):String ;
getSongDurationAt( index:uint ):int;
addSong( url:String, title:String="", duration:Number=0 ):Boolean;
removeSong( url:String ):Boolean;
removeSongAt( index:uint ):Boolean;
moveSong( from:uint, to:uint ):Boolean ;
encode(data:XML):String;
decode(data:String):XML;

La classe base contenant les playlist :
- AbstractPlaylist.as
get length():uint;
getSongURLAt( index:uint ):String ;
getSongTitleAt( index:uint ):String ;
getSongDurationAt( index:uint ):String ;
addSong( url:String, title:String="", duration:Number=0 ):void;
removeSong( url:String ):void;
removeSongAt( index:uint ):void;
moveSong( from:uint, to:uint ):Boolean ;
encode(data:XML):String; (JETANT UNE ERREUR)
decode(data:String):XML; (JETANT UNE ERREUR)

--> PlaylistPLS.as
extends AbstractPlayList
implements IPlaylist
--> encode(data:XML):String ; (EFFECTUANT l'ENCODAGE ET SUPPRIMANT l'ERREUR)
--> decode(data:String):XML ; (EFFECTUANT l'DECODAGE ET SUPPRIMANT l'ERREUR)

--> PlaylistM3U.as
extends AbstractPlayList
implements IPlaylist
--> encode(data:XML):String ; (EFFECTUANT l'ENCODAGE ET SUPPRIMANT l'ERREUR)
--> decode(data:String):XML ; (EFFECTUANT l'DECODAGE ET SUPPRIMANT l'ERREUR)

A part ca, j'ai rien compris au code...
AH AH AH AH ! C'est vrai en plus...
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
19 oct. 2009 à 13:20
>>le code est en as3...

... compilable gratuitement avec le compilateur du SDK de flex, et éditable avec le soft gratuit "flashdevlop"
;)
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
19 oct. 2009 à 12:08
Le fichier .as est tout à fait ouvrable avec n'importe quel notepad, cependant, le code est en as3 .. et flash 8 ne fait que de l'as2.

Peg'
cs_dadoo1 Messages postés 13 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 31 mars 2009
19 oct. 2009 à 12:03
Lol je savais pour cs4 mais ca évolue trop vite ,prévoir de changer de version logiciel quasiment tous les ans avec adobe faut pouvoir suivre financièrement , j'ai l'impression flash mx 2004 c'était encore hier, bref désolé pour cette parenthèse un peu hors sujet j'aurais voulu accéder a ce code tanpis ce sera pour plus tard.
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
19 oct. 2009 à 10:59
Ah tiens, encore un spéléologue...
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
19 oct. 2009 à 01:18
Déjà ? c'est la 10, CS4 ... et oui, ça fait environ 3 ans qu'on a changé depuis la 8 ....
Peg'
cs_dadoo1 Messages postés 13 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 31 mars 2009
18 oct. 2009 à 15:12
Format de fichier inattendu ! super on a déjà changer de version de flash ? c'est la combien j'en suis a la 8 :(
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
18 oct. 2009 à 03:08
Bananatree : oui, je vois l'idée, mais là je proposais une classe "clé en main". Mais je comprend ta logique.

Gremlins 7 : il est plus facile de gérer le XML lors de la création de la playList avec ajout/suppression/déplacement d'entrée et sauvegarde par la suite. Le XML étant transparent pour l'utilisateur, n'alourdissant pas le système et offrant une bonne ergonomie au traitement de liste.
De plus, si tu as besoin d'une information sur le titre en cours de lecture avant le chargement, il est indispensable de donner l'accés aux infos à n'importe quel moment.

Peg'
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
17 oct. 2009 à 19:01
slt,

en fait j'ai pas trés vite (20secondes maxi), je parlais de cette fonction (donc aucun xml effectivement)

private static function loadComplete(evt:Event):void {
var re:RegExp = /\n/g; //Efface les doubles sauts ...
loader.data = loader.data.replace(re, ""); // ... de ligne (Pc uniquement)
tab = loader.data.split("\r"); //place les lignes dans un tableau (indépendants des types de playList)
}

merci d'avoir corrigé gremlins7 ;)
++
pascal
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
17 oct. 2009 à 18:13
Salut,
je suis assez d'accord avec l'analyse de BananaTree, en revanche, j'ai un peu de mal a capter a quoi ça sert de parser les données vers un XML ? A priori, tu va utiliser les données juste après l'extraction ?
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
17 oct. 2009 à 13:48
en as3 une classe statique peut être un event dispatcher, mais ce n'est pas le sujet.

ta classe actuelle playlist.as est une classe utilitaire. il est don normale qu'elle fournisse des methodes de classe qui permettent de traiter telle ou telle action.
par contre, le chargement d'un fichier n'a rien à voir dans cette logique. cela génère forcement des doublons de code, puisque l'ensemble des dev as3 utilisent leurs propres gestionaires de chargement.

je te conseilles (c nest qu'un conseil ;) ) de transformer "PlayList.as" en "PlayListParser.as", d'en supprimer toute la logiquee de gestion de chargement. crée ensuit ta classe PlayList.as qui utilisera les methodes de "PlayListParser.as" et la gestion du chargement.

en faisant cela, tu seras bien plus en phase avec les règle de l'orienté objet. et ça évitera aux developpeurs de modifier tes classes à chaque fois qu'une nouvelle mise à jour est dispo.

pascal
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
17 oct. 2009 à 11:59
Alors, Bananatree, soit tu en as trop dit, soit pas assez .... tu peux développer, stp, car j'ai pas vraiment tout compris le pourquoi du comment que tu me dis de faire ça ...

Le seul soucis d'une classe statique est qu'elle n'est pas un EventDispatcher car elle n'a pas d'instance. C'est à dire qu'elle est "muette" et donc ne peux pas envoyer d'événements. Ce qui oblige à écouter le loader pour savoir quand le chargement est fini.
Mais si tu as une autre solution, je suis évidemment preneur !

Peg'
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
17 oct. 2009 à 11:19
slt,

j'ai pas téléchargé, mais juste jeté un rapide coup d'oeil sur l'as (comme d'hab lol)

je penses que tu devrais virer le loader et définir l'action de l'event complete en fonction "trim".
ça te permetrais de renomer ta classe en "???Parser.as" et la rendrait plus souple d'utilisation (utilisation avec massapi, ou des systèmes de loader intégrée comme ceux du spas 3.0)

beau travail...

++
pascal
Utilisateur anonyme
17 oct. 2009 à 09:19
oui je le trouve a la perfection 5 étoiles.
Rejoignez-nous