Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

Aller à la page :  1 2

# Re: XulRunner ne me prévient pas des MAJ de mes extensions !

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)

# Re: XulRunner ne me prévient pas des MAJ de mes 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.

# Re: XulRunner ne me prévient pas des MAJ de mes extensions !

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);

# Re: XulRunner ne me prévient pas des MAJ de mes extensions !

Envoyé par : Raphael

Date : 09/06/2008 09:00

Nickel... merci :)

2 petites questions :

  • Si peu m'importe d'avoir la valeur de availableUpdateVersion, puis-je enlever le 2nd "if" ?
  • Puis-je généraliser ça à toutes mes extensions ? Une petite boucle ? Genre une "GetDataSources" renvoyant une liste des extensions, et une boucle parcourant chacun avec ton code... ?

Arf, j'ai vraiment un souci avec le "update.interval" :

  • Déjà après le premier "check des MAJ" il semble qu'une fonction du framework réinitialise automatiquement à 86400 ! (var interval = getPref("getIntPref", PREF_EM_UPDATE_INTERVAL, 86400);). Donc à chaque démarrage, je le remet à "2" par exemple...
  • 2ème problème : A quoi correspond cette valeur ? Secondes ? Minutes ? Autres ? Car même en mettant à 2, et en attendant plusieurs minutes, en redémarrant, tout ça... Ben j'arrive pas à saisir quand est-ce qu'il lance enfin sa fonction de check... ?

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 :

  • Check toutes les "X" minutes et Vérif. du RDF à chaque démarrage :
+ 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
  • Check AJAX à chaque démarrage :
+ 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 ?

# Re: XulRunner ne me prévient pas des MAJ de mes extensions !

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.

# Re: XulRunner ne me prévient pas des MAJ de mes extensions !

Envoyé par : Raphael

Date : 09/06/2008 20:53

Oki, merci beaucoup pour ton aide, je peux passer le sujet en Résolu maintenant :)

Aller à la page :  1 2

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.