#1 2008-02-21 17:47:03

DomiX
Member
Registered: 2008-02-16
Posts: 66

FreeDB plugins

Bonsoir,

Ayant quelques CD, je me suis dis que créer un plugin effectuant une recherche sur FreeDB serait pas si mal smile

Net::FreeDB fait très bien ce job.

Par contre pour créer le plugin je coince un peu!
J'ai copié modestement le template fournis en GCFreeDB.pm dans gcstar/lib/gcstar/GCPlugins/GCmusics/GCFreeDB.pm puis modifié les lignes du début comme indiqué dans l'aide:

Code:

package GCPlugins::GCmusics::GCFreeDB;
...
package GCPlugins::GCmusics::GCFreeDB;

Mais en lançant gcstar ça rale:

Code:

*** unhandled exception in callback:
***   Fatal error with plugin GCFreeDB
***    : Can't locate object method "new" via package "GCPlugins::GCmusics::GCPluginFreeDB" (perhaps you forgot to load "GCPlugins::GCmusics::GCPluginFreeDB"?) at (eval 873) line 1.
***  ignoring at bin/gcstar line 289.

Je me doute bien qu'il faut modifier du code mais si déjà ça se charge mal...
Autre chose dans la documentation pour développeur, il y a des fonctions pour récupérer les infos à partir de page HTML comment faire en ayant déjà le résultat par l'intermédiaire de Net::FreeDB?

Offline

 

#2 2008-02-22 08:50:41

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

Bonjour,

DomiX wrote:

Par contre pour créer le plugin je coince un peu!
J'ai copié modestement le template fournis en GCFreeDB.pm dans gcstar/lib/gcstar/GCPlugins/GCmusics/GCFreeDB.pm puis modifié les lignes du début comme indiqué dans l'aide:
...
Mais en lançant gcstar ça rale:

Il faut que la 2ème ligne modifiée soit plutôt comme ceci :

Code:

    package GCPlugins::GCmusics::GCPluginFreeDB;

Avec Plugin dans le nom. Je pense que l'erreur vient de là.

Autre chose dans la documentation pour développeur, il y a des fonctions pour récupérer les infos à partir de page HTML comment faire en ayant déjà le résultat par l'intermédiaire de Net::FreeDB?

Dans ce cas, il vaut mieux directement ré-écrire la méthode load qui est définie dans GCPluginsBase.pm.

Mais je me demande s'il ne vaudrait pas mieux faire cela plutôt dans un module d'extraction car il n'y aura pas d'ambiguité pour les informations à récupérer et jamais de liste de choix à proposer non ? En plus c'est bien à partir d'un fichier qu'on va tenter de récupérer les informations plutôt qu'à partir d'un mot-clé.

Dans ce cas, ce qui pourrait se faire, c'est modifier le module déjà existant GCExtract/GCExtractMusics.pm. La méthode getInfo est appelé avec le nom du fichier saisi pour la playlist. Si cette liste est vide, ou si elle contient un nom de périphérique, il faudrait alors lancer la récupération des informations depuis FreeDB, sinon garder le code actuel.

Ca semble une bonne idée ?

Offline

 

#3 2008-02-22 16:35:27

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

Tian wrote:

Bonjour,

DomiX wrote:

Par contre pour créer le plugin je coince un peu!
J'ai copié modestement le template fournis en GCFreeDB.pm dans gcstar/lib/gcstar/GCPlugins/GCmusics/GCFreeDB.pm puis modifié les lignes du début comme indiqué dans l'aide:
...
Mais en lançant gcstar ça rale:

Il faut que la 2ème ligne modifiée soit plutôt comme ceci :

Code:

    package GCPlugins::GCmusics::GCPluginFreeDB;

Avec Plugin dans le nom. Je pense que l'erreur vient de là.

Autre chose dans la documentation pour développeur, il y a des fonctions pour récupérer les infos à partir de page HTML comment faire en ayant déjà le résultat par l'intermédiaire de Net::FreeDB?

Dans ce cas, il vaut mieux directement ré-écrire la méthode load qui est définie dans GCPluginsBase.pm.

Mais je me demande s'il ne vaudrait pas mieux faire cela plutôt dans un module d'extraction car il n'y aura pas d'ambiguité pour les informations à récupérer et jamais de liste de choix à proposer non ? En plus c'est bien à partir d'un fichier qu'on va tenter de récupérer les informations plutôt qu'à partir d'un mot-clé.

L'utilisateur aura besoin de saisir deux informations le genre et le lecteur CD

Tian wrote:

Dans ce cas, ce qui pourrait se faire, c'est modifier le module déjà existant GCExtract/GCExtractMusics.pm. La méthode getInfo est appelé avec le nom du fichier saisi pour la playlist. Si cette liste est vide, ou si elle contient un nom de périphérique, il faudrait alors lancer la récupération des informations depuis FreeDB, sinon garder le code actuel.

Ca semble une bonne idée ?

Effectivement ça semble être la plus simple à mettre en place.
Donc si je comprends bien la logique, il faudra indiquer le lecteur dans la section "Details" puis choisir une "playlist" ?
Je viens de tester ce fonctionnement, j'ai choisi un fichier m3u mais les champs ne se remplissent pas.

Si j'ai bien compris pour commencer j'ajoute un bout de code dans getInfo puis je crée une fonction getFreeDB qui va renvoyer ce qu'il faut.

Il me reste plus qu'a coder big_smile

Offline

 

#4 2008-02-25 09:48:38

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

DomiX wrote:

Effectivement ça semble être la plus simple à mettre en place.
Donc si je comprends bien la logique, il faudra indiquer le lecteur dans la section "Details" puis choisir une "playlist" ?
Je viens de tester ce fonctionnement, j'ai choisi un fichier m3u mais les champs ne se remplissent pas.

Il se passe quoi quand tu cliques sur le bouton Informations ? Normalement ça doit ouvrir une petite fenêtre avec les infos qui vont être utilisées.

Si j'ai bien compris pour commencer j'ajoute un bout de code dans getInfo puis je crée une fonction getFreeDB qui va renvoyer ce qu'il faut.

C'est tout à fait ça.

Offline

 

#5 2008-02-25 19:10:12

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

Bonsoir,

Tian wrote:

Il se passe quoi quand tu cliques sur le bouton Informations ? Normalement ça doit ouvrir une petite fenêtre avec les infos qui vont être utilisées.

J'ai bien une petite fenêtre qui s'ouvre, mais il n'y a que le champs "Running time" qui est remplit avec 0:00 les autres restent vides.

Offline

 

#6 2008-02-25 20:03:45

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

J'arrive à avancer, sur l'ajout de la fonctionnalité FreeDB.

C'est vraiment un jet y'a surement des erreurs... mais ça fonctionne wink

Voici mon premier patch

Donc il suffit de mettre le nom du lecteur CD du style /dev/cd puis de faire "information" et hop les champs se remplissent comme par magie, je n'ai pas crée de regex pour windows vu que j'en ai pas sous la main roll

Offline

 

#7 2008-02-26 06:19:41

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

DomiX wrote:

J'ai bien une petite fenêtre qui s'ouvre, mais il n'y a que le champs "Running time" qui est remplit avec 0:00 les autres restent vides.

Je veux bien juste le fichier playlist pour tester aussi. Soit en attachement ici, soit directement par mail à (tian gcstar org)

DomiX wrote:

C'est vraiment un jet y'a surement des erreurs... mais ça fonctionne

Malheureusement, je ne peux pas le tester pour l'instant. Mais ça a l'air très bien. Merci beaucoup.

J'ai quand même quelques remarques wink

Plutôt que de faire directement un "use" pour le module, il vaut mieux utiliser checkModule comme c'est fait pour les autres dans la méthode new en ajoutant quelque chose comme ça :

Code:

$self->{hasNetFreeDB} = $self->checkModule('Net::FreeDB');

Ca permet de charger le module s'il est présent. Par contre si ce n'est pas le cas, ça ne va pas empêcher le chargement de l'application. Et dans ce cas, ça permet même aux utilisateurs de se servir de l'extraction depuis une playlist si Net::FreeDB n'est pas installe. Ensuite dans getFreeDB, il suffit de faire quelque dans ce style au début :

Code:

my $info = {};
return $info if ! $self->{hasNetFreeDB};

Mis à part ça, félicitations ! Et puis c'est de ma faute si je n'ai pas documenté tout ça sur le wiki wink

Peut-être qu'il faudrait aussi laisser la possibilité dans les préférences d'indiquer un chemin par défaut pour le lecteur CD. Et celui-ci serait utilisé lorsque le champ est vide. Il faudra aussi probablement renommer le champ liste de lecture en quelque chose de plus générique du genre "Liste ou lecteur CD". Mais bon, tout ça, je pourrai m'en charger après.

Offline

 

#8 2008-02-26 20:04:57

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

Bonsoir,

Voici un deuxième patch avec les corrections.

Tian wrote:

Peut-être qu'il faudrait aussi laisser la possibilité dans les préférences d'indiquer un chemin par défaut pour le lecteur CD. Et celui-ci serait utilisé lorsque le champ est vide. Il faudra aussi probablement renommer le champ liste de lecture en quelque chose de plus générique du genre "Liste ou lecteur CD". Mais bon, tout ça, je pourrai m'en charger après.

Oui, ça serait plus agrèable pour l'utilisateur, je te laisse t'en charger smile
Il reste encore un point le genre à sélectionner par défaut j'ai utilisé "misc" ça fonctionne mais pour plus de souplesse il faudrait que l'utilisateur puisse le changer.

Offline

 

#9 2008-02-27 13:21:07

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

Merci pour ce nouveau patch.

Pour l'option sur le lecteur de CDs, je vais essayer de faire ça dans pas trop longtemps pour l'intégrer dans la prochaine 1.4.0 (qui n'a pas encore de date fixée). Plusieurs utilisateurs attendent cette fonctionnalité, donc ce sera très apprécié smile

DomiX wrote:

Il reste encore un point le genre à sélectionner par défaut j'ai utilisé "misc" ça fonctionne mais pour plus de souplesse il faudrait que l'utilisateur puisse le changer.

Je ne suis pas sûr d'avoir vraiment compris à quoi sert ce genre. Ca correspond au genre de la musique qu'il faut indiquer pour pouvoir faire une recherche ? En mettant misc, ça ne récupère les informations que si le disque est taggé avec ce genre dans la base FreeDB ?

Offline

 

#10 2008-02-27 20:31:39

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

Tian wrote:

Je ne suis pas sûr d'avoir vraiment compris à quoi sert ce genre. Ca correspond au genre de la musique qu'il faut indiquer pour pouvoir faire une recherche ? En mettant misc, ça ne récupère les informations que si le disque est taggé avec ce genre dans la base FreeDB ?

Oui ça correspond au genre de musique, la plupart des cd que j'ai pu tester est reconnu avec le genre misc, mais parfois ça ne correspond pas du tout.
Dans la documentation du module Net::FreeDB c'est indiqué qu'il faut essayer de donner le genre qui s'en approche le plus afin de donner des résultats pertinent.
Maintenant, on peut surement faire une moulinette pour tester pour chaque genre et proposer une liste des résultats si il y en a plusieurs... Mais là j'ai aucune idée comment faire hmm
L'application gnome-cd a le même comportement.

Last edited by DomiX (2008-02-27 20:36:07)


Attachments:
Attachment Icon gnome-cd.png, Size: 62,183 bytes, Downloads: 455

Offline

 

#11 2008-03-06 10:36:57

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

Désolé pour le long délai de réponse.

Pour la liste de lecture, le problème semble être parce qu'il n'y a dans celles-ci que la liste des titres. Alors que certaines informations sont attendues dans ce fichier qui a des informations sous formes de commentaires.

En revanche, il devrait quand même y avoir l'extraction des informations depuis les fichiers .mp3. Peut-être est-ce parce que tu n'as pas un des modules optionnels pour gérer cela. Tu peux les voir dans le menu Aide > Dépendances. Il faut avoir MP3::Info ou MP3::Tag. Et pour les OGG, Ogg::Vorbis::Header::PurePerl.

Pour l'intégration du patch, je n'ai malheureusement pas encore eu le temps de m'en occuper. Mais c'est dans ma liste de choses à faire pour la 1.4.0 qui ne sortira pas sans ça wink

Concernant le genre, je ne sais pas trop comment proposer une option à l'utilisateur pour l'indiquer. C'est vraiment spécifique aux collections de musique et je ne vois pas graphiquement où le mettre.

Offline

 

#12 2008-03-06 21:23:21

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

Bonsoir,

Tian wrote:

Désolé pour le long délai de réponse.

Pour la liste de lecture, le problème semble être parce qu'il n'y a dans celles-ci que la liste des titres. Alors que certaines informations sont attendues dans ce fichier qui a des informations sous formes de commentaires.

En revanche, il devrait quand même y avoir l'extraction des informations depuis les fichiers .mp3. Peut-être est-ce parce que tu n'as pas un des modules optionnels pour gérer cela. Tu peux les voir dans le menu Aide > Dépendances. Il faut avoir MP3::Info ou MP3::Tag. Et pour les OGG, Ogg::Vorbis::Header::PurePerl.

J'ai tous les modules d'installés.

Tian wrote:

Pour l'intégration du patch, je n'ai malheureusement pas encore eu le temps de m'en occuper. Mais c'est dans ma liste de choses à faire pour la 1.4.0 qui ne sortira pas sans ça wink

C'est une bonne nouvelle, il ne manque plus que des testeurs :-)

Tian wrote:

Concernant le genre, je ne sais pas trop comment proposer une option à l'utilisateur pour l'indiquer. C'est vraiment spécifique aux collections de musique et je ne vois pas graphiquement où le mettre.

Justement après reflexion, le plus simple c'est de laisser faire le boulot à gcstar. Faire une recherche sur tous les genres disponibles et de proposer le résultat à l'utilisateur et il fera lui même son choix.

Si getFreeDB renvoie plusieurs résultat lorsque l'on clique sur le bouton "Information" afficher une fenêtre listant les résultats.
Comment peut-on intervenir sur l'évènement du bouton "Information" ?

Offline

 

#13 2008-03-07 06:10:50

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

DomiX wrote:

Si getFreeDB renvoie plusieurs résultat lorsque l'on clique sur le bouton "Information" afficher une fenêtre listant les résultats.
Comment peut-on intervenir sur l'évènement du bouton "Information" ?

Pas de manière automatique ou déjà prévue dans l'architecture des plugins. Il faut coder à la main la création d'une boîte de dialogue demandant à l'utilisateur de choisir un des résultats. Je peux aussi m'en charger. Mais ça ne sera pas pour tout de suite non plus, car ma TODO list est bien pleine wink

Offline

 

#14 2008-03-07 08:38:15

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

Bonjour,

Tian wrote:

Pas de manière automatique ou déjà prévue dans l'architecture des plugins. Il faut coder à la main la création d'une boîte de dialogue demandant à l'utilisateur de choisir un des résultats. Je peux aussi m'en charger. Mais ça ne sera pas pour tout de suite non plus, car ma TODO list est bien pleine wink

Ok, pour la création d'une boîte de dialogue, je pensais qu'il y avait une autre méthode. Il me reste plus qu'a plonger dans la doc de Gtk2, je vais essayer ce week-end. cool

Offline

 

#15 2008-03-13 22:25:43

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

Je viens d'ajouter sur CVS ce patch. Pour l'instant je n'ai pas fait les autres modifications dont on a parlé avant. J'ai fait un test avec "Get Behind Me Satan" (The White Stripes) et justement, l'album trouvé avec misc n"tait pas le bon: "Night owls".

Tu as commencé quelque chose pour proposer une liste de choix ? Je devrais avoir le temps de m'en charger ce week-end sinon.

Offline

 

#16 2008-03-17 18:21:41

DomiX
Member
Registered: 2008-02-16
Posts: 66

Re: FreeDB plugins

Bonjour,

Tian wrote:

Je viens d'ajouter sur CVS ce patch. Pour l'instant je n'ai pas fait les autres modifications dont on a parlé avant. J'ai fait un test avec "Get Behind Me Satan" (The White Stripes) et justement, l'album trouvé avec misc n"tait pas le bon: "Night owls".

Tu as commencé quelque chose pour proposer une liste de choix ? Je devrais avoir le temps de m'en charger ce week-end sinon.

J'ai effectivement commencé quelque chose mais par contre je galère énormément en Gtk2. J'ai sous estimé la tâche hmm
Je te laisse essayer de réaliser une interface qui sera mieux surement mieux codé que par moi.

J'aurais aucun problème pour tester par contre! tongue

Offline

 

#17 2008-04-06 06:39:29

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

Bonjour,

J'ai mis sur CVS une nouvelle version qui devrait bien gérer le cas où il y a plusieurs résultats.

http://cvs.gna.org/cvsweb/~checkout~/gc … oot=gcstar

Par contre, j'ai un soucis étrange. L'année et le genre ne sont jamais récupéré pour moi (pour le genre, il y a un petit test dans le code qui reprend celui utilisé pour la recherche s'il n'y en a pas dans le résultat.

Avec toujours le même test qu'au dessus, ça ne fonctionne pas. Mais ce qui est étrange, c'est que cette info est bien présente d'après cette page :

http://www.freedb.org/freedb/rock/b20a610d

J'ai aussi essayé avec un outil en ligne de commande et là j'ai également bien l'information :

cddb_query -s freedb.freedb.org -p 8880 -P cddbp -c off read rock 0xb20a610d

Du coup, j'ai fait un peu de tcpdump pour voir ce qui changeait. Et dans les données que récupère le module Perl, il n'y a déjà pas l'information de l'année (qui devrait être dans une ligne DYEAR). C'est donc normal que le module ne l'ait pas ensuite. Mais je n'arrive toujours pas à comprendre pourquoi cette différence.

Il y a probablement plusieurs versions du protocole CDDBP et le module Perl en utilise une ancienne qui ne gérait pas ce champ, du coup le serveur ne lui renvoit pas. Mais je ne sais pas trop. Alors si quelqu'un a des pistes, elles sont les bienvenues.

Offline

 

#18 2008-04-06 07:34:49

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: FreeDB plugins

C'est bien ça. Apparemment ces champs ne sont supportés qu'à partir de la version 5 du protocole et Net::FreeDB ne la gère pas sad

http://ftp.freedb.org/pub/freedb/latest/CDDBPROTO

Pour l'instant, je n'ai pas trouvé de module Perl qui fonctionnerait bien. InfoSys::FreeDB avait l'air prometteur, mais il semble ne pas très bien fonctionner.

Offline

 



Should you have a problem using GCstar, you can open a bug report or request some support on GCstar forums.