diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2011-12-03 13:29:22 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2011-12-03 13:29:22 +0100 |
commit | ca32f08966f1b51fcb19460f0996bb0c4048e6fe (patch) | |
tree | ec04cc15b867bc21eedca904cea9af0254531a11 /includes/media/GIF.php | |
parent | a22fbfc60f36f5f7ee10d5ae6fe347340c2ee67c (diff) |
Update to MediaWiki 1.18.0
* also update ArchLinux skin to chagnes in MonoBook
* Use only css to hide our menu bar when printing
Diffstat (limited to 'includes/media/GIF.php')
-rw-r--r-- | includes/media/GIF.php | 103 |
1 files changed, 78 insertions, 25 deletions
diff --git a/includes/media/GIF.php b/includes/media/GIF.php index c4ede331..325ceb9a 100644 --- a/includes/media/GIF.php +++ b/includes/media/GIF.php @@ -12,56 +12,104 @@ * @ingroup Media */ class GIFHandler extends BitmapHandler { + + const BROKEN_FILE = '0'; // value to store in img_metadata if error extracting metadata. function getMetadata( $image, $filename ) { - if ( !isset( $image->parsedGIFMetadata ) ) { - try { - $image->parsedGIFMetadata = GIFMetadataExtractor::getMetadata( $filename ); - } catch( Exception $e ) { - // Broken file? - wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" ); - return '0'; - } + try { + $parsedGIFMetadata = BitmapMetadataHandler::GIF( $filename ); + } catch( Exception $e ) { + // Broken file? + wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" ); + return self::BROKEN_FILE; } - return serialize( $image->parsedGIFMetadata ); - + return serialize($parsedGIFMetadata); } - + + /** + * @param $image File + * @return array|bool + */ function formatMetadata( $image ) { - return false; + $meta = $image->getMetadata(); + + if ( !$meta ) { + return false; + } + $meta = unserialize( $meta ); + if ( !isset( $meta['metadata'] ) || count( $meta['metadata'] ) <= 1 ) { + return false; + } + + if ( isset( $meta['metadata']['_MW_GIF_VERSION'] ) ) { + unset( $meta['metadata']['_MW_GIF_VERSION'] ); + } + return $this->formatMetadataHelper( $meta['metadata'] ); } - + + /** + * @param $image File + * @param $width + * @param $height + * @return + */ function getImageArea( $image, $width, $height ) { $ser = $image->getMetadata(); - if ($ser) { - $metadata = unserialize($ser); + if ( $ser ) { + $metadata = unserialize( $ser ); return $width * $height * $metadata['frameCount']; } else { return $width * $height; } } + /** + * @param $image File + * @return bool + */ function isAnimatedImage( $image ) { $ser = $image->getMetadata(); - if ($ser) { + if ( $ser ) { $metadata = unserialize($ser); - if( $metadata['frameCount'] > 1 ) return true; + if( $metadata['frameCount'] > 1 ) { + return true; + } } return false; } - + function getMetadataType( $image ) { return 'parsed-gif'; } - + function isMetadataValid( $image, $metadata ) { + if ( $metadata === self::BROKEN_FILE ) { + // Do not repetitivly regenerate metadata on broken file. + return self::METADATA_GOOD; + } + wfSuppressWarnings(); $data = unserialize( $metadata ); wfRestoreWarnings(); - return (boolean) $data; + + if ( !$data || !is_array( $data ) ) { + wfDebug(__METHOD__ . ' invalid GIF metadata' ); + return self::METADATA_BAD; + } + + if ( !isset( $data['metadata']['_MW_GIF_VERSION'] ) + || $data['metadata']['_MW_GIF_VERSION'] != GIFMetadataExtractor::VERSION ) { + wfDebug(__METHOD__ . ' old but compatible GIF metadata' ); + return self::METADATA_COMPATIBLE; + } + return self::METADATA_GOOD; } + /** + * @param $image File + * @return string + */ function getLongDesc( $image ) { global $wgLang; @@ -71,20 +119,25 @@ class GIFHandler extends BitmapHandler { $metadata = unserialize($image->getMetadata()); wfRestoreWarnings(); - if (!$metadata || $metadata['frameCount'] <= 1) + if (!$metadata || $metadata['frameCount'] <= 1) { return $original; - + } + + /* Preserve original image info string, but strip the last char ')' so we can add even more */ $info = array(); $info[] = $original; - if ($metadata['looped']) + if ( $metadata['looped'] ) { $info[] = wfMsgExt( 'file-info-gif-looped', 'parseinline' ); + } - if ($metadata['frameCount'] > 1) + if ( $metadata['frameCount'] > 1 ) { $info[] = wfMsgExt( 'file-info-gif-frames', 'parseinline', $metadata['frameCount'] ); + } - if ($metadata['duration']) + if ( $metadata['duration'] ) { $info[] = $wgLang->formatTimePeriod( $metadata['duration'] ); + } return $wgLang->commaList( $info ); } |