]> granicus.if.org Git - php/commitdiff
* use PEAR_Common::downloadHttp()
authorStig Bakken <ssb@php.net>
Tue, 23 Apr 2002 07:01:45 +0000 (07:01 +0000)
committerStig Bakken <ssb@php.net>
Tue, 23 Apr 2002 07:01:45 +0000 (07:01 +0000)
pear/PEAR/Command/Remote.php

index 1b2de8942d56182d975a073177d8fd7d5a69e087..87f73c38464a354aa769fc2733286e77379989e5 100644 (file)
@@ -20,6 +20,7 @@
 // $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
@@ -75,61 +76,47 @@ 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])) {
@@ -179,6 +166,8 @@ class PEAR_Command_Remote extends PEAR_Command_Common
                 $this->ui->endTable();
                 break;
             }
+
+            // }}}
             default: {
                 return false;
             }
@@ -191,7 +180,12 @@ class PEAR_Command_Remote extends PEAR_Command_Common
 
     // }}}
 
-
+    function downloadCallback($msg, $params = null)
+    {
+        if ($msg == 'done') {
+            $this->bytes_downloaded = $params;
+        }
+    }
 }
 
 ?>
\ No newline at end of file