Minor fixes
git-svn-id: http://php-reader.googlecode.com/svn/trunk@93 51a70ab9-7547-0410-9469-37e369ee0574
This commit is contained in:
@@ -117,7 +117,7 @@ final class ID3_ExtendedHeader extends ID3_Object
|
|||||||
$this->_size = $this->decodeSynchsafe32($this->_reader->readUInt32BE());
|
$this->_size = $this->decodeSynchsafe32($this->_reader->readUInt32BE());
|
||||||
|
|
||||||
/* ID3v2.3.0 ExtendedHeader */
|
/* ID3v2.3.0 ExtendedHeader */
|
||||||
if (isset($this->_options["version"]) && $this->_options["version"] < 4) {
|
if ($this->getOption("version", 4) < 4) {
|
||||||
if ($this->_reader->readUInt16BE() == 0x8000)
|
if ($this->_reader->readUInt16BE() == 0x8000)
|
||||||
$this->_flags = self::CRC32;
|
$this->_flags = self::CRC32;
|
||||||
$this->_padding = $this->_reader->readUInt32BE();
|
$this->_padding = $this->_reader->readUInt32BE();
|
||||||
@@ -299,7 +299,7 @@ final class ID3_ExtendedHeader extends ID3_Object
|
|||||||
public function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
/* ID3v2.3.0 ExtendedHeader */
|
/* ID3v2.3.0 ExtendedHeader */
|
||||||
if (isset($this->_options["version"]) && $this->_options["version"] < 4) {
|
if ($this->getOption("version", 4) < 4) {
|
||||||
return Transform::toUInt32BE($this->_size) .
|
return Transform::toUInt32BE($this->_size) .
|
||||||
Transform::toUInt16BE($this->hasFlag(self::CRC32) ? 0x8000 : 0) .
|
Transform::toUInt16BE($this->hasFlag(self::CRC32) ? 0x8000 : 0) .
|
||||||
Transform::toUInt32BE($this->_padding) .
|
Transform::toUInt32BE($this->_padding) .
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class ID3_Frame extends ID3_Object
|
|||||||
$this->_size = $this->decodeSynchsafe32($this->_reader->readUInt32BE());
|
$this->_size = $this->decodeSynchsafe32($this->_reader->readUInt32BE());
|
||||||
|
|
||||||
/* ID3v2.3.0 Flags; convert to 2.4.0 format */
|
/* ID3v2.3.0 Flags; convert to 2.4.0 format */
|
||||||
if (isset($this->_options["version"]) && $this->_options["version"] < 4) {
|
if ($this->getOption("version", 4) < 4) {
|
||||||
$flags = $this->_reader->readUInt16BE();
|
$flags = $this->_reader->readUInt16BE();
|
||||||
if (($flags & 0x8000) == 0x8000)
|
if (($flags & 0x8000) == 0x8000)
|
||||||
$this->_flags |= self::DISCARD_ON_TAGCHANGE;
|
$this->_flags |= self::DISCARD_ON_TAGCHANGE;
|
||||||
@@ -243,7 +243,7 @@ class ID3_Frame extends ID3_Object
|
|||||||
public function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
/* ID3v2.3.0 Flags; convert from 2.4.0 format */
|
/* ID3v2.3.0 Flags; convert from 2.4.0 format */
|
||||||
if (isset($this->_options["version"]) && $this->_options["version"] < 4) {
|
if ($this->getOption("version", 4) < 4) {
|
||||||
$flags = 0;
|
$flags = 0;
|
||||||
if ($this->hasFlag(self::DISCARD_ON_TAGCHANGE))
|
if ($this->hasFlag(self::DISCARD_ON_TAGCHANGE))
|
||||||
$flags = $flags | 0x8000;
|
$flags = $flags | 0x8000;
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ final class ID3_Header extends ID3_Object
|
|||||||
*/
|
*/
|
||||||
public function setVersion($version)
|
public function setVersion($version)
|
||||||
{
|
{
|
||||||
$this->_version = $this->_options["version"] = $version;
|
$this->setOption("version", $this->_version = $version);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ abstract class ID3_Object
|
|||||||
*
|
*
|
||||||
* @var Array
|
* @var Array
|
||||||
*/
|
*/
|
||||||
protected $_options;
|
private $_options;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs the class with given parameters and reads object related data
|
* Constructs the class with given parameters and reads object related data
|
||||||
@@ -81,6 +81,20 @@ abstract class ID3_Object
|
|||||||
*/
|
*/
|
||||||
public function getOptions() { return $this->_options; }
|
public function getOptions() { return $this->_options; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the given option value, or the default value if the option is not
|
||||||
|
* defined.
|
||||||
|
*
|
||||||
|
* @param string $option The name of the option.
|
||||||
|
* @param mixed $defaultValue The default value to be returned.
|
||||||
|
*/
|
||||||
|
public function getOption($option, $defaultValue = false)
|
||||||
|
{
|
||||||
|
if (isset($this->_options[$option]))
|
||||||
|
return $this->_options[$option];
|
||||||
|
return $defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the options array. See {@link ID3v2} class for available options.
|
* Sets the options array. See {@link ID3v2} class for available options.
|
||||||
*
|
*
|
||||||
@@ -88,6 +102,17 @@ abstract class ID3_Object
|
|||||||
*/
|
*/
|
||||||
public function setOptions(&$options) { $this->_options = $options; }
|
public function setOptions(&$options) { $this->_options = $options; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the given option the given value.
|
||||||
|
*
|
||||||
|
* @param string $option The name of the option.
|
||||||
|
* @param mixed $value The value to set for the option.
|
||||||
|
*/
|
||||||
|
public function setOption($option, $value)
|
||||||
|
{
|
||||||
|
$this->_options[$option] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Magic function so that $obj->value will work.
|
* Magic function so that $obj->value will work.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -132,6 +132,8 @@ final class ID3v2
|
|||||||
throw new ID3_Exception
|
throw new ID3_Exception
|
||||||
("File does not contain ID3v2 tag: " . $filename);
|
("File does not contain ID3v2 tag: " . $filename);
|
||||||
|
|
||||||
|
$startOffset = $this->_reader->getOffset();
|
||||||
|
|
||||||
$this->_header = new ID3_Header($this->_reader, $options);
|
$this->_header = new ID3_Header($this->_reader, $options);
|
||||||
if ($this->_header->getVersion() < 3 || $this->_header->getVersion() > 4)
|
if ($this->_header->getVersion() < 3 || $this->_header->getVersion() > 4)
|
||||||
throw new ID3_Exception
|
throw new ID3_Exception
|
||||||
@@ -146,7 +148,7 @@ final class ID3v2
|
|||||||
$offset = $this->_reader->getOffset();
|
$offset = $this->_reader->getOffset();
|
||||||
|
|
||||||
// Jump off the loop if we reached the end of the tag
|
// Jump off the loop if we reached the end of the tag
|
||||||
if ($offset - 10 >= $this->_header->getSize() -
|
if ($offset - $startOffset - 10 >= $this->_header->getSize() -
|
||||||
($this->hasFooter() ? 10 : 0))
|
($this->hasFooter() ? 10 : 0))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -337,9 +339,6 @@ final class ID3v2
|
|||||||
*/
|
*/
|
||||||
public function write($filename = false)
|
public function write($filename = false)
|
||||||
{
|
{
|
||||||
if (empty($this->_frames))
|
|
||||||
throw new ID3_Exception("Tag must contain at least one frame");
|
|
||||||
|
|
||||||
if ($filename === false && ($filename = $this->_filename) === false)
|
if ($filename === false && ($filename = $this->_filename) === false)
|
||||||
throw new ID3_Exception("No file given to write the tag to");
|
throw new ID3_Exception("No file given to write the tag to");
|
||||||
|
|
||||||
@@ -349,9 +348,10 @@ final class ID3v2
|
|||||||
|
|
||||||
$oldTagSize = $this->_header->getSize();
|
$oldTagSize = $this->_header->getSize();
|
||||||
$tag = "" . $this;
|
$tag = "" . $this;
|
||||||
$tagSize = strlen($tag);
|
$tagSize = empty($this->_frames) ? 0 : strlen($tag);
|
||||||
|
|
||||||
if ($this->_reader === null || $tagSize - 10 > $oldTagSize) {
|
if ($this->_reader === null ||
|
||||||
|
$tagSize - 10 > $oldTagSize || $tagSize == 0) {
|
||||||
fseek($fd, 0, SEEK_END);
|
fseek($fd, 0, SEEK_END);
|
||||||
$oldFileSize = ftell($fd);
|
$oldFileSize = ftell($fd);
|
||||||
ftruncate($fd, $newFileSize = $tagSize - $oldTagSize + $oldFileSize);
|
ftruncate($fd, $newFileSize = $tagSize - $oldTagSize + $oldFileSize);
|
||||||
@@ -363,7 +363,8 @@ final class ID3v2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fseek($fd, 0);
|
fseek($fd, 0);
|
||||||
fwrite($fd, $tag);
|
fwrite($fd, $tag, $tagLength);
|
||||||
|
fclose($fd);
|
||||||
|
|
||||||
$this->_filename = $filename;
|
$this->_filename = $filename;
|
||||||
}
|
}
|
||||||
@@ -393,6 +394,23 @@ final class ID3v2
|
|||||||
throw new ID3_Exception("Unknown frame/field: " . $name);
|
throw new ID3_Exception("Unknown frame/field: " . $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic function so that isset($obj->value) will work. This method checks
|
||||||
|
* whether the frame matching the identifier exists.
|
||||||
|
*
|
||||||
|
* @param string $name The frame identifier.
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function __isset($name) { return isset($this->_boxes[$name]); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic function so that unset($obj->value) will work. This method removes
|
||||||
|
* all the frames matching the identifier.
|
||||||
|
*
|
||||||
|
* @param string $name The frame identifier.
|
||||||
|
*/
|
||||||
|
public function __unset($name) { unset($this->_boxes[$name]); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the tag raw data.
|
* Returns the tag raw data.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ class ISO14496_Box
|
|||||||
if ($size == 0)
|
if ($size == 0)
|
||||||
$size = $this->_reader->getSize() - $offset;
|
$size = $this->_reader->getSize() - $offset;
|
||||||
|
|
||||||
if (preg_match("/^\xa9?[a-z]{3,4}$/i", $type) &&
|
if (preg_match("/^\xa9?[a-z0-9]{3,4}$/i", $type) &&
|
||||||
substr($base, 0, min(strlen($base), strlen
|
substr($base, 0, min(strlen($base), strlen
|
||||||
($tmp = $path . ($path ? "." : "") . $type))) ==
|
($tmp = $path . ($path ? "." : "") . $type))) ==
|
||||||
substr($tmp, 0, min(strlen($base), strlen($tmp))))
|
substr($tmp, 0, min(strlen($base), strlen($tmp))))
|
||||||
@@ -287,14 +287,6 @@ class ISO14496_Box
|
|||||||
array_pop(self::$_path);
|
array_pop(self::$_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getPath()
|
|
||||||
{
|
|
||||||
$path = "";
|
|
||||||
echo "box: " .$this->getType() . ", parent: " . $this->getParent()."\n";
|
|
||||||
for ($child = $this; ($parent = $child->getParent()) !== null; $child = $parent){echo "parent found";$path = $parent->getType() . "." . $path;};
|
|
||||||
return $path;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the box given as an argument is present in the file. Returns
|
* Checks whether the box given as an argument is present in the file. Returns
|
||||||
* <var>true</var> if one or more boxes are present, <var>false</var>
|
* <var>true</var> if one or more boxes are present, <var>false</var>
|
||||||
|
|||||||
@@ -124,8 +124,8 @@ final class ISO14496_Box_ID32 extends ISO14496_Box_Full
|
|||||||
{
|
{
|
||||||
return parent::__toString
|
return parent::__toString
|
||||||
(Transform::toUInt16BE
|
(Transform::toUInt16BE
|
||||||
(((ord($language[0]) - 0x60) << 10) |
|
(((ord($this->_language[0]) - 0x60) << 10) |
|
||||||
((ord($language[1]) - 0x60) << 5) |
|
((ord($this->_language[1]) - 0x60) << 5) |
|
||||||
ord($language[2]) - 0x60) . $this->_tag);
|
ord($this->_language[2]) - 0x60) . $this->_tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user