All pastes #31759 Raw Edit

Stuff

public ruby v1 · immutable
#31759 ·published 2005-11-30 01:40 UTC
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}`