#!/usr/bin/ruby # divxtitler version 0.2 jeudi 24 novembre 2005 #nous allons procéder comme ça: # 1°/ le script demande d'insérer les cd pour récupérer les titres # a) on ejecte le tray et on demande d'insérer un cd # b) on extrait le nom des divix # c) on demande si les noms sont bien ceux désirés # d) on fait la meme chose pour un second cd # 2°/ il écrit ces noms dans le fichier .svg # a) on demande le chemin du fichier model # b) on demande le chemin du fichier de destination # c) on crée le fichier modifié à partir du fichier model #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ #initialisation require 'gtk2' $home = `echo $HOME`.chomp #marque ici les chemins du fichier cible et celui du model #creation du répertoire de l'application s'il n'exite pas Dir.mkdir( $home + '/.covertitler' ) if File.directory?( $home + '/.covertitler' ) == false Dir.mkdir( $home + '/.covertitler/models' ) if File.directory?( $home + '/.covertitler/models' ) == false if File.exist?( $home + '/.covertitler/.cvtitl.conf' ) == false f_conf = File.new( $home + '/.covertitler'+ '/.cvtitl.conf', 'w' ) f_conf.puts( "#{$home}/.covertitler/models/templates_divx.svg" ) f_conf.puts( "#{$home}/.covertitler/covertitler.svg" ) f_conf.close end #récupération des données conf = IO.readlines( $home + '/.covertitler/.cvtitl.conf' ) $fichier_model = conf[ 0 ] $fichier_dest = conf[ 1 ] $chemin_cd = "/mnt/cdrom" #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ #classes, méthodes, fonctions #------------------------------------------------------------------------------------------------------------------------------------------------------------------ #classe cd_divix qui contient le titre des divix et les méthodes d'extraction class Cd_divix #------------------------------------------------------------------------------------------------------------- #extraction des données def initialize( num_cd) @num_cd = num_cd @titres = Array.new( 6 ) if @num_cd == 1 @position = [ 1433, 1437, 1441, 1445, 1449, 1453 ] else @position = [ 2340, 2344, 2348, 2352, 2356, 2360 ] end `eject /dev/hdc` #on demande d'insérer un cd Gtk.init window = Gtk::Window.new window.border_width = 25 window.signal_connect( 'delete_event' ) { exit } vbox1 = Gtk::VBox.new( true, 0 ) window.add( vbox1 ) text = Gtk::Label.new( "veuillez inserer le cd #{@num_cd}" ) vbox1.pack_start( text, false, false, 0 ) bouton1 = Gtk::Button.new( "ok" ) bouton1.signal_connect( 'clicked' ) { window.destroy; Gtk.main_quit } vbox1.pack_start( bouton1, true, true, 10 ) window.show_all Gtk.main `eject -t /dev/hdc` #vérification de la présence des divix nombre_divix = 0 Dir.foreach( $chemin_cd ) { |fichier| fichier = fichier.downcase if fichier.match( 'avi' ) != nil @titres[ nombre_divix ] = fichier nombre_divix += 1 end } @titres = @titres.sort if nombre_divix != 6 puts "Il n'y a pas 6 et/ou juste 6 divix sur ce cd" exit end end #------------------------------------------------------------------------------------------------------------- # GUI qui demande de vérifier si les titres sont bien ceux désirés def confirmer_titres Gtk.init #fenetre principale window = Gtk::Window.new window.border_width = 20 window.signal_connect( 'delete_event' ) { exit } #packs vbox1 = Gtk::VBox.new( false, 12 ) window.add( vbox1 ) #label de consignes consigne = Gtk::Label.new( "les titres seront les suivants:" ) vbox1.pack_start( consigne, false, false, 0 ) #table contenant les titres table1 = Gtk::Table.new( 6, 2, false ) table1.set_row_spacings( 8 ) table1.set_column_spacings( 10 ) vbox1.pack_start( table1, false, false, 0 ) label_titres = Array.new @entry_titres = Array.new 0.upto( 5 ) { |i| label_titres[ i ] = Gtk::Label.new( "titre #{i+1}" ) table1.attach_defaults( label_titres[ i ], 0, 1, i, i + 1 ) @entry_titres[ i ] = Gtk::Entry.new @entry_titres[ i ].set_editable( true ) @entry_titres[ i ].set_text( @titres[ i ] ) table1.attach_defaults( @entry_titres[ i ], 1, 2, i, i+1 ) } #boutons ok et annuler hbox1 = Gtk::HBox.new( true, 8 ) vbox1.pack_start( hbox1, false, false, 0 ) bouton_ok = Gtk::Button.new( 'ok' ) bouton_ok.signal_connect( 'clicked' ) { 0.upto( 5 ) { |i| @titres[ i ] = @entry_titres[ i ].get_chars( 0, -1 ) puts @entry_titres[ i ] } window.destroy Gtk.main_quit } hbox1.pack_end( bouton_ok, true, true, 0 ) bouton_annuler = Gtk::Button.new( 'annuler' ) bouton_annuler.signal_connect( 'clicked' ) { exit } hbox1.pack_end( bouton_annuler, true, true, 0 ) window.show_all Gtk.main end #------------------------------------------------------------------------------------------------------------- #modification des lignes def remplacer_lignes 0.upto( 5 ) { |i| coord_y = $lignes[ @position[ i ] ].split( '>' ) $lignes[ @position[ i ] ] = coord_y[ 0 ] + ">" + @titres[ i ] + "" + @titres[ i ] + "" if i == 5 && @num_cd == 1 } end end #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ # séquence principale #------------------------------------------------------------------------------------------------------------- #on demande le fichier modèle et le fichier cible $rep_model = $fichier_model.split( '/' ) $rep_model.pop $rep_model.each_index {|i| $rep_model[ i ] = '/' + $rep_model[ i ] } $rep_model = $rep_model.to_s $rep_dest = $fichier_dest.split( '/' ) $rep_dest.pop $rep_dest.each_index {|i| $rep_dest[ i ] = '/' + $rep_dest[ i ] } $rep_dest = $rep_dest.to_s Gtk.init window = Gtk::Window.new window.border_width = 25 window.signal_connect( 'delete_event' ) { exit } vbox1 = Gtk::VBox.new( false, 10 ) window.add( vbox1 ) text1 = Gtk::Label.new( "choisissez vos fichiers") vbox1.pack_start( text1, false, false, 0 ) text2 = Gtk::Label.new( "modele:") vbox1.pack_start( text2, false, false, 0 ) bouton1 = Gtk::FileChooserButton.new( "choisis un fichier", Gtk::FileChooser::ACTION_OPEN ) bouton1.current_folder = $rep_model vbox1.pack_start( bouton1, false, false, 0 ) text3 = Gtk::Label.new( "fichier cible:") vbox1.pack_start( text3, false, false, 0 ) bouton2 = Gtk::FileChooserButton.new( "choisis un fichier", Gtk::FileChooser::ACTION_OPEN ) bouton2.current_folder = $rep_dest vbox1.pack_start( bouton2, false, false, 0 ) bouton3 = Gtk::Button.new( 'ok' ) bouton3.signal_connect( 'clicked' ) { $fichier_model = bouton1.filename $fichier_dest = bouton2.filename window.destroy Gtk.main_quit } vbox1.pack_start( bouton3, false, false, 0 ) window.show_all Gtk.main #modification du fichier de conf f_conf = File.new( $home + '/.covertitler'+ '/.cvtitl.conf', 'w' ) f_conf.puts( $fichier_model ) f_conf.puts( $fichier_dest ) f_conf.close #récupération du code du fichier modèle $lignes = IO.readlines( $fichier_model ) #------------------------------------------------------------------------------------------------------------- # on extrait les titres des dvd 1.upto( 2 ) { |i| dvd = Cd_divix.new( i ) dvd.confirmer_titres dvd.remplacer_lignes } #------------------------------------------------------------------------------------------------------------- #on écrit les titres dans le fichier .svg fichier_nouveau = File.new( $fichier_dest, "w" ) fichier_nouveau.puts( $lignes ) fichier_nouveau.close #------------------------------------------------------------------------------------------------------------- #on propose à l'utilisateur de visionner le résultat Gtk.init window = Gtk::Window.new window.border_width = 25 window.signal_connect( 'delete_event' ) { exit } vbox1 = Gtk::VBox.new( false, 18 ) window.add( vbox1 ) text = Gtk::Label.new( "Felicitation\n\nLes changements ont ete effectue avec succes.\n\nVoulez-vous voir le resultat avec inkscape\nou fermer l'application?" ) vbox1.pack_start( text, false, false, 0 ) hbox1 = Gtk::HBox.new( true, 8 ) vbox1.pack_start( hbox1, false, false, 0 ) bouton1 = Gtk::Button.new( "lancer inkscape" ) bouton1.signal_connect( 'clicked' ) { window.destroy; Gtk.main_quit } hbox1.pack_end( bouton1, true, true, 0 ) bouton2 = Gtk::Button.new( "terminer" ) bouton2.signal_connect( 'clicked' ) { exit } hbox1.pack_end( bouton2, true, true, 0 ) window.show_all Gtk.main `inkscape #{$fichier_dest}`