ADD Nouveaux films
[pompage.git] / src / films.rb
index 4eff4e8..01dce5e 100644 (file)
@@ -51,7 +51,7 @@ class Films
       }\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
@@ -105,9 +105,17 @@ class Films
    \r
    # Mise à jour des films dans la BD.\r
    # p1 string : un motif Regex correspondant à un ou plusieurs champs\r
-   def update(champ)\r
+   def update(champ, titre)\r
       @films.each{|t, f|\r
-         f.update(champ)\r
+         next if !f.titre.match(Regexp::new(titre, true))\r
+                  \r
+         ## si le film est complet on ne fait rien\r
+         if $force || f.url == nil || f.titre == '' || f.annee == nil ||\r
+            f.realisateurs.empty? || f.acteurs.empty? || f.pays.empty? ||\r
+            f.genres.empty? || f.synopsis == nil || !f.possedeImage?\r
+            \r
+            f.update(champ)\r
+         end\r
       }\r
    end\r
    \r
@@ -130,7 +138,7 @@ class Films
       } \r
       \r
       # sauve le document\r
-      docXml.write(File::new(@xmlFile, 'w'), 0)\r
+      docXml.write(File::new(@xmlFile, 'w'), 1)\r
    end   \r
    \r
    private\r
@@ -143,62 +151,71 @@ class Films
       end\r
             \r
       racine = REXML::Document::new(File::new(@xmlFile)).root\r
-      racine.each_element{|e|       \r
+      racine.elements.each("film"){|e| \r
          id = e.attribute('id').to_s.to_i\r
        \r
          if id >= @idDisponible\r
             @idDisponible = id + 1   \r
          end\r
          \r
-         titre = e.get_elements('titre')[0].get_text\r
-         url = e.get_elements('url')[0].get_text         \r
-         fichiers = e.get_elements('fichiers')[0].get_elements('fichier')\r
-         annee = e.get_elements('annee')[0].get_text\r
-         duree = e.get_elements('duree')[0].get_text\r
-         critiquePresse = e.get_elements('critiquePresse')[0].get_text\r
-         critiqueSpectateur = e.get_elements('critiqueSpectateur')[0].get_text\r
-         synopsis = e.get_elements('synopsis')[0].get_elements('p')\r
-         budget = e.get_elements('budget')[0].get_text  \r
-         realisateurs = e.get_elements('realisateurs')[0].get_elements('realisateur')\r
-         acteurs = e.get_elements('acteurs')[0].get_elements('acteur')\r
-         pays = e.get_elements('lespays')[0].get_elements('pays')\r
-         genres = e.get_elements('genres')[0].get_elements('genre')\r
+         film = Film::new(nil, @modClasse::new)\r
+         film.id = id\r
          \r
-         film = Film::new(fichiers[0].get_text.value, @modClasse::new)\r
+         film.titre = e.get_text('titre')\r
+         film.titre = film.titre.value if film.titre != nil\r
          \r
-         film.id = id\r
-         film.titre = titre.value unless titre.nil?\r
+         print "#{film.titre}.. "\r
+\r
          \r
-         film.url = url.value unless url.nil?\r
+         film.url = e.get_text('url')\r
+         film.url = film.url.value if film.url != nil\r
+\r
+         film.annee = e.get_text('annee')\r
+         film.annee = film.annee.value if film.annee != nil         \r
          \r
-         fichiers.each{|e|\r
-            film.addFichier(e.get_text.value)\r
-            @filmsFichier[e.get_text.value] = film\r
-         }\r
-         film.annee = annee.value unless annee.nil?\r
-         acteurs.each{|e|\r
-            film.acteurs << Personne::ajouter(e.get_text.value)\r
+         film.duree = e.get_text('duree')\r
+         film.duree = film.duree.value if film.duree != nil\r
+         \r
+         film.critiquePresse = e.get_text('critiquePresse')\r
+         film.critiquePresse = film.critiquePresse.value if film.critiquePresse != nil\r
+         \r
+         film.critiqueSpectateur = e.get_text('critiqueSpectateur')\r
+         film.critiqueSpectateur = film.critiqueSpectateur.value if film.critiqueSpectateur != nil\r
+         \r
+         film.budget = e.get_text('budget')\r
+         film.budget = film.budget.value if film.budget != nil\r
+         \r
+         e.elements.each('fichiers/fichier'){|f|\r
+            next if f.get_text == nil\r
+            film.addFichier(f.get_text.value)\r
+            @filmsFichier[f.get_text.value] = film\r
          }\r
-         realisateurs.each{|e|\r
-            film.realisateurs << Personne::ajouter(e.get_text.value)\r
+         \r
+         e.elements.each('realisateurs/realisateur'){|f|\r
+            film.realisateurs << Personne::ajouter(f.get_text.value)\r
          }\r
-         pays.each{|e|\r
-            film.pays << Pays::ajouter(e.get_text.value)\r
+         \r
+         e.elements.each('acteurs/acteur'){|f|\r
+            film.acteurs << Personne::ajouter(f.get_text.value)\r
          }\r
-         film.duree = duree.value unless duree.nil?\r
-         film.critiquePresse = critiquePresse.value unless critiquePresse.nil?\r
-         film.critiqueSpectateur = critiqueSpectateur.value unless critiqueSpectateur.nil?\r
-         genres.each{|e|\r
-            film.genres << Genre::ajouter(e.get_text.value) if e.get_text != nil\r
+         \r
+         e.elements.each('lespays/pays'){|f|\r
+            film.pays << Pays::ajouter(f.get_text.value)\r
          }\r
+         \r
+         e.elements.each('genres/genre'){|f|\r
+            film.genres << Genre::ajouter(f.get_text.value)\r
+         }       \r
+         \r
          debut = true\r
          film.synopsis = ""\r
-         synopsis.each{|e|\r
-            film.synopsis += "\n" unless debut\r
-            film.synopsis += e.get_text.value if e.get_text != nil\r
+         e.elements.each('synopsis/p'){|f|\r
+            film.synopsis += "\n" unless debut            \r
+            film.synopsis += f.get_text.value if f.get_text != nil\r
             debut = false\r
-         }\r
-         film.budget = budget.value unless budget.nil?\r
+         }                  \r
+         film.synopsis = nil if film.synopsis == ""\r
+                  \r
          @films[film.titre] = film\r
       }\r
    end\r
@@ -246,15 +263,14 @@ class Films
             pomperR(fichier) \r
          else\r
             \r
-            #CGI::escapeHTML(\r
-            fichier = Iconv.iconv("UTF-8", "ISO-8859-1", fichier)[0]\r
+            #fichier = Iconv.iconv("UTF-8", "ISO-8859-1", fichier)[0] // sous windows il faut décommenter cette ligne\r
                         \r
             # véfication de l'extension\r
             /^.*?\.([^.]{3,4})$/ =~ fichier\r
             if !FILMS_EXTENSIONS.include?($1)\r
                next\r
-            end\r
-                        \r
+            end
+                                    \r
             # on skip si le film est déjà dans la BD\r
             if film = @filmsFichier[fichier]\r
                puts "[!] Film déjà dans la BD : #{film.titre} (#{film.fichiers[0]})"\r
@@ -271,14 +287,15 @@ class Films
                Thread::start{\r
                   begin                  \r
                      film = Film::new(fichier, @modClasse::new)\r
-                     @mutexId.synchronize {\r
+                     @mutexId.synchronize{\r
                         film.id = getNewId # on lui donne un nouvel ID\r
                      }\r
-                     film.loadData # on charge ses données\r
                      \r
-                     @mutexAjout.synchronize {\r
+                     film.loadData # chargement de ses données\r
+                     \r
+                     @mutexAjout.synchronize{\r
                         ajouterFilm(film)\r
-                     }                     \r
+                     }\r
                   rescue Exception => e\r
                      puts e.message\r
                      puts e.backtrace\r