Envoyé par : thefab
Date : 08/06/2008 16:32
Et ne faut-il pas un Listener d'un type particulier ?
Oui mais il s'agit juste d'un objet JS qui doit implémenter toutes les méthodes de l'interface (ici nsIAddonUpdateCheckListener).
Est-ce une action synchrone ou asynchrone ?
Je sais pas mais je dirais que c'est asynchrone.
Apparemment, FF et XR fonctionnent en 2 temps : une fonction checke les MAJ et les stocke quelque part...
Ce quelque part c'est une source RDF (ExtensionManager.datasource accessible via rdf:extensions)
Envoyé par : Raphael
Date : 08/06/2008 18:59
Effectivement, je viens d'étudier le fichier extensions.rdf et il y a bien un changement lorsqu'une MAJ est détecté... En effet, 3 lignes sont rajoutés pour l'extensions :
NS1:availableUpdateURL="http://www.ycd-project.org/updates/ycd/ycd-2008-06-02.xpi" NS1:availableUpdateHash="sha1:3bf589fc766e4802afa3292d36eb16983e3c4d7b" NS1:availableUpdateVersion="2008.06.02">
En revanche, je ne sais pas comment accéder à ces informations simplement ? Je pourrais toujours l'ouvrir et le parser à l'ancienne, façon développeur bidouilleur... mais je suppose qu'il existe un fabuleux service ou une fabuleuse fonction pour accéder directement à l'information "Est-ce que ces lignes existent ?" / "Y-a-t-il une MAJ ?" non ?
Ainsi, je gagnerais en performance je pense... Plutôt que de lancer une requête AJAX à chaque ouverture, il me suffirait juste de mettre un update.interval de 2h, et de lancer à chaque ouverture ma fonction de lecture du RDF... Ce serait plus rapide et plus simple que d'utiliser la fonction update() à chaque démarrage non ? (sans compter les 2 petites erreurs que ça génère)
EDIT : Après recherche, je pense que j'y suis presque, d'abord je me connecte au fichier :
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var rdf_file = rdfService.GetDataSource("rdf:extensions");
Puis, je voudrais utiliser les fonctions de tests d'existence de sujet/prédicat/cible mais alors je suis totalement perdu dans le RDF et le Wiki : http://xulfr.org/xulplanet/mozsdk/rdfque(..) genre hasArcOut() je pense mais je maitrise pas du tout la structure d'un RDF. Voici une partie du RDF :
<RDF:Description RDF:about="urn:mozilla:item:ycd@ylife.org" NS1:installLocation="app-profile" NS1:version="2007.09.18" NS1:updateURL="http://www.ycd-project.org/updates/ycd_updates.rdf" NS1:updateKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC81PlfZ4h2xqCu/zTeph1UqDWgFwDwi4Nk130iV/RoVXXbuLttYk19UJcGjH+Tq/Tu97U0nx53Db+lkPnTMEwM5xw9wUOFwtnZO0pZang7fMcP5+Sj7yRF60wBudsyPkceqGehq6JSLH+2350V1CJymGUQrAkhCxRM1BvAQY44swIDAQAB" NS1:name="YCD : Yu-Gi-Oh! Card Database" NS1:description="Universal and multilingual Yu-Gi-Oh! Card Database" NS1:creator="YCD Project" NS1:homepageURL="http://www.ycd-project.org" NS1:availableUpdateURL="http://www.ycd-project.org/updates/ycd/ycd-2008-06-02.xpi" NS1:availableUpdateHash="sha1:3bf589fc766e4802afa3292d36eb16983e3c4d7b" NS1:availableUpdateVersion="2008.06.02">
Je voudrais donc vérifier pour chaque extension (chaque noeud d'extension ?) s'il y a par exemple la ligne NS1:availableUpdateVersion... Quelle fonction d'existence faut-il utiliser ?
Merci d'avance.
Envoyé par : thefab
Date : 08/06/2008 22:39
Quelle fonction d'existence faut-il utiliser ?
GetTarget suffit. Elle retourne null si pas trouvé.
var extensions = RDF.GetDataSource("rdf:extensions"); var extension = RDF.GetResource("urn:mozilla:item:ycd@ylife.org"); var availableUpdateVersion = extensions.GetTarget(extension, RDF.GetResource("http://www.mozilla.org/2004/em-rdf#availableUpdateVersion"), true); if (availableUpdateVersion != null) if (availableUpdateVersion instanceof Components.interfaces.nsIRDFLiteral) alert(availableUpdateVersion.Value);
Envoyé par : Raphael
Date : 09/06/2008 09:00
Nickel... merci :)
2 petites questions :
Arf, j'ai vraiment un souci avec le "update.interval" :
Merci en tous cas pour ton aide jusqu'à présent, j'ai beaucoup appris.
Et t'en fais pas, même si j'arrive pas à utiliser cette méthode (Check par intervalle, et check du fichier au démarrage, il me reste toujours le check au démarrage via update() donc au pire ça marchera quand même, même si un poil plus lourd à mon sens)
EDIT : Bon, j'ai résolu mon souci. Avec une petite fonction test, j'ai pu déterminer que "2" représentait 10 minutes en réalité. Et la fonction de check RDF marche au poil, merci ;)
Maintenant je me pose juste la question de la meilleure méthode :
+ Allège le démarrage - Obligé de "hacker" les preférences et tout le temps remettre l'intervalle à "X" au démarrage. - Utilise des ressources pour le check AJAX au cours d'utilisation du logiciel
+ Dès l'ouverture, on sait s'il y a MAJ ou pas + Une fois que c'est fait, plus aucune ressource ne s'occupera des vérifs. de MAJ. - La fonction ''update()'' renvoie des petites erreurs à la console JS, mais ça ne bloque pas le script - Peut-être un poil plus long à lancer au démarrage ?
Je me tâte, quelle solution utiliseriez-vous ?
Envoyé par : thefab
Date : 09/06/2008 17:26
Si peu m'importe d'avoir la valeur de availableUpdateVersion, puis-je enlever le 2nd "if" ?
Oui bien sur, mais si tu n'as pas besoin du résultat tu peux tester l'existence avec hasArcOut:
var extension = RDF.GetResource("urn:mozilla:item:ycd@ylife.org"); var availableUpdateVersion = RDF.GetResource("http://www.mozilla.org/2004/em-rdf#availableUpdateVersion"); var maj = datasource.hasArcOut(extension, availableUpdateVersion);
Puis-je généraliser ça à toutes mes extensions ?
Oui mais je ne sais plus comment on parcourt une séquence (Seq). Tu peux aussi utiliser le gestionnaires d'extensions pour obtenir les IDs et interroger le RDF:
var extensions = []; var count = {}; var addons = EXTENSION_MANAGER.getItemList(Components.interfaces.nsIUpdateItem.TYPE_EXTENSION, count); for each (var addon in addons) { extensions.push(addon); } return extensions;
Check AJAX à chaque démarrage
Sans hésiter. Tu n'as pas des mises à jour chaque 10 minutes quand même ! Au démarrage l'avantage c'est que si il y a des mises à jour tu les télécharges, tu les installes et tu redémarre directement, ça évite à l'utilisateur de devoir redémarrer en cours de route.
Envoyé par : Raphael
Date : 09/06/2008 20:53
Oki, merci beaucoup pour ton aide, je peux passer le sujet en Résolu maintenant :)
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.