Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
ApiQueryVideoInfo
0.00% covered (danger)
0.00%
0 / 38
0.00% covered (danger)
0.00%
0 / 6
272
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 getInfo
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
72
 getPropertyMessages
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getExamplesMessages
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getHelpUrls
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getAllowedParams
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2/**
3 * Extends imageinfo with support for videoinfo sources property.
4 *
5 * Alternatively core ApiQueryImageInfo could support being extended in some straightforward ways.
6 * see: https://www.mediawiki.org/wiki/User:Catrope/Extension_review/TimedMediaHandler#ApiQueryVideoInfo.php
7 *
8 */
9
10namespace MediaWiki\TimedMediaHandler;
11
12use ApiBase;
13use ApiQueryImageInfo;
14use MediaWiki\TimedMediaHandler\Handlers\TextHandler\TextHandler;
15use MediaWiki\TimedMediaHandler\WebVideoTranscode\WebVideoTranscode;
16
17class ApiQueryVideoInfo extends ApiQueryImageInfo {
18
19    /** @inheritDoc */
20    public function __construct( $query, $moduleName, $prefix = 'vi' ) {
21        // We allow a subclass to override the prefix, to create a related API module.
22        // Some other parts of MediaWiki construct this with a null $prefix,
23        // which used to be ignored when this only took two arguments
24        if ( $prefix === null ) {
25            $prefix = 'vi';
26        }
27        parent::__construct( $query, $moduleName, $prefix );
28    }
29
30    /** @inheritDoc */
31    public static function getInfo( $file, $prop, $result, $thumbParams = null, $opts = false ) {
32        $vals = parent::getInfo( $file, $prop, $result, $thumbParams );
33        if ( isset( $prop['derivatives'] ) ) {
34            if ( $file->getHandler() && $file->getHandler() instanceof TimedMediaHandler ) {
35                $vals['derivatives'] = WebVideoTranscode::getSources( $file, [ 'fullurl' ] );
36                $result->setIndexedTagName( $vals['derivatives'], "derivative" );
37            } else {
38                // Non-TMH file, no derivatives.
39                $vals['derivatives'] = [];
40            }
41        }
42        if ( isset( $prop['timedtext'] ) ) {
43            if ( $file->getHandler() && $file->getHandler() instanceof TimedMediaHandler ) {
44                $handler = new TextHandler(
45                    $file,
46                    [ TimedTextPage::SRT_SUBTITLE_FORMAT, TimedTextPage::VTT_SUBTITLE_FORMAT ]
47                );
48                $timedtext = $handler->getTracks();
49                foreach ( $timedtext as &$track ) {
50                    $track['src'] = wfExpandUrl( $track['src'], PROTO_CURRENT );
51                    // We add origin anonymous for the benefit of
52                    // InstantCommons, the primary user of this API
53                    $track['src'] = wfAppendQuery( $track['src'], [ 'origin' => '*' ] );
54                }
55                unset( $track );
56                $result->setIndexedTagName( $timedtext, "timedtext" );
57                $vals['timedtext'] = $timedtext;
58            } else {
59                // Non-TMH file, no timedtext.
60                $vals['timedtext'] = [];
61            }
62        }
63        return $vals;
64    }
65
66    /** @inheritDoc */
67    public static function getPropertyMessages( $filter = [] ) {
68        $pm = parent::getPropertyMessages( $filter );
69        $pm['derivatives'] = 'apihelp-query+videoinfo-paramvalue-prop-derivatives';
70        $pm['timedtext'] = 'apihelp-query+videoinfo-paramvalue-prop-timedtext';
71        return array_diff_key( $pm, array_flip( $filter ) );
72    }
73
74    /**
75     * @see ApiBase::getExamplesMessages()
76     * @return array
77     */
78    protected function getExamplesMessages() {
79        return [
80            'action=query&titles=File:Folgers.ogv&prop=videoinfo&viprop=derivatives'
81                => 'apihelp-query+videoinfo-example-1',
82        ];
83    }
84
85    /** @inheritDoc */
86    public function getHelpUrls() {
87        return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Videoinfo';
88    }
89
90    /** @inheritDoc */
91    public function getAllowedParams() {
92        $params = parent::getAllowedParams();
93        foreach ( $params as $k => $v ) {
94            // If PARAM_HELP_MSG is not manually set for this parameter, force fallback
95            // to the query+imageinfo-param message (ie the parent module) rather than the
96            // query+videoinfo-param that MediaWiki would default to.
97            if ( !isset( $v[ApiBase::PARAM_HELP_MSG] ) ) {
98                $params[$k][ApiBase::PARAM_HELP_MSG] = "apihelp-query+imageinfo-param-$k";
99            }
100        }
101
102        return $params;
103    }
104}