X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FServiceWiring.php;h=ce82702f0a259e61f409db41adad88a24465b111;hb=c3bdadc7a6d2634462a226e928af0df1d3034540;hp=c2197a65a006128fb069e2aad0eb454bd74eada1;hpb=81b6a9fc449a8b5ff750aaa058c62753a903c5c4;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index c2197a65a0..ce82702f0a 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -71,8 +71,14 @@ return [ }, 'SiteLookup' => function( MediaWikiServices $services ) { - // Use the default SiteStore as the SiteLookup implementation for now - return $services->getSiteStore(); + $cacheFile = $services->getMainConfig()->get( 'SitesCacheFile' ); + + if ( $cacheFile !== false ) { + return new FileBasedSiteLookup( $cacheFile ); + } else { + // Use the default SiteStore as the SiteLookup implementation for now + return $services->getSiteStore(); + } }, 'ConfigFactory' => function( MediaWikiServices $services ) { @@ -96,7 +102,7 @@ return [ $config = $services->getMainConfig(); return new ClassicInterwikiLookup( $wgContLang, - ObjectCache::getMainWANInstance(), + $services->getMainWANObjectCache(), $config->get( 'InterwikiExpiry' ), $config->get( 'InterwikiCache' ), $config->get( 'InterwikiScopes' ), @@ -214,12 +220,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 ) { @@ -238,7 +288,7 @@ return [ 'LinkCache' => function( MediaWikiServices $services ) { return new LinkCache( $services->getTitleFormatter(), - ObjectCache::getMainWANInstance() + $services->getMainWANObjectCache() ); },