1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
/***************************************************************************
copyright : (C) 2005 by Brian Nickel
email : brian.nickel@gmail.com
***************************************************************************/
/***************************************************************************
* This library is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License version *
* 2.1 as published by the Free Software Foundation. *
* *
* This library is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the Free Software *
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
* USA *
***************************************************************************/
using System.Collections;
namespace TagLib.Asf
{
public class ExtendedContentDescriptionObject : Object
{
//////////////////////////////////////////////////////////////////////////
// private properties
//////////////////////////////////////////////////////////////////////////
private ArrayList descriptors;
//////////////////////////////////////////////////////////////////////////
// public methods
//////////////////////////////////////////////////////////////////////////
public ExtendedContentDescriptionObject (Asf.File file, long position) : base (file, position)
{
if (!Guid.Equals (Asf.Guid.AsfExtendedContentDescriptionObject))
throw new System.Exception ("Object GUID incorrect.");
if (OriginalSize < 26)
throw new System.Exception ("Object size too small.");
descriptors = new ArrayList ();
short count = file.ReadWord ();
for (short i = 0; i < count; i ++)
{
ContentDescriptor desc = new ContentDescriptor (file);
AddDescriptor (desc);
}
}
public ExtendedContentDescriptionObject () : base (Asf.Guid.AsfExtendedContentDescriptionObject)
{
descriptors = new ArrayList ();
}
public override ByteVector Render ()
{
ByteVector output = new ByteVector ();
short count = 0;
foreach (ContentDescriptor desc in descriptors)
{
count ++;
output += desc.Render ();
}
return Render (RenderWord (count) + output);
}
public void RemoveDescriptors (string name)
{
for (int i = descriptors.Count - 1; i >= 0; i --)
if (name == ((ContentDescriptor) descriptors [i]).Name)
descriptors.RemoveAt (i);
}
public ContentDescriptor [] GetDescriptors (string name)
{
ArrayList l = new ArrayList ();
foreach (ContentDescriptor desc in descriptors)
if (desc.Name == name)
l.Add (desc);
return (ContentDescriptor []) l.ToArray (typeof (ContentDescriptor));
}
public void AddDescriptor (ContentDescriptor descriptor)
{
descriptors.Add (descriptor);
}
public void SetDescriptors (string name, params ContentDescriptor [] descriptors)
{
int i;
for (i = 0; i < this.descriptors.Count; i ++)
if (name == ((ContentDescriptor) this.descriptors [i]).Name)
break;
RemoveDescriptors (name);
this.descriptors.InsertRange (i, descriptors);
}
//////////////////////////////////////////////////////////////////////////
// private methods
//////////////////////////////////////////////////////////////////////////
}
}
|