git-svn-id: svn://euphorik.ch/pompage@24 02bbb61a-6d21-0410-aba0-cb053bdfd66a
[pompage.git] / src / film.rb
index 91dcf37..c97e518 100644 (file)
@@ -19,6 +19,9 @@ end
 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 +31,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 +46,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 +156,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 +180,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 +262,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
@@ -379,7 +393,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 +407,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
@@ -421,7 +439,7 @@ private
       \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 +457,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 +479,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
@@ -472,7 +490,7 @@ public
       \r
       racine.add(REXML::Element::new('synopsis').add_text(@synopsis))\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