/// <summary> /// Añade las entradas OPML a las categorías /// </summary> private void AddOpmlEntries(DesktopFilesChannel channel, DesktopFilesEntry parent, Data.OPMLEntriesCollection opmlEntries) { foreach (Data.OPMLEntry channelEntry in opmlEntries) { DesktopFilesEntry entry = new DesktopFilesEntry(); // Asigna las propiedades entry.Text = channelEntry.Title; if (string.IsNullOrEmpty(entry.Text)) { entry.Text = channelEntry.Text; } entry.URL = channelEntry.URL; entry.NumberNotRead = 0; // Añade la entrada if (parent == null) { channel.Entries.Add(entry); } else { parent.Entries.Add(entry); } // Añade las entradas OPML hijas AddOpmlEntries(channel, entry, channelEntry.Entries); } }
/// <summary> /// Convierte un canal OPML a un canal DestopFiles /// </summary> public DesktopFilesChannel Convert(Data.OPMLChannel channel) { DesktopFilesChannel desktopChannel = new DesktopFilesChannel(); // Asigna las propiedades al canal desktopChannel.DateCreated = channel.DateCreated; desktopChannel.DateModified = channel.DateModified; desktopChannel.Title = channel.Title; // Añade las entradas AddOpmlEntries(desktopChannel, null, channel.Entries); // Devuelve el canal return(desktopChannel); }
/// <summary> /// Obtiene el builder XML de un objeto Atom /// </summary> private MLFile GetFile(DesktopFilesChannel channel) { MLFile file = new MLFile(); MLNode node = file.Nodes.Add(DesktopFilesConstTags.cnstStrRoot); // Añade los atributos de la cabecera node.Attributes.Add("version", "1.0"); // Obtiene el XML de los datos node.Nodes.Add(DesktopFilesConstTags.cnsttitle, channel.Title); node.Nodes.Add(DesktopFilesConstTags.cnstStrDateCreated, DateTimeHelper.ToStringRfc822(channel.DateCreated)); node.Nodes.Add(DesktopFilesConstTags.cnstStrDateModified, DateTimeHelper.ToStringRfc822(channel.DateModified)); // Obtiene el XML de los elementos AddEntries(node, channel.Entries); // Devuelve los datos return(file); }
/// <summary> /// Interpreta un archivo /// </summary> public DesktopFilesChannel Parse(string fileName) { DesktopFilesChannel channel = null; MLFile fileML = new XMLParser().Load(fileName); // Lee los datos if (fileML != null) { foreach (MLNode node in fileML.Nodes) { if (node.Name == DesktopFilesConstTags.cnstStrRoot) { // Crea el objeto channel = new DesktopFilesChannel(); // Carga los datos foreach (MLNode objMLDesktop in node.Nodes) { switch (objMLDesktop.Name) { case DesktopFilesConstTags.cnsttitle: channel.Title = objMLDesktop.Value; break; case DesktopFilesConstTags.cnstStrDateCreated: channel.DateCreated = objMLDesktop.Value.GetDateTime(DateTime.Now); break; case DesktopFilesConstTags.cnstStrDateModified: channel.DateModified = objMLDesktop.Value.GetDateTime(DateTime.Now); break; case DesktopFilesConstTags.cnstStrOutline: channel.Entries.Add(ParseEntry(objMLDesktop)); break; } } } } } // Devuelve los datos del canal return(channel); }
/// <summary> /// Graba los datos de un objeto OPML en un archivo XML /// </summary> public void Save(DesktopFilesChannel channel, string fileName) { new XMLWriter().Save(fileName, GetFile(channel)); }
/// <summary> /// Obtiene el XML de un canal DesktopFiles /// </summary> public string GetXML(DesktopFilesChannel channel) { return(GetFile(channel).ToString()); }