Skip to content

Commit

Permalink
Merge pull request #38 from mhor/fix_36
Browse files Browse the repository at this point in the history
Dedup attributes with different case
  • Loading branch information
mhor committed Dec 4, 2015
2 parents cb8a619 + 188772c commit 2e82291
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 5 deletions.
32 changes: 29 additions & 3 deletions src/Builder/MediaInfoContainerBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,46 @@ public function addTrackType($typeName, array $attributes)
*/
private function addAttributes(AbstractType $trackType, $attributes)
{
$this->mediaInfoContainer;
foreach ($attributes as $attribute => $value) {
foreach ($this->sanitizeAttributes($attributes) as $attribute => $value) {
if ($attribute[0] === '@') {
continue;
}

$attribute = $this->formatAttribute($attribute);
$trackType->set(
$attribute,
AttributeFactory::create($attribute, $value)
);
}
}

/**
* @param array $attributes
*
* @return array
*/
private function sanitizeAttributes(array $attributes)
{
$sanitizeAttributes = array();
foreach ($attributes as $key => $value) {
$key = $this->formatAttribute($key);
if (isset($sanitizeAttributes[$key])) {
if (!is_array($sanitizeAttributes[$key])) {
$sanitizeAttributes[$key] = array($sanitizeAttributes[$key]);
}

if (!is_array($value)) {
$value = array($value);
}

$value = $sanitizeAttributes[$key] + $value;
}

$sanitizeAttributes[$key] = $value;
}

return $sanitizeAttributes;
}

/**
* @param string $attribute
*
Expand Down
2 changes: 0 additions & 2 deletions src/Parser/MediaInfoOutputParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ public function parse($output)
* @param bool $ignoreUnknownTrackTypes Optional parameter used to skip unknown track types by passing true. The
* default behavior (false) is throw an exception on unknown track types.
*
* @throws Mhor\MediaInfo\Exception\UnknownTrackTypeException
*
* @return MediaInfoContainer
*/
public function getMediaInfoContainer($ignoreUnknownTrackTypes = false)
Expand Down
21 changes: 21 additions & 0 deletions test/Builder/MediaInfoContainerBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Mhor\MediaInfo\Test\Builder;

use Mhor\MediaInfo\Attribute\Duration;
use Mhor\MediaInfo\Builder\MediaInfoContainerBuilder;
use Mhor\MediaInfo\Factory\TypeFactory;
use Mhor\MediaInfo\Test\Stub\TrackTestType;
Expand Down Expand Up @@ -73,4 +74,24 @@ public function testAddInvalidTypeOnMediaInfoContainer()
$mediaInfoContainer = $mediaInfoContainerBuilder->build();
$mediaInfoContainer->add(new TrackTestType());
}

public function testSanitizeAttributes()
{
$mediaInfoContainerBuilder = new MediaInfoContainerBuilder();
$mediaInfoContainerBuilder->addTrackType(TypeFactory::AUDIO, array(
'Duration' => '10',
'DuRatioN' => '20',
'DURATION' => '4000',

));

$mediaContainer = $mediaInfoContainerBuilder->build();
$audios = $mediaContainer->getAudios();

$this->assertEquals('Mhor\MediaInfo\Attribute\Duration', get_class($audios[0]->get('duration')));

/** @var Duration $duration */
$duration = $audios[0]->get('duration');
$this->assertEquals('10', $duration->getMilliseconds());
}
}
1 change: 1 addition & 0 deletions test/fixtures/mediainfo-output.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
<Duration>7mn 55s 193ms</Duration>
<Duration>7mn 55s</Duration>
<Duration>00:07:55.193</Duration>
<DURATION>test_field</DURATION>
<Overall_bit_rate_mode>CBR</Overall_bit_rate_mode>
<Overall_bit_rate_mode>Constant</Overall_bit_rate_mode>
<Overall_bit_rate>320000</Overall_bit_rate>
Expand Down

0 comments on commit 2e82291

Please sign in to comment.