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