projects
/
pompage.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
MAJ BD (realisateurs)
[pompage.git]
/
src
/
films.rb
diff --git
a/src/films.rb
b/src/films.rb
index
585970e
..
4eff4e8
100644
(file)
--- a/
src/films.rb
+++ b/
src/films.rb
@@
-1,4
+1,4
@@
-#
Représente un ensemble de films
\r
+#
coding: utf-8
\r
\r
require 'rexml/document'
\r
require 'thwait'
\r
\r
require 'rexml/document'
\r
require 'thwait'
\r
@@
-10,10
+10,13
@@
require 'personne.rb'
require 'constantes.rb'
\r
require 'iconv'
\r
\r
require 'constantes.rb'
\r
require 'iconv'
\r
\r
+# Représente un ensemble de films.
\r
class Films
\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
@@
-26,18
+29,27
@@
class Films
# 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
@filmsPlusieursReponses = []
\r
\r
- # Les films qui
ont plusieurs réponses lors de la
recherche, traité à la fin
\r
+ # Les films qui
n'ont aucune réponse après une
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
@filmsAucuneReponse = []
\r
\r
# permet de traiter facilement des groupes de thread
\r
@threadsWait = ThreadsWait::new
\r
@nbConn = 0 # le nombre de connexion
\r
\r
+ @mutexAjout = Mutex::new # mutex pour protéger l'ajout
\r
+ @mutexId = Mutex::new # mutex pour protéger la génération d'id
\r
+
\r
# le prochain id disponible
\r
@idDisponible = 1
\r
\r
chargerFilms
\r
end
\r
# le prochain id disponible
\r
@idDisponible = 1
\r
\r
chargerFilms
\r
end
\r
+
\r
+ def each
\r
+ @films.each{|t,f|
\r
+ yield f
\r
+ }
\r
+ end
\r
\r
# Lit un repertoire de manière recursive et va chercher les informations concernant le film sur le net
\r
def pomper(r)
\r
\r
# Lit un repertoire de manière recursive et va chercher les informations concernant le film sur le net
\r
def pomper(r)
\r
@@
-69,6
+81,7
@@
class Films
i += 1
\r
}
\r
\r
i += 1
\r
}
\r
\r
+ # traite les films qui n'avaient aucune réponse
\r
i = 1
\r
@filmsAucuneReponse.each{|f|
\r
puts
\r
i = 1
\r
@filmsAucuneReponse.each{|f|
\r
puts
\r
@@
-82,9
+95,22
@@
class Films
i += 1
\r
}
\r
\r
i += 1
\r
}
\r
\r
+ # annonce à chaque module d'importation que c'est fini
\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
+ # Mise à jour des films dans la BD.
\r
+ # p1 string : un motif Regex correspondant à un ou plusieurs champs
\r
+ def update(champ)
\r
+ @films.each{|t, f|
\r
+ f.update(champ)
\r
+ }
\r
+ end
\r
+
\r
# Sauve les films dans un fichier XML
\r
def sauverFilms
\r
# le document
\r
# Sauve les films dans un fichier XML
\r
def sauverFilms
\r
# le document
\r
@@
-111,16
+137,16
@@
class Films
\r
# Charge les films depuis le fichier XML
\r
def chargerFilms
\r
\r
# Charge les films depuis le fichier XML
\r
def chargerFilms
\r
- # si le fichier n'existe pas il n'y a rien
à
charger
\r
+ # si le fichier n'existe pas il n'y a rien
à
charger
\r
if !File.exists?(@xmlFile)
\r
return
\r
end
\r
if !File.exists?(@xmlFile)
\r
return
\r
end
\r
-
\r
+
\r
racine = REXML::Document::new(File::new(@xmlFile)).root
\r
racine.each_element{|e|
\r
id = e.attribute('id').to_s.to_i
\r
\r
racine = REXML::Document::new(File::new(@xmlFile)).root
\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
@@
-138,7
+164,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
@@
-153,6
+179,9
@@
class Films
acteurs.each{|e|
\r
film.acteurs << Personne::ajouter(e.get_text.value)
\r
}
\r
acteurs.each{|e|
\r
film.acteurs << Personne::ajouter(e.get_text.value)
\r
}
\r
+ realisateurs.each{|e|
\r
+ film.realisateurs << Personne::ajouter(e.get_text.value)
\r
+ }
\r
pays.each{|e|
\r
film.pays << Pays::ajouter(e.get_text.value)
\r
}
\r
pays.each{|e|
\r
film.pays << Pays::ajouter(e.get_text.value)
\r
}
\r
@@
-181,7
+210,7
@@
class Films
return id
\r
end
\r
\r
return id
\r
end
\r
\r
- # Ajoute un film
\r
+ # Ajoute un film
à l'ensemble des films.
\r
def ajouterFilm(film)
\r
if film.plusieursReponses?
\r
@filmsPlusieursReponses << film
\r
def ajouterFilm(film)
\r
if film.plusieursReponses?
\r
@filmsPlusieursReponses << film
\r
@@
-194,22
+223,21
@@
class Films
end
\r
\r
if @films.has_key?(film.titre)
\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 !@filmsFichier.has_key?(film.fichiers[0])
\r
- puts "[i]
movie #{film.titre} has a another file part
: #{film.fichiers[0]}"
\r
+ puts "[i]
Le film #{film.titre} possède une autre partie
: #{film.fichiers[0]}"
\r
@films[film.titre].addFichier(film.fichiers[0])
\r
@filmsFichier[film.fichiers[0]] = @films[film.titre]
\r
else
\r
@films[film.titre].addFichier(film.fichiers[0])
\r
@filmsFichier[film.fichiers[0]] = @films[film.titre]
\r
else
\r
- puts "[!]
Duplicate movie
: #{film.titre} (#{film.fichiers[0]})"
\r
+ puts "[!]
Film déjà dans la BD
: #{film.titre} (#{film.fichiers[0]})"
\r
end
\r
else
\r
end
\r
else
\r
- puts "[i]
movie added
: #{film.titre} (#{film.fichiers[0]})"
\r
+ puts "[i]
Film ajouté
: #{film.titre} (#{film.fichiers[0]})"
\r
@films[film.titre] = film
\r
@filmsFichier[film.fichiers[0]] = film
\r
end
\r
end
\r
\r
@films[film.titre] = film
\r
@filmsFichier[film.fichiers[0]] = film
\r
end
\r
end
\r
\r
- # Appelé par 'pomper'. Cette méthode
est récursiv
e.
\r
+ # Appelé par 'pomper'. Cette méthode
itère récursivement sur l'arborescence d'un repertoir
e.
\r
def pomperR(r)
\r
Dir::foreach(r){|f|
\r
next if f[0,1] == '.'
\r
def pomperR(r)
\r
Dir::foreach(r){|f|
\r
next if f[0,1] == '.'
\r
@@
-218,21
+246,20
@@
class Films
pomperR(fichier)
\r
else
\r
\r
pomperR(fichier)
\r
else
\r
\r
+ #CGI::escapeHTML(
\r
+ fichier = Iconv.iconv("UTF-8", "ISO-8859-1", fichier)[0]
\r
+
\r
# véfication de l'extension
\r
/^.*?\.([^.]{3,4})$/ =~ fichier
\r
if !FILMS_EXTENSIONS.include?($1)
\r
next
\r
end
\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(Iconv.iconv("UTF-8", "ISO-8859-1", fichier)[0])
\r
-
\r
+
\r
# on skip si le film est déjà dans la BD
\r
if film = @filmsFichier[fichier]
\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
+ puts "[
!] Film déjà dans la BD : #{film.titre} (#{film.fichiers[0]
})"
\r
next
\r
end
\r
next
\r
end
\r
-
\r
- film = nil
\r
\r
# pour limiter le nombre de connexion simultanée
\r
if @nbConn >= NB_CONN_MAX
\r
\r
# pour limiter le nombre de connexion simultanée
\r
if @nbConn >= NB_CONN_MAX
\r
@@
-241,14
+268,17
@@
class Films
\r
@nbConn += 1
\r
@threadsWait.join_nowait(
\r
\r
@nbConn += 1
\r
@threadsWait.join_nowait(
\r
- Thread::
new
{
\r
+ Thread::
start
{
\r
begin
\r
begin
\r
- film = Film::new(fichier).loadData
\r
- film.id = getNewId # on lui donne un nouvel ID
\r
+ film = Film::new(fichier, @modClasse::new)
\r
+ @mutexId.synchronize {
\r
+ film.id = getNewId # on lui donne un nouvel ID
\r
+ }
\r
+ film.loadData # on charge ses données
\r
\r
\r
- unless film.nil? # le film a été correctement construit
\r
+ @mutexAjout.synchronize {
\r
ajouterFilm(film)
\r
ajouterFilm(film)
\r
- end
\r
+ }
\r
rescue Exception => e
\r
puts e.message
\r
puts e.backtrace
\r
rescue Exception => e
\r
puts e.message
\r
puts e.backtrace
\r