Example #1
0
        public void Save(Uri path)
        {
            try
            {
                XmlTextWriter writer = new XmlTextWriter(path.LocalPath, Encoding.UTF8);
                writer.WriteStartDocument();
                writer.WriteStartElement("playlist", PLAYLIST_NAMESPACE);
                writer.WriteAttributeString("version", PLAYLIST_VERSION);

                writer.WriteElementString("title", Title.ToString());
                writer.WriteElementString("creator", Creator.ToString());
                writer.WriteElementString("annotation", Annotation.ToString());
                writer.WriteElementString("info", Info.ToString());
                writer.WriteElementString("location", Location.ToString());
                writer.WriteElementString("identifier", Identifier.ToString());
                writer.WriteElementString("image", Image.ToString());
                writer.WriteElementString("date", Date.ToString());
                writer.WriteElementString("license", License.ToString());

                writer.WriteStartElement("attribution");
                foreach (Attribution attribution in Attributions)
                {
                    if (attribution.Value is Location)
                    {
                        writer.WriteElementString("location", attribution.Value.ToString());
                    }
                    else if (attribution.Value is Identifier)
                    {
                        writer.WriteElementString("identifier", attribution.Value.ToString());
                    }
                }
                writer.WriteEndElement();

                foreach (Link link in Links)
                {
                    writer.WriteStartElement("link");
                    writer.WriteAttributeString("rel", link.Rel.ToString());
                    writer.WriteValue(link.Content.ToString());
                    writer.WriteEndElement();
                }

                foreach (Metadata metadataItem in this.Metadata)
                {
                    writer.WriteStartElement("meta");
                    writer.WriteAttributeString("rel", metadataItem.Rel.ToString());
                    writer.WriteValue(metadataItem.Content);
                    writer.WriteEndElement();
                }

                foreach (Extension extension in Extensions)
                {
                    if (!string.IsNullOrEmpty(extension.ContentNamespace))
                    {
                        writer.WriteStartElement("extension", extension.ContentNamespace);
                    }
                    else
                    {
                        writer.WriteStartElement("extension");
                    }

                    writer.WriteAttributeString("application", extension.Application.ToString());
                    foreach (XmlNode extensionNode in extension.Content)
                    {
                        writer.WriteRaw(extensionNode.OuterXml);
                    }
                    writer.WriteEndElement();
                }

                writer.WriteStartElement("trackList");

                foreach (Track track in Tracks)
                {
                    writer.WriteStartElement("track");

                    foreach (Location trackLocation in track.Locations)
                    {
                        writer.WriteElementString("location", trackLocation.ToString());
                    }

                    foreach (Identifier trackIdentifier in track.Identifiers)
                    {
                        writer.WriteElementString("identifier", trackIdentifier.ToString());
                    }

                    writer.WriteElementString("title", track.Title.ToString());
                    writer.WriteElementString("creator", track.Creator.ToString());
                    writer.WriteElementString("annotation", track.Annotation.ToString());
                    writer.WriteElementString("image", track.Image.ToString());
                    writer.WriteElementString("album", track.Album.ToString());
                    writer.WriteElementString("trackNum", track.TrackNumber.ToString());
                    writer.WriteElementString("duration", track.Duration.ToString());

                    foreach (Link trackLink in track.Links)
                    {
                        writer.WriteStartElement("link");
                        writer.WriteAttributeString("rel", trackLink.Rel.ToString());
                        writer.WriteValue(trackLink.Content.ToString());
                        writer.WriteEndElement();
                    }

                    foreach (Metadata trackMetadataItem in track.Metadata)
                    {
                        writer.WriteStartElement("meta");
                        writer.WriteAttributeString("rel", trackMetadataItem.Rel.ToString());
                        writer.WriteValue(trackMetadataItem.Content);
                        writer.WriteEndElement();
                    }

                    foreach (Extension trackExtension in track.Extensions)
                    {
                        if (!string.IsNullOrEmpty(trackExtension.ContentNamespace))
                        {
                            writer.WriteStartElement("extension", trackExtension.ContentNamespace);
                        }
                        else
                        {
                            writer.WriteStartElement("extension");
                        }

                        writer.WriteAttributeString("application", trackExtension.Application.ToString());
                        foreach (XmlNode trackExtensionNode in trackExtension.Content)
                        {
                            writer.WriteRaw(trackExtensionNode.OuterXml);
                        }
                        writer.WriteEndElement();
                    }

                    writer.WriteEndElement();             //</track>
                }
                writer.WriteEndElement();                 //</trackList>

                writer.WriteEndElement();                 //</playlist>
                writer.WriteEndDocument();
                writer.Close();
            }
            catch (Exception)
            {
            }
        }