ADD Fin de l'extension firefox, il reste cependant à la tester complétement
authorpifou <pifou@02bbb61a-6d21-0410-aba0-cb053bdfd66a>
Wed, 27 Jun 2007 22:51:54 +0000 (22:51 +0000)
committerpifou <pifou@02bbb61a-6d21-0410-aba0-cb053bdfd66a>
Wed, 27 Jun 2007 22:51:54 +0000 (22:51 +0000)
FIX Problème lorsque un synopsis n'était pas trouvé dans la fiche allocine

git-svn-id: svn://euphorik.ch/pompage@31 02bbb61a-6d21-0410-aba0-cb053bdfd66a

css/yopyop.css
js/yopyop.js
mise_en_prod.rb
src/film.rb
xpi/chrome/content/prefs.js [new file with mode: 0644]
xpi/chrome/content/settings.js
xpi/chrome/content/settings.xul
xpi/components/handleProtocol.js
xpi/defaults/preferences/prefs.js
xpi/install.rdf
xsl/yopyop.xsl

index ac3501b..701de9b 100644 (file)
@@ -300,4 +300,7 @@ div.pied p {
    font-size: 8pt;\r
    padding-left: 10px;\r
 }\r
+div.pied a {\r
+   margin-left: 10px;\r
+}\r
 \r
index 85efb3d..6e44227 100644 (file)
@@ -76,10 +76,15 @@ derniereRecherche.setMinutes(derniereRecherche.getMinutes() - 1);
   */\r
 function doRecherche()\r
 {\r
-   // empèche de faire deux recherches successive en moins de 500ms\r
+   // empèche de faire deux recherches successive en moins de 800ms\r
    var now = new Date();\r
-   if (now.getTime() < derniereRecherche.getTime()  + 500)\r
+   if (now.getTime() < derniereRecherche.getTime() + 800)\r
+   {\r
+      // si une recherche à était demandé mais n'a pu aboutir alors on la refait dans certain temps\r
+      setTimeout("doRecherche()", 810 - (now.getTime() - derniereRecherche.getTime()));\r
       return;\r
+   }\r
+   derniereRecherche = now;\r
 \r
    var afficherTout = false;\r
    // si aucun choix n'est fait pour la recherche on affiche tout\r
@@ -133,6 +138,7 @@ function doRecherche()
    \r
    // mise à jour de l'affichage du nombre de film total/affiché\r
    document.getElementById("nbFilms").textContent = nbFilmAffiche + " / " + nbFilm + " film" + (nbFilm > 1 ? "s" : "")\r
+   \r
 }\r
 \r
 /**\r
index 9b4d23e..a6b804c 100644 (file)
@@ -8,7 +8,7 @@ dest = "Z:\\var\\www\\divx"
 dest = $*[0] if $*.length > 1\r
 \r
 # pour windows\r
-['xml', 'xsl', 'js', 'css', 'img'].each{|rep|\r
+['xml', 'xsl', 'js', 'css', 'img', 'xpi'].each{|rep|\r
    `mkdir #{dest}\\#{rep}`\r
    `xcopy /Y /F #{rep} #{dest}\\#{rep}`\r
-}
\ No newline at end of file
+}\r
index 21c27cb..b8b3e07 100644 (file)
@@ -1,4 +1,4 @@
-# Attention, le but de ce fichier n'est pas d'être le plus clair possible ^-^´´\r
+# Attention, le but de ce fichier n'est pas d'être le plus clair possible ^-^´´\r
 \r
 require 'rexml/document'\r
 require 'net/http'\r
@@ -440,9 +440,12 @@ private
       \r
       # Synopsis            \r
       /Synopsis.*?<h4>(.*?)<\/h4>/m =~ ficheHtml\r
-      @synopsis = $1 unless $1.nil?\r
-      @synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
-      @synopsis.virerBalisesHTML!\r
+      unless $1.nil\r
+      {\r
+         @synopsis = $1\r
+         @synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
+         @synopsis.virerBalisesHTML!\r
+      }\r
       \r
       # Budget       \r
       /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml\r
diff --git a/xpi/chrome/content/prefs.js b/xpi/chrome/content/prefs.js
new file mode 100644 (file)
index 0000000..5697167
--- /dev/null
@@ -0,0 +1,44 @@
+function divxlistGetPreferencesService()\r
+{\r
+   return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");\r
+}\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
+\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
+\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
+}
\ No newline at end of file
index 9eab518..c7139a0 100644 (file)
-function doAnnuler(event)\r
+/*** Evénements ***/\r
+function divxlistOnOk()\r
 {\r
+   divxlistSauverParametres();\r
 }\r
 \r
-function doOK(event)\r
+function divxlistOnLoad()\r
 {\r
+   divxlistChargerParametres();\r
 }\r
 \r
+function divxlistChargerParametres()\r
+{   \r
+   var root = divxlistGetRoot();\r
+   document.getElementById("dossierDivx").value = root;\r
+      \r
+   var commandes = divxlistGetCommandes();\r
+   \r
+   var listeAppli = document.getElementById("listeAppli");\r
+   \r
+   for (var i = 0; i < commandes.length; i += 1)\r
+   {\r
+      var item = listeAppli.appendItem("", "")\r
+      var textMotif = document.createElement("textbox")\r
+      textMotif.setAttribute("value",commandes[i][0])\r
+      item.appendChild(textMotif);\r
+      var textCommande = document.createElement("textbox")\r
+      textCommande.setAttribute("value",commandes[i][1])\r
+      item.appendChild(textCommande);     \r
+   }\r
+}\r
+\r
+function divxlistSauverParametres()\r
+{\r
+   var listeAppli = document.getElementById("listeAppli");\r
+   var items = listeAppli.childNodes;\r
+   \r
+   var commandes = new Array();\r
+   \r
+   for (var i = 2; i < items.length; i++)\r
+   {\r
+      var motifCommande = new Array(2);\r
+      motifCommande[0] = items[i].firstChild.value\r
+      motifCommande[1] = items[i].firstChild.nextSibling.value\r
+      commandes.push(motifCommande)\r
+   }\r
+   \r
+   divxlistSetCommandes(commandes);\r
+   divxlistSetRoot(document.getElementById("dossierDivx").value);\r
+}\r
 \r
+function divxlistAjouterCommande()\r
+{\r
+   var listeAppli = document.getElementById("listeAppli");\r
+   var ligne = document.createElement("listitem");\r
+   ligne.appendChild(document.createElement("textbox"));\r
+   ligne.appendChild(document.createElement("textbox"));\r
+   listeAppli.appendChild(ligne);\r
+}\r
+\r
+function divxlistEnleverCommande()\r
+{\r
+   var listeAppli = document.getElementById("listeAppli");\r
+   var ligne = listeAppli.selectedItem;\r
+   ligne.parentNode.removeChild(ligne);\r
+}\r
+\r
+function divxlistMonterCommande()\r
+{\r
+   var listeAppli = document.getElementById("listeAppli");\r
+   var ligne = listeAppli.selectedItem;\r
+   var motif = ligne.firstChild.value\r
+   var commande = ligne.firstChild.nextSibling.value\r
+   var ligneAvant = ligne.previousSibling\r
+   if (ligneAvant.nodeName == 'listitem')\r
+   {\r
+      ligneAvant.parentNode.insertBefore(ligne, ligneAvant) \r
+   }\r
+   ligne.firstChild.value = motif;\r
+   ligne.firstChild.nextSibling.value = commande\r
+}\r
+\r
+function divxlistDescendreCommande()\r
+{\r
+   var listeAppli = document.getElementById("listeAppli");\r
+   var ligne = listeAppli.selectedItem;\r
+   var motif = ligne.firstChild.value\r
+   var commande = ligne.firstChild.nextSibling.value\r
+   var ligneApres = ligne.nextSibling.nextSibling\r
+   if (ligneApres == null)\r
+      ligne.parentNode.appendChild(ligne)\r
+   else\r
+      ligneApres.parentNode.insertBefore(ligne, ligneApres) \r
+   ligne.firstChild.value = motif;\r
+   ligne.firstChild.nextSibling.value = commande\r
+}\r
 \r
 // Les événements\r
-$(hbox > button[@label=Annuler]).addEventListener('command', doAnnuler, true);\r
-$(hbox > button[@label=OK]).addEventListener('command', doOK, true);
\ No newline at end of file
+//$("dialog").addEventListener('load', onLoad, true);\r
+//$("dialog").bind("load", divxlistOnLoad);\r
+//$(hbox > button[@label=OK]).addEventListener('command', onOK, true);\r
+//var poulpe = document.getElementById("yopyop-settings");\r
+//.addEventListener('load', divxlistOnLoad, true);yxc\r
index 1eeca3e..3689b8f 100644 (file)
@@ -1,17 +1,29 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>\r
-<script src="settings.js"/>\r
-<script src="jquery.js"/>\r
-<window\r
+\r
+<!DOCTYPE dialog SYSTEM "chrome://webdeveloper/locale/options.dtd">\r
+\r
+<dialog\r
+   buttons="accept, cancel"\r
    id="yopyop-settings"\r
+   onload="divxlistOnLoad()"\r
+   ondialogaccept="divxlistOnOk()"\r
    title="Paramètres de 'Divx-list'"\r
    orient="vertical"\r
+   height="400"\r
+   width="600"\r
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\r
 \r
+<script type="application/x-javascript" src="jquery.js"/>\r
+<script type="application/x-javascript" src="prefs.js"/>\r
+<script type="application/x-javascript" src="settings.js"/>\r
+\r
  <popupset>\r
   <popup id="menuAppliAsso" >\r
-   <menuitem label="Supprimer" />\r
-   <menuitem label="Ajouter" />\r
+   <menuitem label="Supprimer" oncommand="divxlistEnleverCommande();" />\r
+   <menuitem label="Ajouter" oncommand="divxlistAjouterCommande();" />\r
+   <menuitem label="Monter" oncommand="divxlistMonterCommande();" />\r
+   <menuitem label="Descendre" oncommand="divxlistDescendreCommande();" />\r
   </popup>\r
  </popupset>\r
  <groupbox>\r
@@ -20,7 +32,7 @@
  </groupbox>\r
  <groupbox flex="1">\r
   <caption label="Application(s) associée(s)" />\r
-  <listbox flex="1" context="menuAppliAsso">\r
+  <listbox flex="1" id="listeAppli" context="menuAppliAsso">\r
    <listhead>\r
     <listheader label="Motif" />\r
     <listheader label="Commande" />\r
     <listcol minwidth="70" />\r
     <listcol flex="1"/>\r
    </listcols>\r
-      <listitem>\r
-       <textbox />\r
-       <textbox />\r
-      </listitem>\r
   </listbox>\r
  </groupbox>\r
- <hbox>\r
-  <spacer flex="1" />\r
-  <button label="OK" />\r
-  <button label="Annuler"/>\r
- </hbox>\r
  \r
-</window>
\ No newline at end of file
+</dialog>
\ No newline at end of file
index 96562cc..d10fa53 100644 (file)
@@ -1,32 +1,78 @@
-// 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)
 {
@@ -50,24 +96,56 @@ DivxProtocolHandler.prototype.newChannel = function(aURI)
 {\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);
 }
@@ -140,7 +218,7 @@ DIVXModule.getClassObject = function(compMgr, cid, iid)
 }
 \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)
 {
@@ -148,7 +226,7 @@ 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)
 {
index 62f931b..9ccbd82 100644 (file)
@@ -1 +1,2 @@
-pref("divxlist.root", "F:\\Films\\");
\ No newline at end of file
+pref("divxlist.root", "F:\\Films\\");\r
+pref("divxlist.commandes", "{'.*' => '"C:/Program Files/VideoLAN/VLC/vlc.exe" -f %f'}");
\ No newline at end of file
index 14ddd37..e45351e 100644 (file)
@@ -3,11 +3,11 @@
 <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
      xmlns:em="http://www.mozilla.org/2004/em-rdf#">\r
 \r
-  <Description about="urn:mozilla:install-manifest"\r
-               chrome:settingsURL="chrome://divxlist/content/settings.xul">\r
+  <Description about="urn:mozilla:install-manifest">\r
     <em:id>divxlist@divx.euphorik.ch</em:id>\r
     <em:version>1.0</em:version>\r
     <em:type>2</em:type><!-- 2 = extension -->\r
+    <em:optionsURL>chrome://divxlist/content/settings.xul</em:optionsURL>\r
    \r
     <!-- Target Application this extension can install into, \r
          with minimum and maximum supported versions. --> \r
index f1f9ad6..57ec067 100644 (file)
@@ -80,7 +80,7 @@
      </table>     \r
     </div>\r
     \r
-    <div class="pied"><p>by pifou</p></div>\r
+    <div class="pied"><p>by pifou <a href="../xpi/divxlist.xpi">extension firefox</a></p></div>\r
     
    </body>
   </html>