示例#1
0
        private Tuple <int, DateTime> GetRevisionInfo(WikiBuildingInfo buildingInfo)
        {
            var buildingName = buildingInfo.Name.Replace(" ", "_");

            var fileName = GetCleanedFilename(buildingName);
            var wikiTextForBuildingFilePath = Path.Combine(PathToDetailsFolder, $"{fileName}{FILE_ENDING_WIKITEXT}");

            if (!File.Exists(wikiTextForBuildingFilePath))
            {
                return(null);
            }

            var revisionId = -1;
            var lastEdit   = DateTime.MinValue;

            var fileContent = File.ReadAllText(wikiTextForBuildingFilePath);

            using (var reader = new StringReader(fileContent))
            {
                string curLine;
                while ((curLine = reader.ReadLine()) != null)
                {
                    if (curLine.StartsWith(REVISION_HEADER_ID, StringComparison.OrdinalIgnoreCase))
                    {
                        var splittedLine = curLine.Split(new[] { REVISION_SEPARATOR }, StringSplitOptions.RemoveEmptyEntries);
                        if (splittedLine.Length == 2)
                        {
                            if (!int.TryParse(splittedLine[1], out revisionId))
                            {
                                revisionId = -1;
                            }
                        }
                    }
                    else if (curLine.StartsWith(REVISION_HEADER_DATE, StringComparison.OrdinalIgnoreCase))
                    {
                        var splittedLine = curLine.Split(new[] { REVISION_SEPARATOR }, StringSplitOptions.RemoveEmptyEntries);
                        if (splittedLine.Length == 2)
                        {
                            if (!DateTime.TryParseExact(splittedLine[1], "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out lastEdit))
                            {
                                lastEdit = DateTime.MinValue;
                            }
                        }
                    }
                }
            }

            return(Tuple.Create(revisionId, lastEdit));
        }
示例#2
0
        private WikiBuildingInfo CreateNewBuildingInfo(IInfobox infobox)
        {
            var result = new WikiBuildingInfo();

            result.Name              = infobox.Name;
            result.Icon              = infobox.Icon;
            result.BuildingSize      = infobox.BuildingSize;
            result.Type              = infobox.Type;
            result.ProductionInfos   = infobox.ProductionInfos;
            result.SupplyInfos       = infobox.SupplyInfos;
            result.UnlockInfos       = infobox.UnlockInfos;
            result.Url               = GetUriForBuilding(infobox.Name);
            result.ConstructionInfos = infobox.ConstructionInfos;
            result.RevisionId        = -1;
            result.RevisionDate      = DateTime.MinValue;

            return(result);
        }
示例#3
0
        private WikiBuildingInfo CopyInfoboxToBuildingInfo(IInfobox infobox, WikiBuildingInfo buildingInfo)
        {
            buildingInfo.Type              = infobox.Type;
            buildingInfo.ProductionInfos   = infobox.ProductionInfos;
            buildingInfo.SupplyInfos       = infobox.SupplyInfos;
            buildingInfo.UnlockInfos       = infobox.UnlockInfos;
            buildingInfo.Url               = GetUriForBuilding(buildingInfo.Name);
            buildingInfo.ConstructionInfos = infobox.ConstructionInfos;

            var revisionInfo = GetRevisionInfo(buildingInfo);

            if (revisionInfo != null)
            {
                buildingInfo.RevisionId   = revisionInfo.Item1;
                buildingInfo.RevisionDate = revisionInfo.Item2;
            }

            return(buildingInfo);
        }
        private WikiBuildingInfo getWikiBuildingInfo(string buildingIdentifier, BuildingPresets buildingPresets, WikiBuildingInfoPresets wikiBuildingInfoPresets)
        {
            WikiBuildingInfo result = null;

            var foundPresetBuilding = buildingPresets.Buildings.FirstOrDefault(x => x.Identifier.Equals(buildingIdentifier, StringComparison.OrdinalIgnoreCase));
            var buildingName        = foundPresetBuilding?.Localization["eng"];
            var buildingFaction     = foundPresetBuilding?.Faction;
            var buildingRegion      = WorldRegion.OldWorld;

            if (buildingFaction?.Contains("Obreros") == true || buildingFaction?.Contains("Jornaleros") == true)
            {
                buildingRegion = WorldRegion.NewWorld;
            }

            if (string.IsNullOrWhiteSpace(buildingName))
            {
                //TODO error?
                logger.Warn($"found no building name for identifier: {buildingIdentifier}");
                return(result);
            }

            //try to find by name
            result = wikiBuildingInfoPresets.Infos.FirstOrDefault(x => x.Name.Equals(buildingName, StringComparison.OrdinalIgnoreCase) && x.Region == buildingRegion);
            if (result == null)
            {
                //Is it a farm with field info? (e.g. "Potato Farm - (72)")
                var matchFieldCount = regexFieldCount.Match(buildingName);
                if (matchFieldCount.Success)
                {
                    //strip field info and search again
                    var strippedBuildingName = buildingName.Replace(matchFieldCount.Value, string.Empty).Trim();
                    result = wikiBuildingInfoPresets.Infos.FirstOrDefault(x => x.Name.Equals(strippedBuildingName, StringComparison.OrdinalIgnoreCase) && x.Region == buildingRegion);
                }
            }

            return(result);
        }
        private static WikiBuildingInfo ParseWikiBuildingInfo(WikiTextTableEntry table)
        {
            var result = new WikiBuildingInfo();

            try
            {
                result.Region = table.Region;
                result.Tier   = table.Tier;
                result.Name   = table.Name.Replace("[[", string.Empty).Replace("]]", string.Empty);
                result.Icon   = table.Icon.Replace("[[File:", string.Empty).Replace("|40px]]", string.Empty);

                if (table.Size.Contains(Environment.NewLine))
                {
                    var splitted = table.Size.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                    result.Radius = splitted[1].Replace("(", string.Empty).Replace(")", string.Empty);
                    var splittedSize = splitted[0].Split('x');
                    result.BuildingSize = new Size(int.Parse(splittedSize[0]), int.Parse(splittedSize[1]));
                }
                else if (table.Size.Contains("<br />"))
                {
                    var splitted = table.Size.Split(new[] { "<br />" }, StringSplitOptions.RemoveEmptyEntries);
                    result.Radius = splitted[1].Replace("(", string.Empty).Replace(")", string.Empty);
                    var splittedSize = splitted[0].Split('x');
                    if (!int.TryParse(splittedSize[0], out int x))
                    {
                    }

                    if (!int.TryParse(splittedSize[1], out int y))
                    {
                    }
                    result.BuildingSize = new Size(int.Parse(splittedSize[0]), int.Parse(splittedSize[1]));
                }
                else if (!string.IsNullOrWhiteSpace(table.Size))
                {
                    var splittedSize = table.Size.Split('x');
                    if (!int.TryParse(splittedSize[0], out int x))
                    {
                    }

                    if (!int.TryParse(splittedSize[1], out int y))
                    {
                    }

                    result.BuildingSize = new Size(int.Parse(splittedSize[0]), int.Parse(splittedSize[1]));
                }

                if (table.ConstructionCost.Contains("<br />"))
                {
                    var splittedInfos = table.ConstructionCost.Split(new[] { "<br />" }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var curSplittedInfo in splittedInfos)
                    {
                        var info = ParseConstructionInfo(curSplittedInfo);
                        if (info != null)
                        {
                            result.ConstructionInfos.Add(info);
                        }
                    }
                }
                else if (!string.IsNullOrWhiteSpace(table.ConstructionCost))
                {
                    var info = ParseConstructionInfo(table.ConstructionCost);
                    if (info != null)
                    {
                        result.ConstructionInfos.Add(info);
                    }
                }

                if (table.MaintenanceCost.Contains("<br />"))
                {
                    var splittedInfos = table.MaintenanceCost.Split(new[] { "<br />" }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var curSplittedInfo in splittedInfos)
                    {
                        var info = ParseMaintenanceInfo(curSplittedInfo);
                        if (info != null)
                        {
                            result.MaintenanceInfos.Add(info);
                        }
                    }
                }
                else if (!string.IsNullOrWhiteSpace(table.MaintenanceCost))
                {
                    var info = ParseMaintenanceInfo(table.MaintenanceCost);
                    if (info != null)
                    {
                        result.MaintenanceInfos.Add(info);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, $"error parsing basic info for building: {table.Name}");
                Console.WriteLine(ex);
            }

            return(result);
        }