rendered paste body#!/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#------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#initialisationrequire '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 pasDir.mkdir( $home + '/.covertitler' ) if File.directory?( $home + '/.covertitler' ) == falseDir.mkdir( $home + '/.covertitler/models' ) if File.directory?( $home + '/.covertitler/models' ) == falseif 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.closeend#récupération des donnéesconf = 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'extractionclass 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 ] + "</tspan><tspan" $lignes[ @position[ i ] ] = coord_y[ 0 ] + ">" + @titres[ i ] + "</tspan></text>" if i == 5 && @num_cd == 1 } endend#------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------# 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_sGtk.initwindow = Gtk::Window.newwindow.border_width = 25window.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_modelvbox1.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_destvbox1.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_allGtk.main#modification du fichier de conff_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 dvd1.upto( 2 ) { |i| dvd = Cd_divix.new( i ) dvd.confirmer_titres dvd.remplacer_lignes} #-------------------------------------------------------------------------------------------------------------#on écrit les titres dans le fichier .svgfichier_nouveau = File.new( $fichier_dest, "w" ) fichier_nouveau.puts( $lignes )fichier_nouveau.close#-------------------------------------------------------------------------------------------------------------#on propose à l'utilisateur de visionner le résultatGtk.initwindow = Gtk::Window.newwindow.border_width = 25window.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_allGtk.main`inkscape #{$fichier_dest}`