MediaInfoContainer::addVideo()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Mhor\MediaInfo\Container;
4
5
use Mhor\MediaInfo\DumpTrait;
6
use Mhor\MediaInfo\Type\AbstractType;
7
use Mhor\MediaInfo\Type\Audio;
8
use Mhor\MediaInfo\Type\General;
9
use Mhor\MediaInfo\Type\Image;
10
use Mhor\MediaInfo\Type\Menu;
11
use Mhor\MediaInfo\Type\Other;
12
use Mhor\MediaInfo\Type\Subtitle;
13
use Mhor\MediaInfo\Type\Video;
14
15
class MediaInfoContainer implements \JsonSerializable
16
{
17
    use DumpTrait;
18
19
    const GENERAL_CLASS = 'Mhor\MediaInfo\Type\General';
20
    const AUDIO_CLASS = 'Mhor\MediaInfo\Type\Audio';
21
    const IMAGE_CLASS = 'Mhor\MediaInfo\Type\Image';
22
    const VIDEO_CLASS = 'Mhor\MediaInfo\Type\Video';
23
    const SUBTITLE_CLASS = 'Mhor\MediaInfo\Type\Subtitle';
24
    const MENU_CLASS = 'Mhor\MediaInfo\Type\Menu';
25
    const OTHER_CLASS = 'Mhor\MediaInfo\Type\Other';
26
27
    /**
28
     * @var string
29
     */
30
    private $version;
31
32
    /**
33
     * @var General
34
     */
35
    private $general;
36
37
    /**
38
     * @var Audio[]
39
     */
40
    private $audios = [];
41
42
    /**
43
     * @var Video[]
44
     */
45
    private $videos = [];
46
47
    /**
48
     * @var Subtitle[]
49
     */
50
    private $subtitles = [];
51
52
    /**
53
     * @var Image[]
54
     */
55
    private $images = [];
56
57
    /**
58
     * @var Menu[]
59
     */
60
    private $menus = [];
61
62
    /**
63
     * @var Other[]
64
     */
65
    private $others = [];
66
67
    /**
68
     * @return General|null
69
     */
70 5
    public function getGeneral(): ?General
71
    {
72 5
        return $this->general;
73
    }
74
75
    /**
76
     * @return Audio[]
77
     */
78 5
    public function getAudios(): array
79
    {
80 5
        return $this->audios;
81
    }
82
83
    /**
84
     * @return Image[]
85
     */
86 2
    public function getImages(): array
87
    {
88 2
        return $this->images;
89
    }
90
91
    /**
92
     * @return Menu[]
93
     */
94 1
    public function getMenus(): array
95
    {
96 1
        return $this->menus;
97
    }
98
99
    /**
100
     * @return Other[]
101
     */
102 1
    public function getOthers(): array
103
    {
104 1
        return $this->others;
105
    }
106
107
    /**
108
     * @param string $version
109
     */
110 5
    public function setVersion($version): void
111
    {
112 5
        $this->version = $version;
113 5
    }
114
115
    /**
116
     * @return string|null
117
     */
118 1
    public function getVersion(): ?string
119
    {
120 1
        return $this->version;
121
    }
122
123
    /**
124
     * @return Video[]
125
     */
126 2
    public function getVideos(): array
127
    {
128 2
        return $this->videos;
129
    }
130
131
    /**
132
     * @return Subtitle[]
133
     */
134 2
    public function getSubtitles(): array
135
    {
136 2
        return $this->subtitles;
137
    }
138
139
    /**
140
     * @param General $general
141
     */
142 10
    public function setGeneral($general): void
143
    {
144 10
        $this->general = $general;
145 10
    }
146
147
    /**
148
     * @param AbstractType $trackType
149
     *
150
     * @throws \Exception
151
     */
152 14
    public function add(AbstractType $trackType): void
153
    {
154 14
        switch (get_class($trackType)) {
155 14
            case self::AUDIO_CLASS:
156 13
                $this->addAudio($trackType);
157 13
                break;
158 11
            case self::VIDEO_CLASS:
159 1
                $this->addVideo($trackType);
160 1
                break;
161 11
            case self::IMAGE_CLASS:
162 1
                $this->addImage($trackType);
163 1
                break;
164 11
            case self::GENERAL_CLASS:
165 10
                $this->setGeneral($trackType);
166 10
                break;
167 5
            case self::SUBTITLE_CLASS:
168 4
                $this->addSubtitle($trackType);
169 4
                break;
170 3
            case self::MENU_CLASS:
171 1
                $this->addMenu($trackType);
172 1
                break;
173 2
            case self::OTHER_CLASS:
174 1
                $this->addOther($trackType);
175 1
                break;
176
            default:
177 1
                throw new \Exception('Unknown type');
178
        }
179 13
    }
180
181
    /**
182
     * @param Audio $audio
183
     */
184 13
    private function addAudio(Audio $audio): void
185
    {
186 13
        $this->audios[] = $audio;
187 13
    }
188
189
    /**
190
     * @param Video $video
191
     */
192 1
    private function addVideo(Video $video): void
193
    {
194 1
        $this->videos[] = $video;
195 1
    }
196
197
    /**
198
     * @param Image $image
199
     */
200 1
    private function addImage(Image $image): void
201
    {
202 1
        $this->images[] = $image;
203 1
    }
204
205
    /**
206
     * @param Subtitle $subtitle
207
     */
208 4
    private function addSubtitle(Subtitle $subtitle): void
209
    {
210 4
        $this->subtitles[] = $subtitle;
211 4
    }
212
213
    /**
214
     * @param Menu $menu
215
     */
216 1
    private function addMenu(Menu $menu): void
217
    {
218 1
        $this->menus[] = $menu;
219 1
    }
220
221
    /**
222
     * @param Other $other
223
     */
224 1
    private function addOther(Other $other): void
225
    {
226 1
        $this->others[] = $other;
227 1
    }
228
}
229