Bonjour,
Voici une version pour Evolution.
J'ai corrigé en passant une "erreur" de syntaxe (un warning) pour le calcul de la taille du fichier.
#!/usr/bin/perl -w
use Gtk2 '-init';
# ---------------------------PLEASE EDIT CORRECTLY THIS PART----------------------------------
# Locale used by application : can be actually set to 'en' or 'fr' pour les français
$lang='fr';
# Thunderbird command : can be "thunderbird" or "mozilla-thunderbird"
# Depending of your distribution the filename in /usr/bin change
$evolution='evolution';
# Set the default quality (0-100) of rescaled pictures
$quality=80;
# --------------------------------------------------------------------------------------------
# Vérification de la présence des dépendances
eval "use Image::Imlib2"; &warn_msg("libimage-imlib2-perl") if $@;
use constant TRUE => 1 ;
use constant FALSE => 0 ;
# Variables internes
$imgfnd = FALSE;
$othfnd = FALSE;
$canresize = FALSE;
$datasize = 0;
$evobin="/usr/bin/$evolution";
# Fix lang used by application
&set_lang;
# On recupere les fichiers en argument si ils existent
if (@ARGV) {
for ($i=0; $i<@ARGV; $i++) {
$filesarg[$i] = $ARGV[$i];
@filename = split ("/", $ARGV[$i]);
$file[$i] = $filename[@filename-1];
$datasize = (`ls -s "$filesarg[$i]" | awk '{print \$1}'` + $datasize); # Estimation de la taille totale
}
}
else {
&warn_msg("nofiles");
}
# On détermine si ce sont que des images
for ($i=0; $i<@filesarg; $i++) {
$filetype = `file "$filesarg[$i]"`;
if ($filetype =~ m/image/g) {
$imgfnd = TRUE;
}
else {
$othfnd = TRUE;
}
}
$canresize = TRUE if ($imgfnd == TRUE && $othfnd == FALSE);
# On affiche la fenetre de Redimensionnement des images si necessaire
&draw_gtkwin if ($canresize == TRUE);
# On met en forme la liste pour thunderbird : file://<pathfile1>,file://<pathfile2>,file://<pathfile3>
$attach = "?attach=" . $filesarg[@filesarg-1];
for ($i=1; $i<@filesarg; $i++) {
$attach = $attach . "&attach=" . $filesarg[$i];
}
exec "$evobin \"mailto:$attach\"";
############################# FONCTIONS ################################
#Redimensionne les images
sub img_resize {
my ($widget,$button)=@_ ;
# On récupère la référence du groupe auquel appartient le bouton
my $group = $button->get_group() ;
my $label;
my $size =0;
# On parcours le tableau des boutons et on affiche le bouton qui est actif.
my $but ;
foreach $but (@$group) {
if ($but->get_active) {
# On récupère le label du bouton actif
$label = $but->get_label() ;
}
}
$size = 1024 if $label =~ m/1024/g;
$size = 800 if $label =~ m/800/g;
$size = 640 if $label =~ m/640/g;
if ($size ne 0) {
for ($i=0; $i<@filesarg; $i++) {
my $image=Image::Imlib2->load($filesarg[$i]);
my $sclimg=$image->create_scaled_image($size,0);
$sclimg->set_quality($quality);
$sclimg->image_set_format("jpeg");
$sclimg->save("$ENV{HOME}/.Trash/$file[$i]");
$filesarg[$i]="$ENV{HOME}/.Trash/$file[$i]";
}
}
Gtk2->main_quit;
}
# Creation de la fenetre gtk pour redimensionnemt
sub draw_gtkwin {
# Création de la fenêtre
my $confwin = Gtk2::Window->new('toplevel');
$confwin->signal_connect('delete_event', sub {$confwin->destroy();});
$confwin->set_title($msg{"WinName"});
$confwin->set_border_width(10);
$confwin->set_resizable(FALSE);
# Creation boite Verticale Principale
my $vbox = new Gtk2::VBox( FALSE, 5 );
$confwin->add( $vbox ) ;
# Boites horizontales Principales
my $hbox1 = new Gtk2::HBox( FALSE, 5 ); # HBOX1 - Label
$vbox->pack_start( $hbox1, FALSE, FALSE, 0 ) ;
my $hbox2 = new Gtk2::HBox( FALSE, 5 ); # HBOX2 - Radio btn
$vbox->pack_start( $hbox2, FALSE, FALSE, 0 ) ;
my $hbox3 = new Gtk2::HBox( FALSE, 5 ); # HBOX3 - Boutons
$vbox->pack_start( $hbox3, FALSE, FALSE, 0 ) ;
# Label de HBOX1
my $label = Gtk2::Label->new ();
$label->set_markup($msg{"WinText1"}."<b>$datasize Ko</b>.\n".$msg{"WinText2"} ) ;
$label->set_justify( 'left' );
$hbox1->add($label);
# Label de HBOX2
$label = Gtk2::Label->new ($msg{"ScaleType"} ) ;
$label->set_justify( 'left' );
$hbox2->add($label);
# Boite verticale et radio button
my $vboxbt = new Gtk2::VBox( FALSE, 5 );
$hbox2->add($vboxbt);
my $button1 = Gtk2::RadioButton->new( undef, $msg{"NoScale"} );
$vboxbt->add($button1);
my $group = $button1->get_group();
my $button2 = Gtk2::RadioButton->new_with_mnemonic( $group, $msg{"HighQ"} );
$vboxbt->add($button2);
my $button3 = Gtk2::RadioButton->new_with_mnemonic( $group, $msg{"MediumQ"} );
$vboxbt->add($button3);
my $button4 = Gtk2::RadioButton->new_with_mnemonic( $group, $msg{"LowQ"} );
$vboxbt->add($button4);
$cancel = Gtk2::Button->new_from_stock('gtk-cancel');
$cancel -> signal_connect ('clicked',sub {Gtk2->main_quit; exit 0});
$valid = Gtk2::Button->new_from_stock('gtk-apply');
$valid -> signal_connect ('clicked',\&img_resize,$button1);
$hbox3->add($cancel);
$hbox3->add($valid);
$confwin->show_all ;
Gtk2->main;
}
# Fenetre d'erreur si il manque une dependance
sub warn_msg {
my ($dep) = @_;
my $label;
if ($dep eq "nofiles") {
$label = $msg{"WarnFiles"};
}
else {
$label = $msg{"WarnDep"};
}
my $msgdiag = Gtk2::MessageDialog->new (undef,'destroy-with-parent','error','close',$label);
$msgdiag->show;
if ('close' eq $msgdiag->run) {
$msgdiag->destroy;
exit 1;
}
Gtk2->main;
}
# Fix lang used
sub set_lang {
if ($lang eq "fr") {
%msg = ("WinName" => "Envoi de fichiers par email",
"WinText1" => "Le(s) fichier(s) que vous voulez envoyer sont une (des) image(s).\n"
."La taille totale est de ",
"WinText2" => "Vous pouvez effectuer un redimensionnement pour que l'email soit moins volumineux.",
"ScateType" => "Type de redimensionnement :",
"NoScale" => "Aucun changement de taille",
"HighQ" => "Haute qualité : 1024 pixels de large",
"MediumQ" => "Moyenne qualité : 800 pixels de large",
"LowQ" => "Basse qualité : 640 pixels de large",
"WarnFiles" => "Vous devez sélectionner au moins un fichier à envoyer !",
"WarnDep" => "Un programme nécessaire au bon fonctionnement est manquant, merci d'installer ce package :");
}
elsif ($lang eq "en") {
%msg = ("WinName" => "Send files by email",
"WinText1" => "The file(s) you want to send is (are) pictures\n"
."Total size : ",
"WinText2" => "You can scale the picture(s) to reduce date size",
"ScateType" => "Scale type :",
"NoScale" => "Don't change anything",
"HighQ" => "High quality : 1024 pixels of height",
"MediumQ" => "Medium quality : 800 pixels of height",
"LowQ" => "Low quality : 640 pixels of height",
"WarnFiles" => "You have to select at least one file !",
"WarnDep" => "A package is missing, please install it :");
}
}