Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

Aller à la page :  1 2

# [Résolu] XulRunner ne prévient pas des MAJ de mes extensions !

Envoyé par : Raphael

Date : 04/06/2008 17:09

Bonjour, j'ai une appli. XulRunner 1.9 avec son gestionnaire de Modules complémentaires. J'arrive à gérer mes extensions et les MAJ de manière sécurisées, pas de problème, ça marche.

Ca marche, MAIS je suis obligé de lancer mon gestionnaire de modules et cliquer sur "Find Updates" pour qu'il les détecte.

Je voudrais être prévenu d'un moyen ou d'un autre. Au mieux, j'aimerais pouvoir lancer la fonction à chaque démarrage manuellement, mais laquelle est-ce et est-ce possible ?

J'ai mis dans mes préférences (default/preferences/prefs.js) :

pref("extensions.update.enabled", true);
pref("extensions.update.notifyUser", true); 
pref("extensions.update.interval", 100);

Afin d'autoriser les MAJ, d'autoriser les notifications (quelle forme ? Pop Up ? Icône ? systemtray ?) et mettre un intervalle assez court.

Malheureusement, j'ai beaucoup de mal à faire "accepter" ces préférences là à XR.

En effet, quand je lance le about;config de mon appli :

extensions.update.enabled;true
extensions.update.interval;86400
extensions.update.notifyUser;false

Bref, pas très conciliant, notamment sur le NotifyUser. Autant sur l'intervalle, parfois j'arrive à le mettre en "100" en bidouillant, autant sur le NotifyUser, c'est impossible il repasse toujours en "false".

Est-ce parce que XR a besoin d'un élément graphique spécial pour afficher cette notification ? Et comme il le trouve pas, il passe la pref. en false ? Est-ce un bouton ? une icône ? Quelque chose de plus compliqué ?

Bref, je veux être prévenu des MAJ de mes extensions, et qu'elles se lancent... Est-ce possible ? J'ai vu un problème similaire sur Google Groups moz.dev.tech.xul.

Merci.

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

Envoyé par : Paul Rouget

Date : 04/06/2008 18:16

Je ne sais pas pourquoi, mais c'est forcé à false:

http://mxr.mozilla.org/mozilla/source/to(..)

Ensuite, le update.interval, tu le set comment ?

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

Envoyé par : Raphael

Date : 04/06/2008 20:27

Pour update.interval, laisse tomber, c'est moi qui ait déconné : j'installais une extension "test" où comme un con j'avais laissé des préférences à 86400, tu m'étonnes que la valeur change XD

Mais sinon pour en revenir au problème principal à savoir détecter les nouvelles MAJ et le notifier à l'utilisateur, as-tu une idée ?

Perso pour mon "Update Manager" maison, j'utilisais une petite requête AJAX asynchrone sur un fichier XML maison que j'hébergeais, que je parsais ensuite... Je me vois mal faire la même chose sur le fichier update.rdf, ce serait un peu ré-inventer la roue non ?

N'existe-t-il pas de fonction ou de service Mozilla à lancer pour checker les MAJ et qui retourne un booléen en cas de MAJ ?

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

Envoyé par : Raphael

Date : 06/06/2008 12:42

Bon, je suis en plein dans MXR et LXR depuis 2 jours... genre 25 onglets d'ouverts sous FF...

Je cherche les fonctions dont j'ai besoin genre :

  • CheckforUpdates ?
  • InstallXPIFromFile ?
  • UpdateExtensions ?

J'ai trouvé pas mal de fonctions qui m'ont l'air d'y ressembler, mais pour remonter la piste, c'est pas toujours simple...

J'ai notamment vu que beaucoup de ces fonctions semblaient utiliser nsIExtensionManager.idl qui a l'air d'avoir de chouettes fonctions dont je pourrais me servir.

Problème : impossible de le trouver sur MXR ou LXR ! Je ne le trouve que sur XulPlanet qui est quand même un dinosaure du genre... Rien non plus sur MDC.

Bref, j'arrive pas à trouver de Docs satisfaisante, est-ce que quelqu'un sait où je pourrais mieux chercher ?

Mon idéal serait d'arriver à un code du genre depuis l'une de mes pages :

var EM =  Components.classes["@mozilla.org/extensions/manager;1"].createInstance(Components.interfaces.nsIExtensionManager);
EM.installItemFromFile(MonXPI);
EM.CheckforUpdates();
EM.UpdateExtensions();

Est-ce possible ? Je pense que oui, mais je trouve pas de doc...

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

Envoyé par : frindsssss

Date : 06/06/2008 20:37

Hello depuis mozilla 3 il n'est plus possible de faire sa propre update il faut créer un compte sur addons mozilla et héberger ses maj dessus, enfin si j'ai bien compris.

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

Envoyé par : Raphael

Date : 06/06/2008 21:09

Non, avec une signature et une UpdateKey ça marche très bien :)

C'est juste que je voudrais avoir "la main" sur le lancement des updates... Le problème c'est que tout a l'air très lié à l'interface (la fenêtre des Extensions) alors que je voudrais pouvoir checker les MAJ depuis une autre fenêtre.

Ce que j'ai vu :

checkAllUpdates() va chercher les items, et les envoie dans update() (de ExtensionManager).
update() utilise checkForUpdates() qui lui-même utilise RDFItemUpdater()

Et c'est aussi compliqué pour installer... Au moins 4 fonctions qui s'imbriquent et qu'il faut remonter...

Bref, je ne sais pas à quel "niveau" intervenir, en ayant assez de contrôle pour lancer les check et les installation, et sans pour autant recoder entièrement ces fonctions from scratch.

Déjà, ce que j'aimerais bien, c'est lancer checkAllUpdates() à l'ouverture de la fenêtre des modules complémentaires. Ce doit être faisable, peut-être en rajoutant un addEventListener(onload) à la fenêtre non ?

Mais le problème reste de savoir comment vérifier et notifier des MAJ sans ouvrir cette fenêtre...

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

Envoyé par : frindsssss

Date : 06/06/2008 21:47

En fait si tu cherche juste à prévenir qu'une m-a-j pour ton extension existe j'ai une méthode mais archaïque tu met une iframe quelque par ou tu veux mais qui ce retrouve dans l'overlay principal de ton extension et tu met dans ton iframe de 0px un script Js qui alerte quand une mise à jour est disponible, enfin je doute que cela te satisfasse^^.

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

Envoyé par : Raphael

Date : 06/06/2008 21:59

Pas trop compris... Comment fais-tu ça ? Avec une fonction toute faite ? Ou tu as toi-même codé une requête AJAX qui va chercher des infos, qui parse le résultat, le compare à ton actuelle version puis t'affiche une alerte ?

Je pourrais le faire (c'est ce que je fais actuellement avec mon update manager maison) mais tant qu'à faire puisque j'utilise la puissance des extensions intégrées, j'aimerais ne pas avoir à faire ça manuellement.

Déjà, je suis parvenu à l'aide d'un Overlay sur les modules complémentaires à lancer le Check des MAJ à chaque ouverture la fenêtre des modules complémentaires, c'est déjà ça...

Maintenant, je voudrais pouvoir checker les MAJ directement depuis ma fenêtre principale, en tâche de fond... Et si jamais il y a MAJ, j'affiche une petite alerte discrète qui lancera la fenêtre des modules complémentaires (qui affichera donc directement les MAJ disposnibles grâce à mon overlay qui lance le check à l'ouverture).

La partie qu'il me manque c'est donc juste une fonction qui va me dire s'il y a des MAJ ou pas...

Par exemple, le Service ExtensionManager propose une fonction boolean checkForMismatches(); qui renvoie true si jamais il y a des items incompatibles.. Je voudrais la même chose mais pour checkForUpdates() en gros.

Problème, ce service ne semble proposer qu'une fonction update() qui je cite :

Checks for updates to a list of items.

Donc ça semble idéal... seul problème, elle ne retourne aucune information, je ne sais donc pas comment elle s'utilise en dehors de la fenêtre des extensions, car à tous les coups, si elle ne retourne aucune info, c'est qu'elle fait appel à des fonctions de notifications propres à la fenêtre des extensions, donc ça ne marchera pas dans ma fenêtre...

Je sais pas si je suis très clair en fait, mais c'est très simple ce que je veux faire en fait : Etre prévenu des MAJ, et lancer les MAJ, tout bêtement.

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

Envoyé par : thefab

Date : 06/06/2008 23:06

Mais tu peux passer un écouteur à update() il me semble.

Du genre:

var listener = ... // nsIAddonUpdateCheckListener
var items = ... // nsIUpdateItem[]

ExtensionManager.update(items, items.length(), UPDATE_CHECK_NEWVERSION, listener);

http://lxr.mozilla.org/mozilla/source/to(..)

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

Envoyé par : frindsssss

Date : 06/06/2008 23:51

Hello voila exactement comment je procède avec cette histoire d'iframe, j'ai développé une solution coté serveur somme toute basique :

Juste après le dernier bouton de ma toolbar je rajoute :

<iframe id="maj-body" src="http://gamuzclient.free.fr/maj.html" width="0" height="0" />

(La page est active pour montrer comment je procède) Son code source est très simple : Quand il n'y a pas de maj disponible je laisse la page comme ce si :

<html>
<BODY BACKGROUND="fond3.png">
<script language="javascript">
</script>
</body>
</html>

Et quand une maj est disponible :

<html>
<BODY BACKGROUND="fond3.png">
<script language="javascript">
alert("Une nouvelle version du Client est disponible a l adresse  http://gamuzclient.free.fr/");
</script>
</body>
</html>

Voila donc je ne fais pas intervenir d'xpcom, Ou autre solution dans la page maj.html mettre un script javascript qui lance une nouvelle page/onglet qui contient la page de téléchargement du nouvel add-on. Enfin avec un setTimeout tu contrôle le délai d'apparition de l'alert/execution du script car la ça apparait avant même que mozilla est fini de chargé !

Ps : même quand la toolbar est caché le script reste actif donc pas de problème à ce niveau.

Memo : je vais réfléchir à une solution plus xul : window.addEventListener("load", displaymaj, true); la fonction displaymaj va récupéré une valeur en ligne si valeurrecup=0 ne rien faire si valeurrecup=1 lancer majclient.xul en pop up et donc dans la pop up : 'une nouvelle version de l'add-on est disponible cliquer ici pour télécharger.'

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

Envoyé par : Raphael

Date : 07/06/2008 08:46

frindsssss > Merci pour ta méthode, mais à la limite je préfère la mienne du coup XD . Le but est d'utiliser vraiment la plateforme Xulrunner.

thefab > Exact, on peut passer un listener apparemment... Je ne maitrise pas trop ce concept encore, je vais faire de la recherche dessus... Si tu pouvais m'aiguiller sur les 2-3 lignes de syntaxes pour créer un listener, en précisant la fonction que je veux que ça appelle et comment récupérer le résultat (MAJ, ou pas MAJ) ça me ferait gagner quelques heures de recherche je pense ^^"

Merci d'avance si tu as quelques minutes.

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

Envoyé par : thefab

Date : 07/06/2008 15:06

Un listener est en fait un observateur d'évènements avec des fonctions de callback, lorsqu'un évènement (load) est déclenché la fonction correspondante (onload) est appelléé.

Tu définis donc un listener du genre:

var listener =
  {
  onDownloadStarted: function(addon)
    {
    ...
    },

  ...

  onInstallEnded: function (addon, status)
    {
    if (status == ...)
      {
      ...
      }
    }
  };

Ensuite c'est le gestionnaire d'extensions qui se charge d'appeler les fonctions de ton listener.

ExtensionManager.update(items, items.length(), UPDATE_CHECK_NEWVERSION, listener);

Par contre j'ai pas trop compris il y a téléchargement et installation.

Edit: Le code suivant ne fait rien, mais c'est pour illustrer le principe: http://xulfr.pastebin.com/mf3fa4f5

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

Envoyé par : Raphael

Date : 07/06/2008 18:35

Super, je vais pouvoir faire plein de tests avec tout ça :)

Sinon, tu veux dire que la fonction update() fait office de : check des MAJ, téléchargement et installation ? si c'est le cas, c'est peut-être pas la solution que je chercherais du coup... ?

Et ne faut-il pas un Listener d'un type particulier ? Je veux dire la fonction semble prendre des nsIAddonUpdateCheckListener. Puis-je utiliser ton code ou bien dois-je vraiment créer un Listener particulier du type demandé ?

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

Envoyé par : Raphael

Date : 07/06/2008 19:41

Bon, après quelques tests, voici mon code : http://xulfr.pastebin.com/ma1d496a

Résultat, le code "marche" mais avec des erreurs et ne répond pas encore totalement aux besoins :

  • Le code s'execute jusqu'au bout, c'est un bon point, mais avec des erreurs dans la console :
Error: not well-formed
Source File: jar:file:///home/raph/Programmation/Dev_Tests/xulrunner/chrome/en-US.jar!/locale/en-US/mozapps/extensions/extensions.properties
Line: 1, Column: 17
Source Code:
aboutWindowTitle=About %S

Forcémment, je suppose que la fonction intéragie avec la fenêtre des Extensions, or elle n'est pas ouverte...

  • A la fin, rien ne se passe MAIS quand j'ouvre ma fenêtre des modules complémentaires, je vois que mes modules peuvent être MAJ sans que j'ai besoin de checker. Apparemment, FF et XR fonctionnent en 2 temps : une fonction checke les MAJ et les stocke quelque part... Et en fait la fenêtre des modules se base sur ces valeurs stockées.

Solutions envisagées :

  • Soit je continue d'utiliser update() malgré les erreurs (puisqu'elles sont mineures et n'arrêtent pas le script)
  • Soit j'essaie de décortiquer un peu plus cette fonction pour en extraire la moelle du "check" des MAJ...

Ensuite :

  • Soit j'apprends à mieux me servir du Listener pour savoir si oui ou non il y a des MAJ.
  • Soit j'essaie de savoir où sont stockés les valeurs indiquant qu'il y a des MAJ et je me base sur ça au lancement pour savoir s'il y en a ou pas...

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

Envoyé par : Raphael

Date : 07/06/2008 21:00

Bon, j'ai modifié un peu mon code : http://xulfr.pastebin.com/m232b64a4

J'arrive maintenant bien à savoir s'il y a des MAJ ou non, c'est cool.

Je me pose toute de même la question : Est-ce une action synchrone ou asynchrone ? Je veux dire quand je gérais moi-même le check de mes updates, je le faisais en asynchrone, du coup, je continuais à charger mon interface l'utilisateur pouvait intéragir normalement, avec juste un check des MAJ en background...

Mais là ? Est-ce que ça marche pareil ? Ou bien est-ce que je dois lancer cette fonction, et ensuite continuer la construction de mon interface ?

Sinon à part cette interrogation et les petites erreurs renvoyés par la console, je pense que mon système marche :

  • Check des MAJ au démarrage : Affichage d'une notification si tel est le cas.
  • Affichage des Modules complémentaires avec les MAJ disponibles.

Concernant un autre souci, à savoir la pré-installation d'extensions, mais dans le Profil et pas Appdir, je crois avoir trouvé la solution : installItemFromFile() du même service en précisant installLocationKey à "app-profile" au 1er démarrage de mon appli. Ca devrait marcher :)

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.