require 'genre.rb'\r
require 'personne.rb'\r
require 'constantes.rb'\r
+require 'iconv'\r
\r
class Films\r
def initialize(xmlFile)\r
# 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
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
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
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
end\r
\r
titre = e.get_elements('titre')[0].get_text\r
- \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
\r
film = Film::new(fichiers[0].get_text.value)\r
\r
- film.titre = titre.value unless titre.nil?\r
film.id = id\r
+ film.titre = titre.value unless titre.nil?\r
+ \r
+ film.url = url.value unless url.nil?\r
+ \r
fichiers.each{|e|\r
film.addFichier(e.get_text.value)\r
@filmsFichier[e.get_text.value] = film\r
}\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
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
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
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
\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
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