Move MimeAnalyzer params to ServiceWiring
authoraddshore <addshorewiki@gmail.com>
Tue, 22 Nov 2016 23:57:34 +0000 (23:57 +0000)
committeraddshore <addshorewiki@gmail.com>
Wed, 23 Nov 2016 23:52:58 +0000 (23:52 +0000)
Change-Id: Ic3df489cd8f4af2c0de39aaac3140ace107d4bf4

includes/MimeMagic.php
includes/ServiceWiring.php

index 79218ab..f062d13 100644 (file)
  * @file
  */
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Assert\Assert;
 
+/**
+ * @deprecated since 1.29
+ * MimeAnalyzer should be used instead of MimeMagic
+ */
 class MimeMagic extends MimeAnalyzer {
        /**
         * Get an instance of this class
         * @return MimeMagic
-        * @deprecated since 1.28
+        * @deprecated since 1.28 get a MimeAnalyzer instance form MediaWikiServices
         */
        public static function singleton() {
-               return MediaWikiServices::getInstance()->getMimeAnalyzer();
-       }
-
-       /**
-        * @param array $params
-        * @param Config $mainConfig
-        * @return array
-        */
-       public static function applyDefaultParameters( array $params, Config $mainConfig ) {
-               $logger = LoggerFactory::getInstance( 'Mime' );
-               $params += [
-                       'typeFile' => $mainConfig->get( 'MimeTypeFile' ),
-                       'infoFile' => $mainConfig->get( 'MimeInfoFile' ),
-                       'xmlTypes' => $mainConfig->get( 'XMLMimeTypes' ),
-                       'guessCallback' =>
-                               function ( $mimeAnalyzer, &$head, &$tail, $file, &$mime ) use ( $logger ) {
-                                       // Also test DjVu
-                                       $deja = new DjVuImage( $file );
-                                       if ( $deja->isValid() ) {
-                                               $logger->info( __METHOD__ . ": detected $file as image/vnd.djvu\n" );
-                                               $mime = 'image/vnd.djvu';
-
-                                               return;
-                                       }
-                                       // Some strings by reference for performance - assuming well-behaved hooks
-                                       Hooks::run(
-                                               'MimeMagicGuessFromContent',
-                                               [ $mimeAnalyzer, &$head, &$tail, $file, &$mime ]
-                                       );
-                               },
-                       'extCallback' => function ( $mimeAnalyzer, $ext, &$mime ) {
-                               // Media handling extensions can improve the MIME detected
-                               Hooks::run( 'MimeMagicImproveFromExtension', [ $mimeAnalyzer, $ext, &$mime ] );
-                       },
-                       'initCallback' => function ( $mimeAnalyzer ) {
-                               // Allow media handling extensions adding MIME-types and MIME-info
-                               Hooks::run( 'MimeMagicInit', [ $mimeAnalyzer ] );
-                       },
-                       'logger' => $logger
-               ];
-
-               if ( $params['infoFile'] === 'includes/mime.info' ) {
-                       $params['infoFile'] = __DIR__ . "/libs/mime/mime.info";
-               }
-
-               if ( $params['typeFile'] === 'includes/mime.types' ) {
-                       $params['typeFile'] = __DIR__ . "/libs/mime/mime.types";
-               }
-
-               $detectorCmd = $mainConfig->get( 'MimeDetectorCommand' );
-               if ( $detectorCmd ) {
-                       $params['detectCallback'] = function ( $file ) use ( $detectorCmd ) {
-                               return wfShellExec( "$detectorCmd " . wfEscapeShellArg( $file ) );
-                       };
-               }
-
-               return $params;
+               // XXX: We know that the MimeAnalyzer is currently an instance of MimeMagic
+               $instance = MediaWikiServices::getInstance()->getMimeAnalyzer();
+               Assert::postcondition(
+                       $instance instanceof MimeMagic,
+                       __METHOD__ . ' should return an instance of ' . MimeMagic::class
+               );
+               return $instance;
        }
 }
index c2197a6..6881023 100644 (file)
@@ -214,12 +214,56 @@ return [
        },
 
        'MimeAnalyzer' => function( MediaWikiServices $services ) {
-               return new MimeMagic(
-                       MimeMagic::applyDefaultParameters(
-                               [],
-                               $services->getMainConfig()
-                       )
-               );
+               $logger = LoggerFactory::getInstance( 'Mime' );
+               $mainConfig = $services->getMainConfig();
+               $params = [
+                       'typeFile' => $mainConfig->get( 'MimeTypeFile' ),
+                       'infoFile' => $mainConfig->get( 'MimeInfoFile' ),
+                       'xmlTypes' => $mainConfig->get( 'XMLMimeTypes' ),
+                       'guessCallback' =>
+                               function ( $mimeAnalyzer, &$head, &$tail, $file, &$mime ) use ( $logger ) {
+                                       // Also test DjVu
+                                       $deja = new DjVuImage( $file );
+                                       if ( $deja->isValid() ) {
+                                               $logger->info( __METHOD__ . ": detected $file as image/vnd.djvu\n" );
+                                               $mime = 'image/vnd.djvu';
+
+                                               return;
+                                       }
+                                       // Some strings by reference for performance - assuming well-behaved hooks
+                                       Hooks::run(
+                                               'MimeMagicGuessFromContent',
+                                               [ $mimeAnalyzer, &$head, &$tail, $file, &$mime ]
+                                       );
+                               },
+                       'extCallback' => function ( $mimeAnalyzer, $ext, &$mime ) {
+                               // Media handling extensions can improve the MIME detected
+                               Hooks::run( 'MimeMagicImproveFromExtension', [ $mimeAnalyzer, $ext, &$mime ] );
+                       },
+                       'initCallback' => function ( $mimeAnalyzer ) {
+                               // Allow media handling extensions adding MIME-types and MIME-info
+                               Hooks::run( 'MimeMagicInit', [ $mimeAnalyzer ] );
+                       },
+                       'logger' => $logger
+               ];
+
+               if ( $params['infoFile'] === 'includes/mime.info' ) {
+                       $params['infoFile'] = __DIR__ . "/libs/mime/mime.info";
+               }
+
+               if ( $params['typeFile'] === 'includes/mime.types' ) {
+                       $params['typeFile'] = __DIR__ . "/libs/mime/mime.types";
+               }
+
+               $detectorCmd = $mainConfig->get( 'MimeDetectorCommand' );
+               if ( $detectorCmd ) {
+                       $params['detectCallback'] = function ( $file ) use ( $detectorCmd ) {
+                               return wfShellExec( "$detectorCmd " . wfEscapeShellArg( $file ) );
+                       };
+               }
+
+               // XXX: MimeMagic::singleton currently requires this service to return an instance of MimeMagic
+               return new MimeMagic( $params );
        },
 
        'ProxyLookup' => function( MediaWikiServices $services ) {