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)); }
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); }
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); }