Un paio di anni fa ho creato una coppia di script PHP che usano l'applicazione zenity per aggiungere una progress-bar alle operazioni con i file .RAR su GNOME (ad esempio Ubuntu).
Per utilizzare gli script basta aggiungere il primo alle azioni di Nautilus in "Sistema->Preferenze->Configurazione azioni di Nautilus" in modo che lo script sia richiamabile cliccando col tasto destro del mouse su un file o su una directory, e mettere il secondo in una qualsiasi directory nel PATH.
rarmax-action.php :
Codice:
#!/usr/local/bin/php
<?PHP
/**
* rarmax-action v1.0
* by Fabio "FLX" Addari
*
* Script che dà un apporto grafico alla compressione dei file rar
*
**/
if ( count($argv) < 4 )
{
$x=`zenity --warning --text="Nessun file selezionato" --title="rarmax: avviso"`;
exit;
}
$elems = array();
reset($argv);
list(,) = each($argv); // salta il nome dello script
list(,$dir) = each($argv);
list(,) = each($argv); // salta il primo file perché viene ripetuto
while ( list(,$elem) = each($argv) )
{
$elems[] = $elem;
}
$workdirfile = ( count($elems) == 1 ) ? $elems[0] : basename($dir);
$workdirfile .= ".rar";
while ( true )
{
$archivio = `zenity --entry --entry-text="{$workdirfile}" --text="Nome dell'archivio" --title="rarmax: archiv
io"`;
$archivio = trim($archivio);
if ( empty($archivio) )
{
exit;
}
elseif ( substr($archivio,0,1) != "." )
{
break;
}
$x = `zenity --warning --text="Nome del file non valido" --title="rarmax: avviso"`;
}
if ( strripos($archivio,".rar") !== (strlen($archivio) - 4) )
{
$archivio .= ".rar";
}
if ( file_exists("{$dir}/{$archivio}") )
{
$x = `zenity --question --title="rarmax: avviso" --text="Sovrascrivere {$archivio}?" && echo s`;
if ( strpos($x,"s") === false )
{
$x = `zenity --info --text="Operazione annullata" --title="rarmax: avviso"`;
exit;
}
}
$tmpfile = tempnam("/tmp","~rarmax-");
$tmp = fopen($tmpfile,"w");
foreach ( $elems as $elem )
{
fputs($tmp,"\"{$elem}\"\n");
}
fclose($tmp);
$x = `cd "$dir";rar a -m5 -md4096 -r -s "{$archivio}" @{$tmpfile} | rarmax-parse.php | zenity --progress --percentage
=0 --text="Compressione di {$archivio} in corso..." --title="rarmax: compressione" --auto-close`;
unlink($tmpfile);
?>
rarmax-parse.php :
Codice:
#!/usr/local/bin/php
<?PHP
/**
* rarmax-parse.php
*
* Versione 1.0 by Fabio "FLX" Addari
*
* Questo script riceve in ingresso l'output del comando rar e pone in
* uscita la percentuale di completamento, da 0 a 100.
**/
$input = fopen("php://stdin","r");
$output = fopen("php://stdout","w");
$x = "";
$waiting = false;
$prec = 0;
while ( !feof($input) )
{
$c = fgets($input,8);
$x .= $c;
if ( strpos($c,chr(8)) !== false )
{
//fputs($output,"Letto: '{$x}'\n");
$put = preg_replace("/[^0-9]/","",$x);
if ( $put > 100 )
{
$put = 0;
}
if ( $waiting )
{
if ( $prec > 0 )
{
$put = $prec.$put;
}
$waiting = false;
}
elseif ( $put > 0 && $put < $prec )
{
$waiting = true;
$prec = $put;
$x = "";
continue;
}
if ( !empty($put) )
{
fputs($output,"{$put}\n");
}
$x = "";
$prec = $put;
}
}
fclose($output);
fclose($input);
?>