-// Le composant définit pour cette extension
+// voir : http://www.nexgenmedia.net/docs/protocol/\r
+\r
+// le composant pour cette extension
const DIVXPROT_HANDLER_CONTRACTID = "@mozilla.org/network/protocol;1?name=divx";
const DIVXPROT_HANDLER_CID = Components.ID("{65aa548e-1dda-11dc-8314-0800200c9a66}");
-// Les composants utilisés
+// les composants utilisés\r
const URI_CONTRACTID = "@mozilla.org/network/simple-uri;1";
const kIOSERVICE_CONTRACTID = "@mozilla.org/network/io-service;1";\r
-// Les interfaces utilisées
+// les interfaces utilisées
const nsIProtocolHandler = Components.interfaces.nsIProtocolHandler;
const nsIURI = Components.interfaces.nsIURI;
const nsISupports = Components.interfaces.nsISupports;
const nsIIOService = Components.interfaces.nsIIOService;
+\r
+/******* COPIER-COLLER de pref.js dans /chrome/content *******/\r
+/******* TODO : trouver un moyen d'inclure pref.js *******/\r
+function divxlistGetPreferencesService()\r
+{\r
+ return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");\r
+}\r
+function divxlistGetRoot()\r
+{\r
+ return divxlistGetPreferencesService().getCharPref("divxlist.root");\r
+}\r
+function divxlistSetRoot(root)\r
+{\r
+ return divxlistGetPreferencesService().setCharPref("divxlist.root", root);\r
+}\r
+function divxlistGetCommandes()\r
+{\r
+ var commandes = divxlistGetPreferencesService().getCharPref("divxlist.commandes");\r
+ var regex = /'[^']*'/g\r
+ var res = commandes.match(regex);\r
+ var commandesTab = new Array()\r
+ if (res != null)\r
+ for(var i = 0; i < res.length; i += 2)\r
+ {\r
+ var motifCommande = new Array(2);\r
+ motifCommande[0] = res[i].slice(1, res[i].length-1)\r
+ motifCommande[1] = res[i+1].slice(1, res[i+1].length-1)\r
+ commandesTab.push(motifCommande); \r
+ }\r
+ return commandesTab;\r
+}\r
+function divxlistSetCommandes(commandes)\r
+{\r
+ var commandesStr = "{"\r
+ for (var i = 0; i < commandes.length; i++)\r
+ { \r
+ if (i != 0) commandesStr += ", "\r
+ commandesStr += "'" + commandes[i][0] + "' => "\r
+ commandesStr += "'" + commandes[i][1] + "'"\r
+ }\r
+ commandesStr += "}"\r
+ \r
+ return divxlistGetPreferencesService().setCharPref("divxlist.commandes", commandesStr);\r
+}\r
/**\r
* Classe ProtocolHandler.\r
*/
-function ProtocolHandler(scheme)
+function DivxProtocolHandler(scheme)
{
this.scheme = scheme;
}
-// attributs par défaut
+// attributs par défaut
DivxProtocolHandler.prototype.defaultPort = -1;
DivxProtocolHandler.prototype.protocolFlags = nsIProtocolHandler.URI_NORELATIVE;
\r
/**\r
- * est-ce qu'un port est autorisé.\r
+ * est-ce qu'un port est autorisé \r
*/
DivxProtocolHandler.prototype.allowPort = function(aPort, aScheme)
{
{\r
var chemin = aURI.spec;\r
\r
- var root = "F:/Films/";\r
- chemin = chemin.replace("divx://", root)\r
+ // détermine quel commande utilisé en comparant le motif et le nom du fichier\r
+ var commandes = divxlistGetCommandes();\r
+ var commande;\r
+ for (var i = 0; i < commandes.length; i++)\r
+ {\r
+ var regexp = new RegExp(commandes[i][0], "i");\r
+ if (regexp.test(chemin))\r
+ {\r
+ commande = commandes[i][1]\r
+ break;\r
+ }\r
+ }\r
+ \r
+ // ajoute le chemin (spécifié dans les options)\r
+ var root = divxlistGetRoot();\r
+ chemin = chemin.replace("divx://", root + "/")\r
+ \r
+ // extrait le chemin de l'application de la commande\r
+ // puis l'enlève de la commande\r
+ var application;\r
+ var regexp = /^\s*"([^"]+)"\s*/;\r
+ var res = regexp.exec(commande);\r
+ if (res == null)\r
+ {\r
+ regexp = /^\s*(\S+)\s*/;\r
+ res = regexp.exec(commande);\r
+ }\r
+ application = res[1]\r
+ commande = commande.replace(regexp, "");\r
\r
- //dump(chemin);\r
+ // sépare les paramètres restant, %f est remplacé par le chemin du fichier\r
+ var parametres = commande.split(' ');\r
+ for (var i = 0; i < parametres.length; i++)\r
+ {\r
+ parametres[i] = parametres[i].replace("%f", chemin)\r
+ }\r
\r
- // crée un nouveau fichier\r
+ // crée un nouveau fichier\r
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
- file.initWithPath("C:\\Program Files\\VideoLAN\\VLC\\vlc.exe");\r
+ file.initWithPath(application);\r
\r
- // crée un nouveau processus\r
+ // crée un nouveau processus\r
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);\r
process.init(file);\r
\r
// lance le processus. false pour ne pas être blockant\r
- var args = [chemin, "-f"];\r
- process.run(false, args, args.length);\r
- \r
- // trouver une méthode plus simple pour qu'il ne fasse rien..\r
+ process.run(false, parametres, parametres.length);\r
+ \r
+ // trouver une méthode plus simple pour qu'il ne fasse rien..\r
+ var finalURL = ""\r
var ios = Components.classes[kIOSERVICE_CONTRACTID].getService(nsIIOService);\r
return ios.newChannel("javascript:document.location='" + finalURL + "'", null, null);
}
}
\r
/**\r
- * Est-ce que le module peut être déchargé ?\r
+ * Est-ce que le module peut être déchargé\r
*/
DIVXModule.canUnload = function(compMgr)
{
}
/**\r
- * Le point d'entré, retourne le module.\r
+ * Le point d'entré, retourne le module.\r
*/
function NSGetModule(compMgr, fileSpec)
{