FIX Correction de l'html dans le synopsis
[pompage.git] / src / film.rb
index 91dcf37..21c27cb 100644 (file)
@@ -1,3 +1,5 @@
+# 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
 require 'thread'\r
@@ -12,13 +14,19 @@ require 'constantes.rb'
 \r
 class String\r
    def virerBalisesHTML\r
-      return self.gsub(/<(.*?)>/, '')\r
+      return gsub(/<(.*?)>/, '')\r
+   end\r
+   def virerBalisesHTML!\r
+      gsub!(/<(.*?)>/, '')\r
    end\r
 end\r
 \r
 class Film\r
    attr_accessor :id, :titre, :fichiers, :annee, :realisateurs, :acteurs, :pays, :duree, :critiquePresse, :critiqueSpectateur, :genres, :synopsis, :budget\r
       \r
+   # repertoire de base, par exemple C:/Divx/\r
+   @@repBase = ''   \r
+      \r
    # Les films indexés par leur titre\r
    @@films = {}\r
    \r
@@ -28,7 +36,6 @@ class Film
    # Les films qui ont plusieurs réponses lors de la recherche, traités à la fin\r
    @@filmsPlusieursReponses = []\r
 \r
-   @@mutex = Mutex::new\r
    @@threadsWait = ThreadsWait::new\r
    @@nbConn = 0\r
    \r
@@ -44,17 +51,28 @@ class Film
 \r
    # Lit un repertoire de manière recursive\r
    def Film::litRepertoire(r)\r
-      Film::litRepertoireR(r)\r
+      @@repBase = r\r
+      repPrecedant = Dir::getwd\r
+      Dir::chdir(r)\r
+      \r
+      Film::litRepertoireR('.')\r
+      \r
       # on attends que les threads se terminent\r
       @@threadsWait.all_waits\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
       @@filmsPlusieursReponses.each{|f|\r
+         puts\r
+         puts "Plop, ya un conflit #{i} / #{@@filmsPlusieursReponses.length} :"\r
          if f.reglerConflitPlusieursReponses\r
             Film::ajouterFilm(f)\r
          end\r
+         i += 1\r
       }\r
+      \r
+      Dir::chdir(repPrecedant)      \r
    end\r
    \r
    # Charge les films contenus dans un fichier XML.\r
@@ -143,8 +161,8 @@ private
     \r
    def Film::litRepertoireR(r)\r
       Dir::foreach(r){|f|\r
-         next if f == '.' or f == '..'\r
-         fichier = r + "/" + f\r
+         next if f[0,1] == '.'\r
+         fichier = (r == '.' ? '' : r + "/") + f\r
          if File::directory?(fichier)\r
             litRepertoireR(fichier) \r
          else\r
@@ -167,21 +185,23 @@ private
             \r
             film = nil\r
              \r
+            if @@nbConn >= NB_CONN_MAX\r
+               @@threadsWait.next_wait\r
+            end\r
+             \r
             @@nbConn += 1    \r
             @@threadsWait.join_nowait(\r
-               Thread::new{    \r
-                  begin\r
-                     @@mutex.lock if @@nbConn >= NB_CONN_MAX                     \r
+               Thread::new{\r
+                  begin                  \r
                      film = Film::filmsFactory(fichier)                     \r
                      unless film.nil? # le film a été correctement construit\r
                         Film::ajouterFilm(film)\r
                      end\r
-                     @@nbConn -= 1\r
-                     @@mutex.unlock\r
                   rescue Exception => e\r
                      puts e.message\r
                      puts e.backtrace\r
-                  end\r
+                  end      \r
+                  @@nbConn -= 1\r
                }\r
             )\r
          end\r
@@ -247,8 +267,7 @@ public
       \r
       @aPlusieursReponses = false # pour faire les choses bien\r
       \r
-      puts\r
-      puts "Plop, ya un conflit : #{@fichiers[0]}"\r
+      puts " -> " + @fichiers[0]\r
       puts "Fais ton choix jeune padawan (un caractère et pas plus)"\r
       tabNoms = @idsAllocine.keys\r
       choix = 1\r
@@ -341,12 +360,12 @@ public
             \r
          #/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">/ =~ donneesHtml\r
          #r = donneesHtml.scan(/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">(.*?)<\/a>/)\r
-         r = donneesHtml.scan(/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">(.*?)<\/a>(?:<\/h4><h5 style="color: #666666">&nbsp;(.*?)<\/h5>){0,1}/)\r
+         r = donneesHtml.scan(/<a href="\/film\/fichefilm_gen_cfilm=(\d+)\.html" class="link1">(.*?)<\/a>(?:<\/h4><h5 style="color: #666666">&nbsp;(.*?)<\/h5>){0,1}(?:<h4><br \/><\/h4>){0,1}(?:<h4 style="color: #666666"> de (.*?)<\/h4>){0,1}(?:<h4 style="color: #666666">&nbsp;avec (.*?)<\/h4>){0,1}(?:<h4 style="color: #666666">&nbsp;\((.*?)\)<\/h4>){0,1}/)\r
          \r
          if r.length > 1\r
             @aPlusieursReponses = true\r
             r.each{|f|\r
-               @idsAllocine[f[1].virerBalisesHTML + (f[2] != nil ? " " + f[2].virerBalisesHTML : "")] = f[0]\r
+               @idsAllocine[f[1].virerBalisesHTML + (f[2] != nil ? " " + f[2].virerBalisesHTML : "") + (f[3] != nil ? " de " + f[3].virerBalisesHTML : "") + (f[4] != nil ? " avec " + f[4].virerBalisesHTML : "") + (f[5] != nil ? " (" + f[5].virerBalisesHTML + ")" : "")] = f[0]\r
             }\r
          elsif r.length == 1\r
             loadDepuisIdAllocine(r[0][0], connexionHttp) \r
@@ -379,7 +398,7 @@ private
       \r
       # Année\r
       /<h4>Année de production : (\d+)<\/h4>/ =~ ficheHtml\r
-      @annee = $1.to_i unless $1.nil?\r
+      @annee = $1 unless $1.nil?\r
       \r
       # Réalisateurs\r
       /<h4>Réalisé par(.*?)<\/h4>/ =~ ficheHtml\r
@@ -393,21 +412,25 @@ private
          @acteurs << Personne::ajouter(a[0]) unless a[0].nil? \r
       } unless $1.nil? \r
                 \r
-                \r
       # Pays\r
       /<h4>Film (.*?)\.&nbsp;<\/h4>/ =~ ficheHtml\r
       $1.split(',').each{|pays|\r
          @pays << Pays::ajouter(pays) unless pays.nil?\r
       } unless $1.nil? \r
       \r
-      # Duree\r
-      /<h4>Durée : (\d+)h (\d+)min./ =~ ficheHtml\r
-      @duree = $1.nil? ? $2.to_i : $1.to_i * 60 + $2.to_i\r
+      # Duree (capture des heures et des minutes séparement vue que c'est le bordel sur allocine\r
+      /<h4>Durée :(?:.*?)(\d+)h/ =~ ficheHtml\r
+      heure = $1.nil? ? 0 : $1.to_i\r
+      \r
+      /<h4>Durée :(?:.*?)(\d+)min/ =~ ficheHtml\r
+      min = $1.nil? ? 0 : $1.to_i\r
+         \r
+      @duree = heure * 60 + min\r
       \r
       # Critiques presse et spectateur\r
       /Presse.*etoile_([012345]).*Spectateurs.*etoile_([012345])"/m =~ ficheHtml\r
-      @critiquePresse = $1.to_i unless $1.nil?\r
-      @critiqueSpectateur = $2.to_i unless $2.nil?\r
+      @critiquePresse = $1 unless $1.nil?\r
+      @critiqueSpectateur = $2 unless $2.nil?\r
       \r
       # Genre\r
       /<h4>Genre : (.*?)<\/h4>/ =~ ficheHtml\r
@@ -416,12 +439,14 @@ private
       } unless $1.nil?     \r
       \r
       # Synopsis            \r
-      /Synopsis.*?<h4>(.+?)<\/h4>/m =~ ficheHtml\r
+      /Synopsis.*?<h4>(.*?)<\/h4>/m =~ ficheHtml\r
       @synopsis = $1 unless $1.nil?\r
+      @synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
+      @synopsis.virerBalisesHTML!\r
       \r
       # Budget       \r
       /Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml\r
-      @budget = $1.to_i unless $1.nil?\r
+      @budget = $1 unless $1.nil?\r
    end     \r
       \r
 public\r
@@ -439,7 +464,7 @@ public
       racine.add(fichiers)      \r
       \r
       racine.add(REXML::Element::new('titre').add_text(@titre))\r
-      racine.add(REXML::Element::new('annee').add_text(@annee.to_s))\r
+      racine.add(REXML::Element::new('annee').add_text(@annee))\r
 \r
       realisateurs = REXML::Element::new('realisateurs')      \r
       @realisateurs.each{|r|\r
@@ -461,8 +486,8 @@ public
       \r
       racine.add(REXML::Element::new('duree').add_text(@duree.to_s))\r
 \r
-      racine.add(REXML::Element::new('critiquePresse').add_text(@critiquePresse.to_s))\r
-      racine.add(REXML::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur.to_s))\r
+      racine.add(REXML::Element::new('critiquePresse').add_text(@critiquePresse))\r
+      racine.add(REXML::Element::new('critiqueSpectateur').add_text(@critiqueSpectateur))\r
       \r
       genres = REXML::Element::new('genres')\r
       @genres.each{|g|\r
@@ -470,9 +495,15 @@ public
       }      \r
       racine.add(genres) \r
       \r
-      racine.add(REXML::Element::new('synopsis').add_text(@synopsis))\r
+      synopsisElement = REXML::Element::new('synopsis')\r
+      @synopsis.split("\n").each{|s|\r
+         next if s =~ /^\s*$/\r
+         synopsisElement.add(REXML::Element::new('p').add_text(s))\r
+      }\r
+      racine.add(synopsisElement)\r
+      \r
       budgetElement = REXML::Element::new('budget')\r
-      budgetElement.add_text(@budget.to_s)\r
+      budgetElement.add_text(@budget)\r
       budgetElement.add_attribute('unite', @budgetUnite)\r
       racine.add(budgetElement)\r
       \r