From 08cf0af830dba6d9b6fe761a1b4c360efc2fea2f Mon Sep 17 00:00:00 2001 From: Maxime Horcholle Date: Mon, 8 Dec 2014 23:15:27 +0100 Subject: [PATCH] create custom attribute for special values --- src/Attribute/Cover.php | 24 ++++++++++++++ src/Attribute/Duration.php | 27 ++++++++++++++++ src/Attribute/Mode.php | 38 +++++++++++++++++++++++ src/Attribute/Rate.php | 24 ++++++++++++++ src/Attribute/Size.php | 25 +++++++++++++++ src/Builder/MediaInfoContainerBuilder.php | 4 +++ src/Factory/AudioAttributeFactory.php | 1 - src/Factory/GenericAttributeFactory.php | 27 ++++++++++++++++ src/Type/AbstractType.php | 17 ++++++---- 9 files changed, 180 insertions(+), 7 deletions(-) create mode 100644 src/Attribute/Cover.php create mode 100644 src/Attribute/Duration.php create mode 100644 src/Attribute/Mode.php create mode 100644 src/Attribute/Rate.php create mode 100644 src/Attribute/Size.php diff --git a/src/Attribute/Cover.php b/src/Attribute/Cover.php new file mode 100644 index 0000000..0ab9131 --- /dev/null +++ b/src/Attribute/Cover.php @@ -0,0 +1,24 @@ +binaryCover = $value; + } + + /** + * @return string + */ + public function getBinaryCover() + { + return $this->binaryCover; + } +} \ No newline at end of file diff --git a/src/Attribute/Duration.php b/src/Attribute/Duration.php new file mode 100644 index 0000000..d1d5276 --- /dev/null +++ b/src/Attribute/Duration.php @@ -0,0 +1,27 @@ +milliseconds = $durations[0]; + } + + /** + * @return mixed + */ + public function getMilliseconds() + { + return $this->milliseconds; + } +} \ No newline at end of file diff --git a/src/Attribute/Mode.php b/src/Attribute/Mode.php new file mode 100644 index 0000000..e783d4c --- /dev/null +++ b/src/Attribute/Mode.php @@ -0,0 +1,38 @@ +shortName = $rateMode[0]; + $this->fullName = $rateMode[1]; + } + + /** + * @return string + */ + public function getFullName() + { + return $this->fullName; + } + + /** + * @return string + */ + public function getShortName() + { + return $this->shortName; + } +} \ No newline at end of file diff --git a/src/Attribute/Rate.php b/src/Attribute/Rate.php new file mode 100644 index 0000000..8b13bcc --- /dev/null +++ b/src/Attribute/Rate.php @@ -0,0 +1,24 @@ +absoluteValue = $value[0]; + $this->textValue = $value[1]; + } +} \ No newline at end of file diff --git a/src/Attribute/Size.php b/src/Attribute/Size.php new file mode 100644 index 0000000..62b3d2c --- /dev/null +++ b/src/Attribute/Size.php @@ -0,0 +1,25 @@ +bit = $sizes[0]; + } + + /** + * @return int + */ + public function getBit() + { + return $this->bit; + } +} \ No newline at end of file diff --git a/src/Builder/MediaInfoContainerBuilder.php b/src/Builder/MediaInfoContainerBuilder.php index d623142..65caee3 100644 --- a/src/Builder/MediaInfoContainerBuilder.php +++ b/src/Builder/MediaInfoContainerBuilder.php @@ -56,6 +56,10 @@ public function addAttributes(AbstractType $trackType, $attributes) { $this->mediaInfoContainer; foreach ($attributes as $attribute => $value) { + if ($attribute[0] === '@') { + continue; + } + $attribute = $this->formatAttribute($attribute); $trackType->set( $attribute, diff --git a/src/Factory/AudioAttributeFactory.php b/src/Factory/AudioAttributeFactory.php index 3eb1b70..af4fef6 100644 --- a/src/Factory/AudioAttributeFactory.php +++ b/src/Factory/AudioAttributeFactory.php @@ -9,6 +9,5 @@ class AudioAttributeFactory public static function create($attribute, $value) { return GenericAttributeFactory::create($attribute, $value); - } } \ No newline at end of file diff --git a/src/Factory/GenericAttributeFactory.php b/src/Factory/GenericAttributeFactory.php index 23c2d87..459bbaa 100644 --- a/src/Factory/GenericAttributeFactory.php +++ b/src/Factory/GenericAttributeFactory.php @@ -3,11 +3,38 @@ namespace Mhor\MediaInfo\Factory; +use Mhor\MediaInfo\Attribute\Cover; +use Mhor\MediaInfo\Attribute\Duration; +use Mhor\MediaInfo\Attribute\Mode; +use Mhor\MediaInfo\Attribute\Rate; +use Mhor\MediaInfo\Attribute\Size; + class GenericAttributeFactory { public static function create($attribute, $value) { switch ($attribute) { + case 'file_size': + case 'stream_size': + return new Size($value); + case 'duration': + return new Duration($value); + case 'channel_s_'; + case 'bit_rate'; + case 'sampling_rate'; + return new Rate($value); + case 'cover_data'; + return new Cover($value); + case 'overall_bit_rate_mode': + case 'overall_bit_rate': + case 'bit_rate_mode': + case 'compression_mode': + case 'codec': + case 'kind_of_stream': + return new Mode($value); + case 'file_last_modification_date'; + case 'file_last_modification_date__local_'; + return new \DateTime($value); default: return $value; break; diff --git a/src/Type/AbstractType.php b/src/Type/AbstractType.php index 7c691c1..2bb2252 100644 --- a/src/Type/AbstractType.php +++ b/src/Type/AbstractType.php @@ -7,23 +7,28 @@ abstract class AbstractType /** * @var array */ - protected $attributes; + protected $attributes = array(); /** * @param $attribute + * @param string|object $value * @return string */ - public function get($attribute) + public function set($attribute, $value) { - $this->attributes[$attribute]; + $this->attributes[$attribute] = $value; } /** * @param $attribute - * @param $value + * + * @return string|object|null */ - public function set($attribute, $value) + public function get($attribute) { - return $this->attributes[$attribute] = $value; + if (isset($this->attributes[$attribute])) { + return $this->attributes[$attribute]; + } + return null; } } \ No newline at end of file