Exemplo n.º 1
0
        /// <summary>
        /// Processes parsed area.
        /// </summary>
        /// <param name="area">Area.</param>
        private void OnAreaParsed(ParsedArea area)
        {
            if (area != null)
            {
                Areas.Add(area);
                AreasCount += 1;

                if (Areas.Count >= Settings.ChunkSize)
                {
                    OnParsing(new ParserResultEventArgs(Areas));
                    Areas.Clear();
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Converts the given tree to areas.
        /// </summary>
        /// <param name="tree">Tree to convert.</param>
        /// <param name="tags">Parent tags, if any.</param>
        private void ConvertTreeToAreas(RockClimbingComWikiTree tree, IEnumerable<string> tags)
        {
            int order = 0;
            ParsedArea area = null;
            ParsedSector sector = null;
            IList<string> areaTags = null;
            IList<string> sectorTags = null;
            RockClimbingComWiki areaWiki = null;
            RockClimbingComWikiNodeBase accumulatedSector = null;
            Dictionary<string, ParsedArea> areas = new Dictionary<string, ParsedArea>();

            if (tree != null && tree.SectorNodes.Any())
            {
                // Traversing only sector nodes - nodes where we found routes
                foreach (RockClimbingComWikiNode actualSector in tree.SectorNodes)
                {
                    // Accumulating details and routes
                    accumulatedSector = actualSector.AccumulateAll();

                    // Accumulating details for area
                    if (actualSector.Parent != null)
                        areaWiki = actualSector.Parent.AccumulateWiki();
                    else
                        areaWiki = actualSector.AccumulateWiki();

                    // Accumulating tags for area and sector
                    sectorTags = actualSector.GetTags(tags);

                    if (actualSector.Parent != null)
                        areaTags = actualSector.Parent.GetTags(tags);
                    else
                        areaTags = new List<string>(sectorTags);

                    if (accumulatedSector != null && areaWiki != null)
                    {
                        sector = new ParsedSector();

                        if (accumulatedSector.Info != null)
                        {
                            sector.Name = accumulatedSector.Info.Name;
                            sector.Description = accumulatedSector.Info.Description;
                            sector.Climbing = accumulatedSector.Info.Climbing;
                            sector.Location = accumulatedSector.Info.Location;
                            sector.Season = accumulatedSector.Info.Season;
                            sector.Origin = "http://rockclimbing.com";
                            sector.Tags = sectorTags;
                            sector.Order = (++order);
                        }

                        // Assigning all routes from the tree
                        sector.Routes = accumulatedSector.Routes;

                        // Getting image
                        if (accumulatedSector.Contents != null && accumulatedSector.Contents.Any())
                        {
                            foreach (string sectorContent in accumulatedSector.Contents)
                            {
                                sector.Image = ParseImage(sectorContent);

                                if (sector.Image != null && sector.Image.Any())
                                    break;
                            }
                        }

                        if (!areas.ContainsKey(areaWiki.Name))
                        {
                            area = new ParsedArea();

                            area.Name = areaWiki.Name;
                            area.Description = areaWiki.Description;
                            area.Climbing = areaWiki.Climbing;
                            area.Location = areaWiki.Location;
                            area.Season = areaWiki.Season;
                            area.Origin = "http://rockclimbing.com";
                            area.Tags = areaTags;

                            areas.Add(areaWiki.Name, area);
                        }

                        if (areas[areaWiki.Name].Sectors == null)
                            areas[areaWiki.Name].Sectors = new List<ParsedSector>();

                        if (sector.Routes != null && sector.Routes.Any())
                        {
                            // Adding sector to area
                            areas[areaWiki.Name].Sectors.Add(sector);
                        }
                    }
                }

                foreach (ParsedArea a in areas.Values)
                {
                    if (a.Sectors != null && a.Sectors.Any())
                        OnAreaParsed(a);
                }
            }
        }