Exemplo n.º 1
0
        /// <summary>
        ///		Carga las categorías de un proyecto
        /// </summary>
        private CategoryModelCollection LoadCategories(Project objTfsProject)
        {
            CategoryModelCollection objColCategories = new CategoryModelCollection();

            // Carga las categorías
            if (objTfsProject != null)
            {                                     // Asigna las categorías
                for (int intIndex = 0; intIndex < objTfsProject.Categories.Count; intIndex++)
                {
                    CategoryModel objCategory = new CategoryModel();

                    // Asigna los datos de la categoría
                    objCategory.ID          = intIndex;
                    objCategory.Name        = objTfsProject.Categories[intIndex].Name;
                    objCategory.Description = objTfsProject.Categories[intIndex].ReferenceName;
                    // Añade la categoría a la colección
                    objColCategories.Add(objCategory);
                    // Añade los tipos de categorías
                    foreach (WorkItemType objItemType in objTfsProject.Categories[intIndex].WorkItemTypes)
                    {
                        objCategory.TaskTypes.Add(new CategoryModel {
                            Name = objItemType.Name, Description = objItemType.Description
                        });
                    }
                }
            }
            // Devuelve la colección de categorías
            return(objColCategories);
        }
        /// <summary>
        ///		Descarga las entradas de un canal
        /// </summary>
        internal async Task <CategoryModelCollection> DownloadChannelAsync(TrackModel track)
        {
            CategoryModelCollection categories = new CategoryModelCollection();
            string content = await DownloadAsync(track.Url);

            // Interpreta la cadena descargada
            if (!string.IsNullOrWhiteSpace(content))
            {
                // Interpreta las categorías
                categories = new CategoriesRepository().LoadCategories(track, content);
                // Modifica las direcciones de imagen y los vídeos
                UpdateUrls(categories);
            }
            // Devuelve la colección de entradas
            return(categories);
        }
        /// <summary>
        ///		Obtiene los nodos de las categorías
        /// </summary>
        private MLNodesCollection GetCategoriesNodes(CategoryModelCollection categories)
        {
            MLNodesCollection nodesML = new MLNodesCollection();

            // Crea los nodos
            foreach (CategoryModel category in categories)
            {
                MLNode nodeML = nodesML.Add(TagCategory);

                // Asigna las propiedades
                nodeML.Attributes.Add(TagId, category.Id);
                nodeML.Nodes.Add(TagName, category.Title);
                // Añade las entradas
                nodeML.Nodes.AddRange(GetEntriesNodes(category.Entries));
            }
            // Devuelve la colección
            return(nodesML);
        }
        /// <summary>
        ///		Modifica las Urls de vídeo e imagen de las categorías
        /// </summary>
        private void UpdateUrls(CategoryModelCollection categories)
        {
            FeedsManager manager = new FeedsManager();

            // Modifica las Url de las entradas de las categorías
            foreach (CategoryModel category in categories)
            {
                foreach (EntryModel entry in category.Entries)
                {
                    string videoCode = entry.GetUrlVideoCode();

                    if (!string.IsNullOrWhiteSpace(videoCode))
                    {
                        // Modifica la Url de la imagen
                        if (string.IsNullOrWhiteSpace(entry.UrlImage))
                        {
                            entry.UrlImage = manager.GetUriThumbnailYouTube(videoCode)?.ToString();
                        }
                    }
                }
            }
        }
        /// <summary>
        ///		Carga las categorías de un canal
        /// </summary>
        internal CategoryModelCollection LoadCategories(TrackModel track, string xml)
        {
            CategoryModelCollection categories = new CategoryModelCollection();
            MLFile fileML = new LibMarkupLanguage.Services.XML.XMLParser().ParseText(xml);

            // Carga el archivo
            if (fileML != null)
            {
                foreach (MLNode rootML in fileML.Nodes)
                {
                    if (rootML.Name == TagRoot)
                    {
                        foreach (MLNode categoryML in rootML.Nodes)
                        {
                            if (categoryML.Name == TagCategory)
                            {
                                CategoryModel category = new CategoryModel(track);

                                // Asigna las propiedades
                                category.Id    = categoryML.Attributes[TagId].Value;
                                category.Title = categoryML.Nodes[TagName].Value;
                                // Carga las entradas
                                foreach (MLNode nodeML in categoryML.Nodes)
                                {
                                    if (nodeML.Name == EntriesRepository.TagConference)
                                    {
                                        category.Entries.Add(new EntriesRepository().LoadEntry(nodeML));
                                    }
                                }
                                // Añade la categoría a la colección
                                categories.Add(category);
                            }
                        }
                    }
                }
            }
            // Devuelve la colección de categorías
            return(categories);
        }
        /// <summary>
        ///		Carga las categorías de un nodo
        /// </summary>
        private CategoryModelCollection LoadCategories(TrackModel track, MLNode rootML)
        {
            CategoryModelCollection categories = new CategoryModelCollection();

            // Carga las categorías
            foreach (MLNode nodeML in rootML.Nodes)
            {
                if (nodeML.Name == TagCategory)
                {
                    CategoryModel category = new CategoryModel(track);

                    // Carga las propiedades
                    category.Id    = nodeML.Attributes[TagId].Value;
                    category.Title = nodeML.Nodes[TagName].Value;
                    // Carga las entradas
                    category.Entries.AddRange(LoadEntries(nodeML));
                    // Añade la categoría
                    categories.Add(category);
                }
            }
            // Devuelve la colección
            return(categories);
        }