Chaotikmind
Messages postés16Date d'inscriptionsamedi 14 mars 2009StatutMembreDerniè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és1158Date d'inscriptionvendredi 21 février 2003StatutMembreDerniè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
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és337Date d'inscriptionvendredi 15 octobre 2004StatutMembreDerniè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és380Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention28 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és1158Date d'inscriptionvendredi 21 février 2003StatutMembreDerniè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és337Date d'inscriptionvendredi 15 octobre 2004StatutMembreDerniè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és1158Date d'inscriptionvendredi 21 février 2003StatutMembreDerniè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és1158Date d'inscriptionvendredi 21 février 2003StatutMembreDerniè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és1158Date d'inscriptionvendredi 21 février 2003StatutMembreDerniè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)
A part ca, j'ai rien compris au code...
AH AH AH AH ! C'est vrai en plus...
BananaTree
Messages postés337Date d'inscriptionvendredi 15 octobre 2004StatutMembreDerniè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és6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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és13Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention31 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és380Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention28 décembre 2009 19 oct. 2009 à 10:59
Ah tiens, encore un spéléologue...
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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és13Date d'inscriptionlundi 4 juillet 2005StatutMembreDernière intervention31 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és6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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és337Date d'inscriptionvendredi 15 octobre 2004StatutMembreDerniè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és380Date d'inscriptionmardi 29 avril 2003StatutMembreDernière intervention28 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és337Date d'inscriptionvendredi 15 octobre 2004StatutMembreDerniè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és6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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és337Date d'inscriptionvendredi 15 octobre 2004StatutMembreDerniè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)
28 oct. 2009 à 10:11
Rooh , un ami ;)
24 oct. 2009 à 19:18
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)
24 oct. 2009 à 00:28
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...
23 oct. 2009 à 19:39
(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
23 oct. 2009 à 18:55
J'ai mis 7 ( source finalement bien utile 5, et écrite proprement +2 )
23 oct. 2009 à 15:49
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...
23 oct. 2009 à 12:03
Pour respecter la logique architecturale, "AbstractPlaylist.as" doit s'appeller "PlaylistBase.as"
++
pascal
22 oct. 2009 à 22:59
--> 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..)
22 oct. 2009 à 22:55
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...
22 oct. 2009 à 22:50
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...
19 oct. 2009 à 13:20
... compilable gratuitement avec le compilateur du SDK de flex, et éditable avec le soft gratuit "flashdevlop"
;)
19 oct. 2009 à 12:08
Peg'
19 oct. 2009 à 12:03
19 oct. 2009 à 10:59
19 oct. 2009 à 01:18
Peg'
18 oct. 2009 à 15:12
18 oct. 2009 à 03:08
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'
17 oct. 2009 à 19:01
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
17 oct. 2009 à 18:13
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 ?
17 oct. 2009 à 13:48
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
17 oct. 2009 à 11:59
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'
17 oct. 2009 à 11:19
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
17 oct. 2009 à 09:19