diff options
author | Victor Dubiniuk <victor.dubiniuk@gmail.com> | 2015-09-23 19:00:15 +0300 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-09-28 11:46:53 +0200 |
commit | e3b95e8473679c2f65abc84c07d121ea66059aee (patch) | |
tree | 49a7223d921eda7947c1df1e37f67469efa8419e /lib/private/streamer.php | |
parent | fe32beb85d11e7a02e336f0f686f09fe4fe5bacd (diff) | |
download | nextcloud-server-e3b95e8473679c2f65abc84c07d121ea66059aee.tar.gz nextcloud-server-e3b95e8473679c2f65abc84c07d121ea66059aee.zip |
Introduce streamer
Diffstat (limited to 'lib/private/streamer.php')
-rw-r--r-- | lib/private/streamer.php | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/lib/private/streamer.php b/lib/private/streamer.php new file mode 100644 index 00000000000..7377f31f37b --- /dev/null +++ b/lib/private/streamer.php @@ -0,0 +1,87 @@ +<?php +/** + * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +use \ZipStreamer\ZipStreamer; +use DeepDiver1975\TarStreamer\TarStreamer; + +class OC_Streamer { + + private $streamerInstance; + private $extension; + + public function __construct(){ + if (0) { + $this->streamerInstance = new ZipStreamer(); + } else { + $this->streamerInstance = new TarStreamer(); + } + } + + public function sendHeaders($name){ + $extension = $this->streamerInstance instanceof ZipStreamer ? '.zip' : '.tar'; + return $this->streamerInstance->sendHeaders($name . $extension); + } + + /** + * @param string $dir + * @param string $internalDir + */ + public function addDirRecoursive($dir, $internalDir='') { + $dirname = basename($dir); + $rootDir = $internalDir . $dirname; + if (!empty($rootDir)) { + $this->streamerInstance->addEmptyDir($rootDir); + } + $internalDir.= $dirname .= '/'; + // prevent absolute dirs + $internalDir = ltrim($internalDir, '/'); + + $files= \OC\Files\Filesystem::getDirectoryContent($dir); + foreach($files as $file) { + $filename = $file['name']; + $file = $dir . '/' . $filename; + if(\OC\Files\Filesystem::is_file($file)) { + $filesize = \OC\Files\Filesystem::filesize($file); + $fh = \OC\Files\Filesystem::fopen($file, 'r'); + $this->streamerInstance->addFileFromStream($fh, $internalDir . $filename, $filesize); + fclose($fh); + }elseif(\OC\Files\Filesystem::is_dir($file)) { + $this->addDirRecoursive($file, $internalDir); + } + } + } + + public function addFileFromStream($fd, $internalName, $size){ + if ($this->streamerInstance instanceof ZipStreamer) { + return $this->streamerInstance->addFileFromStream($fd, $internalName); + } else { + return $this->streamerInstance->addFileFromStream($fd, $internalName, $size); + } + } + + public function addEmptyDir($dirName){ + return $this->streamerInstance->addEmptyDir($dirName); + } + + public function finalize(){ + return $this->streamerInstance->finalize(); + } +} |