git-svn-id: svn://euphorik.ch/pompage@35 02bbb61a-6d21-0410-aba0-cb053bdfd66a
[pompage.git] / src / films.rb
index bc23fdc..59f4af7 100644 (file)
@@ -8,6 +8,7 @@ require 'pays.rb'
 require 'genre.rb'\r
 require 'personne.rb'\r
 require 'constantes.rb'\r
+require 'iconv'\r
 \r
 class Films\r
    def initialize(xmlFile)\r
@@ -16,15 +17,19 @@ class Films
       # repertoire de base, par exemple C:/Divx/\r
       @repBase = ''   \r
          \r
-      # Les films indexés par leur titre\r
+      # Les films indexé par leur titre\r
       @films = {}\r
       \r
-      # Les films indexés par leur nom de fichier, deux fichiers différents peuvent pointer sur le même film\r
+      # Les films indexé par leur nom de fichier, deux fichiers différents peuvent pointer sur le même film\r
       @filmsFichier = {}\r
       \r
-      # Les films qui ont plusieurs réponses lors de la recherche, traités à la fin\r
+      # Les films qui ont plusieurs réponses lors de la recherche, traité à la fin\r
       @filmsPlusieursReponses = []\r
 \r
+      # Les films qui ont plusieurs réponses lors de la recherche, traité à la fin\r
+      @filmsAucuneReponse = []\r
+\r
+      # permet de traiter facilement des groupes de thread\r
       @threadsWait = ThreadsWait::new\r
       @nbConn = 0 # le nombre de connexion\r
       \r
@@ -34,17 +39,21 @@ class Films
       chargerFilms\r
    end\r
 \r
-   # Lit un repertoire de manière recursive et va chercher les informations concernant le film sur le net\r
+   # Lit un repertoire de manière recursive et va chercher les informations concernant le film sur le net\r
    def pomper(r)\r
       @repBase = r\r
       repPrecedant = Dir::getwd\r
       Dir::chdir(r)\r
       \r
+      t = Time::now\r
+      \r
       pomperR('.')\r
       \r
       # on attends que les threads se terminent\r
       @threadsWait.all_waits\r
       \r
+      puts "Pompage terminé, temps : #{Time::now - t} secondes"\r
+      \r
       # traite les films qui avaient plusieurs réponses lors de la recherche\r
       # l'utilisateur doit faire un choix\r
       i = 1\r
@@ -57,6 +66,16 @@ class Films
          i += 1\r
       }\r
       \r
+      i = 1\r
+      @filmsAucuneReponse.each{|f|\r
+         puts\r
+         puts "Plop, Ce film n'a pas été trouvé{i} / #{@filmsAucuneReponse.length} :"\r
+         if f.reglerConflitPlusieursReponses\r
+            ajouterFilm(f)\r
+         end\r
+         i += 1\r
+      }\r
+      \r
       Dir::chdir(repPrecedant)      \r
    end\r
    \r
@@ -73,7 +92,7 @@ class Films
       pi = REXML::Instruction.new("xml-stylesheet", "type=\"text/xsl\" href=\"../xsl/yopyop.xsl\"")\r
       racine.previous_sibling = pi\r
       \r
-      # on ajoute chaque film à la racine\r
+      # on ajoute chaque film à la racine\r
       @films.each{|nom, f|\r
          racine.add(f.getXml)\r
       } \r
@@ -149,7 +168,7 @@ class Films
       }\r
    end\r
    \r
-   # Retourne un nouvel id, utilisé lors de la création d'un nouveau film\r
+   # Retourne un nouvel id, utilisé alors de la création d'un nouveau film\r
    def getNewId\r
       id = @idDisponible\r
       @idDisponible += 1\r
@@ -163,7 +182,11 @@ class Films
          return\r
       end\r
       \r
-      # le film existe déjà\r
+      if film.nbReponses == 0\r
+         @filmsAucuneReponse << film\r
+         return\r
+      end\r
+      \r
       if @films.has_key?(film.titre)\r
          # le fichier n'est pas connu -> nième partie d'un film\r
          if !@filmsFichier.has_key?(film.fichiers[0])\r
@@ -180,7 +203,7 @@ class Films
       end\r
    end\r
    \r
-   # Appelé par 'pomper'. Cette méthode est récursive.\r
+   # Appelé par 'pomper'. Cette méthode est récursive.\r
    def pomperR(r)\r
       Dir::foreach(r){|f|\r
          next if f[0,1] == '.'\r
@@ -189,15 +212,15 @@ class Films
             litRepertoireR(fichier) \r
          else\r
             \r
-            # vérification de l'extension\r
+            # véfication de l'extension\r
             /^.*?\.(.{3,4})$/ =~ fichier\r
             if !FILMS_EXTENSIONS.include?($1)\r
                next\r
             end\r
             \r
-            fichier = CGI::escapeHTML(fichier.unpack("C*").pack("U*"))\r
+            fichier = CGI::escapeHTML(Iconv.iconv("UTF-8", "ISO-8859-1", fichier)[0])\r
             \r
-            # on skip si le film est déjàa dans la BD\r
+            # on skip si le film est déjà dans la BD\r
             if film = @filmsFichier[fichier]\r
                puts "[i] Already exists in DB : #{film.titre} (#{fichier})"\r
                next\r
@@ -205,7 +228,7 @@ class Films
             \r
             film = nil\r
              \r
-            # pour limiter le nombre de connexion simultanée\r
+            # pour limiter le nombre de connexion simultanée\r
             if @nbConn >= NB_CONN_MAX\r
                @threadsWait.next_wait\r
             end\r
@@ -217,13 +240,13 @@ class Films
                      film = Film::new(fichier).loadData\r
                      film.id = getNewId # on lui donne un nouvel ID\r
                      \r
-                     unless film.nil? # le film a été correctement construit\r
+                     unless film.nil? # le film a été correctement construit\r
                         ajouterFilm(film)\r
                      end\r
                   rescue Exception => e\r
                      puts e.message\r
                      puts e.backtrace\r
-                  end      \r
+                  end\r
                   @nbConn -= 1\r
                }\r
             )\r