// $Id$
require_once 'PEAR/Command/Common.php';
+require_once 'PEAR/Common.php';
require_once 'PEAR/Remote.php';
class PEAR_Command_Remote extends PEAR_Command_Common
$failmsg = '';
$remote = &new PEAR_Remote($this->config);
switch ($command) {
+ // {{{ remote-package-info
+
case 'remote-package-info': {
break;
}
+
+ // }}}
+ // {{{ list-remote-packages
+
case 'list-remote-packages': {
break;
}
+
+ // }}}
+ // {{{ download
+
case 'download': {
//$params[0] -> The package to download
if (count($params) != 1) {
return PEAR::raiseError("download expects one argument: the package to download");
}
+ $server = $this->config->get('master_server');
if (!ereg('^http://', $params[0])) {
- $pkgfile = "http://" . $this->config->get('master_server') .
- "/get/" . $params[0];
+ $pkgfile = "http://$server/get/$params[0]";
} else {
$pkgfile = $params[0];
}
- if (!extension_loaded("zlib")) {
- $pkgfile .= '?uncompress=yes';
- }
- if (!@include_once 'HTTP.php') {
- return $this->raiseError('The "download" command needs HTTP.php to be installed');
- }
- $headers = HTTP::head($pkgfile);
- if (PEAR::isError($headers)) {
- $msg = $headers->getMessage();
- return $this->raiseError("Could not retrieve remote file information ($msg)");
- }
- if (isset($headers['Content-disposition'])) {
- preg_match('|filename="(.*)"$|', $headers['Content-disposition'], $matches);
- $fname = $matches[1];
- } else {
- $fname = basename($pkgfile);
- }
- if (!$wp = @fopen($pkgfile, 'wb')) {
- $failmsg = "Could not download $pkgfile"; break;
+ $this->bytes_downloaded = 0;
+ $saved = PEAR_Common::downloadHttp($pkgfile, $this->ui, $this->config, '.',
+ array(&$this, 'downloadCallback'));
+ if (PEAR::isError($saved)) {
+ return $this->raiseError($saved);
}
- if (!$fp = @fopen($fname, 'wb')) {
- $failmsg = "Could not write the file here"; break;
- }
- $bytes = 0;
- $this->ui->displayLine("Downloading $pkgfile:");
- while ($data = @fread($wp, 16384)) {
- $bytes += strlen($data);
- if (!@fwrite($fp, $data)) {
- return $this->raiseError("$pkgfile: write failed ($php_errormsg)");
- }
- $this->ui->display('...');
- }
- $this->ui->display(" done!\n");
- fclose($fp);
- fclose($wp);
- $this->ui->displayLine("File $fname downloaded ($bytes bytes)");
+ $fname = basename($saved);
+ $this->ui->displayLine("File $fname downloaded ($this->bytes_downloaded bytes)");
break;
}
+
+ // }}}
+ // {{{ list-upgrades
+
case 'list-upgrades': {
include_once "PEAR/Registry.php";
if (empty($params[0])) {
$this->ui->endTable();
break;
}
+
+ // }}}
default: {
return false;
}
// }}}
-
+ function downloadCallback($msg, $params = null)
+ {
+ if ($msg == 'done') {
+ $this->bytes_downloaded = $params;
+ }
+ }
}
?>
\ No newline at end of file