View Single Post
Old 09-11-2009, 14:39   #10
flx2000
Bannato
 
L'Avatar di flx2000
 
Iscritto dal: Nov 2002
Città: Roma
Messaggi: 810
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);

?>

Ultima modifica di flx2000 : 09-11-2009 alle 14:44.
flx2000 è offline   Rispondi citando il messaggio o parte di esso