projects
/
pompage.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ADD Pompage des images ! :)
[pompage.git]
/
src
/
films.rb
diff --git
a/src/films.rb
b/src/films.rb
index
bc23fdc
..
e93e615
100644
(file)
--- a/
src/films.rb
+++ b/
src/films.rb
@@
-1,4
+1,4
@@
-# Repr
é
sente un ensemble de films
\r
+# Repr
é
sente un ensemble de films
\r
\r
require 'rexml/document'
\r
require 'thwait'
\r
\r
require 'rexml/document'
\r
require 'thwait'
\r
@@
-8,23
+8,30
@@
require 'pays.rb'
require 'genre.rb'
\r
require 'personne.rb'
\r
require 'constantes.rb'
\r
require 'genre.rb'
\r
require 'personne.rb'
\r
require 'constantes.rb'
\r
+require 'iconv'
\r
\r
class Films
\r
\r
class Films
\r
- def initialize(xmlFile)
\r
+ def initialize(xmlFile
, modClasse
)
\r
@xmlFile = xmlFile
\r
\r
@xmlFile = xmlFile
\r
\r
+ @modClasse = modClasse
\r
+
\r
# repertoire de base, par exemple C:/Divx/
\r
@repBase = ''
\r
\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
@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
@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
@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
@threadsWait = ThreadsWait::new
\r
@nbConn = 0 # le nombre de connexion
\r
\r
@@
-34,29
+41,53
@@
class Films
chargerFilms
\r
end
\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
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
pomperR('.')
\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
+ 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
@filmsPlusieursReponses.each{|f|
\r
puts
\r
puts "Plop, ya un conflit #{i} / #{@filmsPlusieursReponses.length} :"
\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
- ajouterFilm(f)
\r
+ case f.reglerConflitPlusieursReponses
\r
+ when 1
\r
+ ajouterFilm(f)
\r
+ when 3
\r
+ break
\r
end
\r
i += 1
\r
}
\r
\r
end
\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
+ case f.reglerConflitPlusieursReponses
\r
+ when 1
\r
+ ajouterFilm(f)
\r
+ when 3
\r
+ break
\r
+ end
\r
+ i += 1
\r
+ }
\r
+
\r
+ @films.each{|t,f|
\r
+ f.mod.finish
\r
+ }
\r
+
\r
Dir::chdir(repPrecedant)
\r
end
\r
\r
Dir::chdir(repPrecedant)
\r
end
\r
\r
@@
-73,7
+104,7
@@
class Films
pi = REXML::Instruction.new("xml-stylesheet", "type=\"text/xsl\" href=\"../xsl/yopyop.xsl\"")
\r
racine.previous_sibling = pi
\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
@films.each{|nom, f|
\r
racine.add(f.getXml)
\r
}
\r
@@
-95,7
+126,7
@@
class Films
racine.each_element{|e|
\r
id = e.attribute('id').to_s.to_i
\r
\r
racine.each_element{|e|
\r
id = e.attribute('id').to_s.to_i
\r
\r
- if id > @idDisponible
\r
+ if id >
=
@idDisponible
\r
@idDisponible = id + 1
\r
end
\r
\r
@idDisponible = id + 1
\r
end
\r
\r
@@
-113,7
+144,7
@@
class Films
pays = e.get_elements('lespays')[0].get_elements('pays')
\r
genres = e.get_elements('genres')[0].get_elements('genre')
\r
\r
pays = e.get_elements('lespays')[0].get_elements('pays')
\r
genres = e.get_elements('genres')[0].get_elements('genre')
\r
\r
- film = Film::new(fichiers[0].get_text.value)
\r
+ film = Film::new(fichiers[0].get_text.value
, @modClasse::new
)
\r
\r
film.id = id
\r
film.titre = titre.value unless titre.nil?
\r
\r
film.id = id
\r
film.titre = titre.value unless titre.nil?
\r
@@
-149,7
+180,7
@@
class Films
}
\r
end
\r
\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
def getNewId
\r
id = @idDisponible
\r
@idDisponible += 1
\r
@@
-163,7
+194,11
@@
class Films
return
\r
end
\r
\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
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
@@
-180,24
+215,24
@@
class Films
end
\r
end
\r
\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
fichier = (r == '.' ? '' : r + "/") + f
\r
if File::directory?(fichier)
\r
def pomperR(r)
\r
Dir::foreach(r){|f|
\r
next if f[0,1] == '.'
\r
fichier = (r == '.' ? '' : r + "/") + f
\r
if File::directory?(fichier)
\r
-
litRepertoire
R(fichier)
\r
+
pomper
R(fichier)
\r
else
\r
\r
else
\r
\r
- # v
éri
fication de l'extension
\r
- /^.*?\.(
.
{3,4})$/ =~ fichier
\r
+ # v
é
fication de l'extension
\r
+ /^.*?\.(
[^.]
{3,4})$/ =~ fichier
\r
if !FILMS_EXTENSIONS.include?($1)
\r
next
\r
end
\r
\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
\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
if film = @filmsFichier[fichier]
\r
puts "[i] Already exists in DB : #{film.titre} (#{fichier})"
\r
next
\r
@@
-205,7
+240,7
@@
class Films
\r
film = nil
\r
\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
if @nbConn >= NB_CONN_MAX
\r
@threadsWait.next_wait
\r
end
\r
@@
-214,16
+249,17
@@
class Films
@threadsWait.join_nowait(
\r
Thread::new{
\r
begin
\r
@threadsWait.join_nowait(
\r
Thread::new{
\r
begin
\r
- film = Film::new(fichier
).loadData
\r
+ film = Film::new(fichier
, @modClasse::new)
\r
film.id = getNewId # on lui donne un nouvel ID
\r
film.id = getNewId # on lui donne un nouvel ID
\r
+ film.loadData # on charge ses données
\r
\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
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
@nbConn -= 1
\r
}
\r
)
\r