private ObservableCollection <StatisticsBuilding> GetStatisticBuildings(IEnumerable <IGrouping <string, LayoutObject> > groupedBuildingsByIdentifier, BuildingPresets buildingPresets) { if (groupedBuildingsByIdentifier is null || !groupedBuildingsByIdentifier.Any()) { return(new ObservableCollection <StatisticsBuilding>()); } var tempList = new List <StatisticsBuilding>(); var validBuildingsGrouped = groupedBuildingsByIdentifier .Where(_ => !_.ElementAt(0).WrappedAnnoObject.Road&& _.ElementAt(0).Identifier != null) .Where(x => x.AsEnumerable().WithoutIgnoredObjects().Count() > 0) .OrderByDescending(_ => _.Count()); foreach (var item in validBuildingsGrouped) { var statisticBuilding = new StatisticsBuilding(); var identifierToCheck = item.ElementAt(0).Identifier; if (!string.IsNullOrWhiteSpace(identifierToCheck)) { //try to find building in presets by identifier if (!_cachedPresetsBuilding.TryGetValue(identifierToCheck, out var building)) { building = buildingPresets.Buildings.Find(_ => string.Equals(_.Identifier, identifierToCheck, StringComparison.OrdinalIgnoreCase)); _cachedPresetsBuilding.TryAdd(identifierToCheck, building); } var isUnknownObject = string.Equals(identifierToCheck, "Unknown Object", StringComparison.OrdinalIgnoreCase); if (building != null || isUnknownObject) { statisticBuilding.Count = item.Count(); statisticBuilding.Name = isUnknownObject ? _localizationHelper.GetLocalization("UnknownObject") : building.Localization[_commons.CurrentLanguageCode]; } else { /// Ruled those 2 out to keep Building Name Changes done through the Labeling of the building /// and when the building is not in the preset. Those statisticBuildings.name will not translated to /// other luangages anymore, as users can give there own names. /// However i made it so, that if localizations get those translations, it will translated. /// 06-02-2021, on request of user(s) on Discord read this on /// https://discord.com/channels/571011757317947406/571011757317947410/800118895855665203 //item.ElementAt(0).Identifier = ""; //statisticBuilding.Name = _localizationHelper.GetLocalization("StatNameNotFound"); statisticBuilding.Count = item.Count(); statisticBuilding.Name = _localizationHelper.GetLocalization(item.ElementAt(0).Identifier); } } else { statisticBuilding.Count = item.Count(); statisticBuilding.Name = _localizationHelper.GetLocalization("StatNameNotFound"); } tempList.Add(statisticBuilding); } return(new ObservableCollection <StatisticsBuilding>(tempList.OrderByDescending(x => x.Count).ThenBy(x => x.Name, StringComparer.OrdinalIgnoreCase))); }
private ObservableCollection <StatisticsBuilding> GetStatisticBuildings(IEnumerable <IGrouping <string, AnnoObject> > groupedBuildingsByIdentifier, BuildingPresets buildingPresets) { var result = new ObservableCollection <StatisticsBuilding>(); if (groupedBuildingsByIdentifier == null) { return(result); } var language = Localization.Localization.GetLanguageCodeFromName(MainWindow.SelectedLanguage); var tempList = new List <StatisticsBuilding>(); foreach (var item in groupedBuildingsByIdentifier .Where(_ => !_.ElementAt(0).Road&& _.ElementAt(0).Identifier != null) .OrderByDescending(_ => _.Count())) { var statisticBuilding = new StatisticsBuilding(); if (!string.IsNullOrWhiteSpace(item.ElementAt(0).Identifier)) { var building = buildingPresets.Buildings.FirstOrDefault(_ => _.Identifier == item.ElementAt(0).Identifier); if (building != null || item.ElementAt(0).Identifier == "Unknown Object") { if (item.ElementAt(0).Identifier == "Unknown Object") { statisticBuilding.Count = item.Count(); statisticBuilding.Name = Localization.Localization.Translations[language]["UnknownObject"]; } else { statisticBuilding.Count = item.Count(); statisticBuilding.Name = building.Localization[language]; } } else { item.ElementAt(0).Identifier = ""; statisticBuilding.Count = item.Count(); statisticBuilding.Name = TextNameNotFound; } } else { statisticBuilding.Count = item.Count(); statisticBuilding.Name = TextNameNotFound; } tempList.Add(statisticBuilding); } foreach (var curBuilding in tempList.OrderByDescending(x => x.Count).ThenBy(x => x.Name, StringComparer.OrdinalIgnoreCase)) { result.Add(curBuilding); } return(result); }
private ObservableCollection <StatisticsBuilding> GetStatisticBuildings(IEnumerable <IGrouping <string, LayoutObject> > groupedBuildingsByIdentifier, BuildingPresets buildingPresets) { if (groupedBuildingsByIdentifier == null) { return(new ObservableCollection <StatisticsBuilding>()); } var language = Localization.Localization.GetLanguageCodeFromName(_commons.SelectedLanguage); var tempList = new List <StatisticsBuilding>(); var validBuildingsGrouped = groupedBuildingsByIdentifier .Where(_ => !_.ElementAt(0).WrappedAnnoObject.Road&& _.ElementAt(0).Identifier != null) .OrderByDescending(_ => _.Count()); foreach (var item in validBuildingsGrouped) { var statisticBuilding = new StatisticsBuilding(); var identifierToCheck = item.ElementAt(0).Identifier; if (!string.IsNullOrWhiteSpace(identifierToCheck)) { //try to find building in presets by identifier if (!_cachedPresetsBuilding.TryGetValue(identifierToCheck, out var building)) { building = buildingPresets.Buildings.Find(_ => string.Equals(_.Identifier, identifierToCheck, StringComparison.OrdinalIgnoreCase)); _cachedPresetsBuilding.Add(identifierToCheck, building); } var isUnknownObject = string.Equals(identifierToCheck, "Unknown Object", StringComparison.OrdinalIgnoreCase); if (building != null || isUnknownObject) { statisticBuilding.Count = item.Count(); statisticBuilding.Name = isUnknownObject ? Localization.Localization.Translations[language]["UnknownObject"] : building.Localization[language]; } else { item.ElementAt(0).Identifier = ""; statisticBuilding.Count = item.Count(); statisticBuilding.Name = TextNameNotFound; } } else { statisticBuilding.Count = item.Count(); statisticBuilding.Name = TextNameNotFound; } tempList.Add(statisticBuilding); } return(new ObservableCollection <StatisticsBuilding>(tempList.OrderByDescending(x => x.Count).ThenBy(x => x.Name, StringComparer.OrdinalIgnoreCase))); }