Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# convertir url chrome en chemin disque absolu

Envoyé par : teddyber

Date : 30/11/2006 23:40

Bonsoir,

je cherche à transformer une URL en chrome://monappli/content/monfichier.xul en /home/toto/xul/monappli/chrome/content/monfichier.xul ou c:\xul\monappli\chrome\content\monfichier.xul (les \ sont importants dans mon cas mais je pourrai m'en sortir à partir de \ simples ;))

quel est selon vous la méthode la plus adaptée ?

# Re: convertir url chrome en chemin disque absolu

Envoyé par : papy

Date : 01/12/2006 09:59

Il faut passer par le composant XPCom chrome-registry. Voila une petite fonction que j'ai écrite pour ca :

/*! Convert a chrome URI to a filesystem path
 *
 * @param chromePath A chome path ('chrome://path/to/chrome/file')
 * @return A filesystem path
 */
function chrome2file(chromePath) {
    var chrome = Components.classes["@mozilla.org/chrome/chrome-registry;1"].getService(Components.interfaces.nsIChromeRegistry);
    var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);

    var chrome_uri = ioService.newURI(chromePath, null, null);
    
    return chrome.convertChromeURL(chrome_uri).path;
}

# Re: convertir url chrome en chemin disque absolu

Envoyé par : teddyber

Date : 01/12/2006 10:16

ok merci bien. j'ai juste un petit soucis, sous windows, je récupère une string du genre /c:/xul/monappli/chrome/content/fichier.xul que je ne peux pas exploiter derrière puisque j'ai besoin de c:\\xul\\monappli\\chrome\\content\\fichier.xul. (c'est bien des doubles \ ) sous unix ça roule direct par contre. reste donc éventuellement à tester la plateforme pour modifier sous windows mais je cherchais une fonction qui intègrerait ça direct :o)

je précise que ce /c:/xul/monappli/chrome/content/fichier.xul ne me convient pas car il n'est pas accepté par initWithPath de l'objet nsILocalFile

# Re: convertir url chrome en chemin disque absolu

Envoyé par : papy

Date : 01/12/2006 10:21

Je crois bien que ca existe mais je ne vais pouvoir t'en dire plus par contre. Ca doit se passer au niveau des composants XPCom, chrome-registry et autres, suis les liens des interfaces utilisés par l'interface nsIChromeRegistry, XulPlanet et ton ami comme on dit :P

# Re: convertir url chrome en chemin disque absolu

Envoyé par : laurentj

Date : 04/12/2006 15:43

Pourquoi chercher à transformer une url chrome en chemin direct ? J'ai l'impression que tu veux faire un truc assez sale là...

# Re: convertir url chrome en chemin disque absolu

Envoyé par : teddyber

Date : 04/12/2006 16:09

en fait je cherchais à ouvrir une bdd sqlite que j'aurais bin positionné à coté de mon .xul (donc dans le chrome) et puis j'ai appris que c'était plus indiqué de travailler dans le répertoire de l'utilisateur...

# Re: convertir url chrome en chemin disque absolu

Envoyé par : Raphael

Date : 04/12/2006 16:42

Perso, je place ma base SQLite3 à côté de mon exécutable et j'y fais appel de cette manière :

// get the storage service
var store = Components.classes["@mozilla.org/storage/service;1"].
getService(Components.interfaces.mozIStorageService);
// get the profile directory
var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("CurProcD", Components.interfaces.nsILocalFile);
file.append(dbfile);
var db = store.openDatabase(file);

Mais me demande pas le détail, je n'en sais rien... D'ailleurs, je voudrais le placer dans un répertoire "data" mais je ne sais absolument pas comment faire.

PS : Ce code marche sous Linux et sous Windows.

# Re: convertir url chrome en chemin disque absolu

Envoyé par : teddyber

Date : 05/12/2006 10:56

oui mais CurProcD te renvoie le répertoire d'installation de Firefox, pas le répertoire courant. je pense que le mieux dans mon cas est de passer par mes préférences et d'y stocker le chemin vers le fichier sqlite

# Re: convertir url chrome en chemin disque absolu

Envoyé par : laurentj

Date : 06/12/2006 12:59

Il ne faut jamais stocker les données (surtout si elles sont destinées à être modifiée) dans le répertoire de l'appli, mais dans le répertoire système prévu à cet effet (/var/xxx par ex sous linux) ou dans le répertoire de l'utilisateur (voir mieux, dans son profil mozilla).

Stocker dans le même repertoire que l'appli, cela va à l'encontre des rêgles d'organisation des fichiers des systèmes modernes. par exemple, normalement, les repertoires d'installation des applis peuvent être en lecture seule, pour des raisons de sécurité, et donc y mettre ses données ne permettra pas un bon fonctionnement. Les profils dans mozilla n'ont pas été crée par pure fantaisie ;-)

# Re: convertir url chrome en chemin disque absolu

Envoyé par : Jojo

Date : 08/12/2006 17:52

Je me permet de revenir au sujet initial : Comment transformer un path "facon windows" du genre file://c:/patati/patata/etc.

en C:\patati\patata\etc ?

Je n'arrive pas à trouver de syntaxe correcte pour la commande replace(string1, string2) @_@ un

path.replace("/","\\")

ne remplace que le premier / trouvé, et je n'arrive pas à faire accepter l'option /g que j'ai croisée sur un site ou deux,

path.remplace(///g,"\\")

transforme la fin de ligne en commentaire. >_<

Bref, c'est un problème de syntaxe tout bête, mais je bloque dessus depuis un bon moment...

# Re: convertir url chrome en chemin disque absolu

Envoyé par : Jojo

Date : 09/12/2006 11:58

Bon, c'est remoi !

J'ai réussi à contourner le probleme et à remplacer les "/" par des "\". Malheureusement, ca ne veut toujours pas me lancer l'application.

Pour vous expliquer la structure : dans mon répertoire chrome, j'ai mis un fichier print.jar qui contient, dans le repertoire ext/ l'application à lancer.

Après utilisation de la fonction de papy et transformation des / en \, j'obtiens un path de la forme

C:\\Document%20and%20setting\\...\\extentions\\%7Bff...%7D\\chrome\\print.jar!\\ext\\appli.exe

qui n'est pas accepté : File not found error.

J'ai tenté en remplacant les %20 par " ", les %7B par { et %7D par }, et même de supprimer le ! à la fin de print.jar, mais ca ne passe toujours pas >.<

Bref, l'erreur vient-elle d'un caractere spécial mal codé, ou encore de la non-ouverture de l'archive .jar ? @_@

# Re: convertir url chrome en chemin disque absolu

Envoyé par : laurentj

Date : 11/12/2006 15:37

Jojo : il ne faut pas faire des manipulations de chemins à la main. Tu as tout ce qui faut parmis les xpcom pour ça. (Penses que tout le monde n'est pas sous windows !)

# Re: convertir url chrome en chemin disque absolu

Envoyé par : Jojo

Date : 11/12/2006 22:27

Moi qui était si content de me retrouver en terrain à peu près connu >_< parce qu'à vrai dire, je ne connais que des langages du genre C java ocaml, python, mupad... et je manque un peu de temps pour apprendre à fond le xul. Enfin, passons.

J'ai en fait surtout du mal à comprendre pourquoi le path renvoyé par la fonction de papy n'est pas accepté. @_@ J'ai tenté en placant le fichier à executer dans un repertoire à part (oui oui, je suis un débutant complet je n'ai quasi aucune idée de l'arborescence des fichiers dans une archive xpi xD), en le placant dans le .jar, etc..

# Re: convertir url chrome en chemin disque absolu

Envoyé par : EvilStef

Date : 13/12/2006 00:04

En effet, si quelqu'un arrive à nous trouver une maniere "propre" de nous redonner le chemin complet à partir de quelque chose qui est dans le .xpi , ça serait terrible :d, c'est le seul truc qui manque

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.