From: Olivier Paroz Date: Fri, 21 Nov 2014 16:12:11 +0000 (+0100) Subject: The class name is Movie NOT Movies X-Git-Tag: v7.0.6RC1~29^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=45ad072c62d71cef02c0a3dff5a4dc778552d909;p=nextcloud-server.git The class name is Movie NOT Movies Conflicts: config/config.sample.php lib/private/preview.php --- diff --git a/config/config.sample.php b/config/config.sample.php index f775b3b99bb..3ddf0a6cab6 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -640,7 +640,7 @@ $CONFIG = array( * The following providers are disabled by default due to performance or privacy * concerns: * - * - OC\Preview\Movies + * - OC\Preview\Movie * - OC\Preview\MSOffice2003 * - OC\Preview\MSOffice2007 * - OC\Preview\MSOfficeDoc diff --git a/lib/private/preview.php b/lib/private/preview.php index a0f2e81528f..0cb35c46429 100644 --- a/lib/private/preview.php +++ b/lib/private/preview.php @@ -16,7 +16,7 @@ namespace OC; use OC\Preview\Provider; require_once 'preview/image.php'; -require_once 'preview/movies.php'; +require_once 'preview/movie.php'; require_once 'preview/mp3.php'; require_once 'preview/pdf.php'; require_once 'preview/svg.php'; @@ -707,7 +707,7 @@ class Preview { * - OC\Preview\OpenDocument * - OC\Preview\StarOffice * - OC\Preview\SVG - * - OC\Preview\Movies + * - OC\Preview\Movie * - OC\Preview\PDF */ if(empty(self::$enabledProviders)) { diff --git a/lib/private/preview/movie.php b/lib/private/preview/movie.php new file mode 100644 index 00000000000..2a23c2141c1 --- /dev/null +++ b/lib/private/preview/movie.php @@ -0,0 +1,122 @@ + /dev/null', $output, $returnCode); + if ($returnCode === 0 && count($output) > 0) { + return escapeshellcmd($output[0]); + } + return null; +} + +// movie preview is currently not supported on Windows +if (!\OC_Util::runningOnWindows()) { + $isExecEnabled = \OC_Helper::is_function_enabled('exec'); + $ffmpegBinary = null; + $avconvBinary = null; + + if ($isExecEnabled) { + $avconvBinary = findBinaryPath('avconv'); + if (!$avconvBinary) { + $ffmpegBinary = findBinaryPath('ffmpeg'); + } + } + + if($isExecEnabled && ( $avconvBinary || $ffmpegBinary )) { + + class Movie extends Provider { + public static $avconvBinary; + public static $ffmpegBinary; + + public function getMimeType() { + return '/video\/.*/'; + } + + public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) { + // TODO: use proc_open() and stream the source file ? + + $fileInfo = $fileview->getFileInfo($path); + $useFileDirectly = (!$fileInfo->isEncrypted() && !$fileInfo->isMounted()); + + if ($useFileDirectly) { + $absPath = $fileview->getLocalFile($path); + } else { + $absPath = \OC_Helper::tmpFile(); + + $handle = $fileview->fopen($path, 'rb'); + + // we better use 5MB (1024 * 1024 * 5 = 5242880) instead of 1MB. + // in some cases 1MB was no enough to generate thumbnail + $firstmb = stream_get_contents($handle, 5242880); + file_put_contents($absPath, $firstmb); + } + + $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5); + if ($result === false) { + $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1); + if ($result === false) { + $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0); + } + } + + if (!$useFileDirectly) { + unlink($absPath); + } + + return $result; + } + + /** + * @param int $maxX + * @param int $maxY + * @param string $absPath + * @param string $tmpPath + * @param int $second + * @return bool|\OC_Image + */ + private function generateThumbNail($maxX, $maxY, $absPath, $second) + { + $tmpPath = \OC_Helper::tmpFile(); + + if (self::$avconvBinary) { + $cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) . + ' -i ' . escapeshellarg($absPath) . + ' -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) . + ' > /dev/null 2>&1'; + } else { + $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) . + ' -i ' . escapeshellarg($absPath) . + ' -f mjpeg -vframes 1' . + ' -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) . + ' ' . escapeshellarg($tmpPath) . + ' > /dev/null 2>&1'; + } + + exec($cmd, $output, $returnCode); + + if ($returnCode === 0) { + $image = new \OC_Image(); + $image->loadFromFile($tmpPath); + unlink($tmpPath); + return $image->valid() ? $image : false; + } + unlink($tmpPath); + return false; + } + } + + // a bit hacky but didn't want to use subclasses + Movie::$avconvBinary = $avconvBinary; + Movie::$ffmpegBinary = $ffmpegBinary; + + \OC\Preview::registerProvider('OC\Preview\Movie'); + } +} + diff --git a/lib/private/preview/movies.php b/lib/private/preview/movies.php deleted file mode 100644 index 2a23c2141c1..00000000000 --- a/lib/private/preview/movies.php +++ /dev/null @@ -1,122 +0,0 @@ - /dev/null', $output, $returnCode); - if ($returnCode === 0 && count($output) > 0) { - return escapeshellcmd($output[0]); - } - return null; -} - -// movie preview is currently not supported on Windows -if (!\OC_Util::runningOnWindows()) { - $isExecEnabled = \OC_Helper::is_function_enabled('exec'); - $ffmpegBinary = null; - $avconvBinary = null; - - if ($isExecEnabled) { - $avconvBinary = findBinaryPath('avconv'); - if (!$avconvBinary) { - $ffmpegBinary = findBinaryPath('ffmpeg'); - } - } - - if($isExecEnabled && ( $avconvBinary || $ffmpegBinary )) { - - class Movie extends Provider { - public static $avconvBinary; - public static $ffmpegBinary; - - public function getMimeType() { - return '/video\/.*/'; - } - - public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) { - // TODO: use proc_open() and stream the source file ? - - $fileInfo = $fileview->getFileInfo($path); - $useFileDirectly = (!$fileInfo->isEncrypted() && !$fileInfo->isMounted()); - - if ($useFileDirectly) { - $absPath = $fileview->getLocalFile($path); - } else { - $absPath = \OC_Helper::tmpFile(); - - $handle = $fileview->fopen($path, 'rb'); - - // we better use 5MB (1024 * 1024 * 5 = 5242880) instead of 1MB. - // in some cases 1MB was no enough to generate thumbnail - $firstmb = stream_get_contents($handle, 5242880); - file_put_contents($absPath, $firstmb); - } - - $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5); - if ($result === false) { - $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1); - if ($result === false) { - $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0); - } - } - - if (!$useFileDirectly) { - unlink($absPath); - } - - return $result; - } - - /** - * @param int $maxX - * @param int $maxY - * @param string $absPath - * @param string $tmpPath - * @param int $second - * @return bool|\OC_Image - */ - private function generateThumbNail($maxX, $maxY, $absPath, $second) - { - $tmpPath = \OC_Helper::tmpFile(); - - if (self::$avconvBinary) { - $cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) . - ' -i ' . escapeshellarg($absPath) . - ' -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) . - ' > /dev/null 2>&1'; - } else { - $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) . - ' -i ' . escapeshellarg($absPath) . - ' -f mjpeg -vframes 1' . - ' -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) . - ' ' . escapeshellarg($tmpPath) . - ' > /dev/null 2>&1'; - } - - exec($cmd, $output, $returnCode); - - if ($returnCode === 0) { - $image = new \OC_Image(); - $image->loadFromFile($tmpPath); - unlink($tmpPath); - return $image->valid() ? $image : false; - } - unlink($tmpPath); - return false; - } - } - - // a bit hacky but didn't want to use subclasses - Movie::$avconvBinary = $avconvBinary; - Movie::$ffmpegBinary = $ffmpegBinary; - - \OC\Preview::registerProvider('OC\Preview\Movie'); - } -} -