$lbConf = MWLBFactory::applyDefaultConfig(
$mainConfig->get( 'LBFactoryConf' ),
- $mainConfig
+ $mainConfig,
+ $services->getConfiguredReadOnlyMode()
);
$class = MWLBFactory::getLBFactoryClass( $lbConf );
- $instance = new $class( $lbConf );
- MWLBFactory::setCacheUsageCallbacks( $instance, $services );
-
- return $instance;
+ return new $class( $lbConf );
},
'DBLoadBalancer' => function( MediaWikiServices $services ) {
},
'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 ) {
$config = $services->getMainConfig();
return new ClassicInterwikiLookup(
$wgContLang,
- ObjectCache::getMainWANInstance(),
+ $services->getMainWANObjectCache(),
$config->get( 'InterwikiExpiry' ),
$config->get( 'InterwikiCache' ),
$config->get( 'InterwikiScopes' ),
'WatchedItemStore' => function( MediaWikiServices $services ) {
$store = new WatchedItemStore(
$services->getDBLoadBalancer(),
- new HashBagOStuff( [ 'maxKeys' => 100 ] )
+ new HashBagOStuff( [ 'maxKeys' => 100 ] ),
+ $services->getReadOnlyMode()
);
$store->setStatsdDataFactory( $services->getStatsdDataFactory() );
return $store;
},
'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 ) {
'LinkCache' => function( MediaWikiServices $services ) {
return new LinkCache(
$services->getTitleFormatter(),
- ObjectCache::getMainWANInstance()
+ $services->getMainWANObjectCache()
);
},
return $vrsClient;
},
+ 'ConfiguredReadOnlyMode' => function( MediaWikiServices $services ) {
+ return new ConfiguredReadOnlyMode( $services->getMainConfig() );
+ },
+
+ 'ReadOnlyMode' => function( MediaWikiServices $services ) {
+ return new ReadOnlyMode(
+ $services->getConfiguredReadOnlyMode(),
+ $services->getDBLoadBalancer()
+ );
+ },
+
///////////////////////////////////////////////////////////////////////////
// NOTE: When adding a service here, don't forget to add a getter function
// in the MediaWikiServices class. The convenience getter should just call