/// <summary> /// <para>does not map <see cref="ModData.GroupedReleases"/></para> /// </summary> /// <param name="entry"></param> /// <param name="result"></param> /// <returns></returns> public ModData MapToModData(ResultEntryFull entry, ModData?result = null) { if (result == null) { result = new ModData(); } result.DownloadsCount = entry.DownloadsCount; result.Name = entry.Name; result.Owner = entry.Owner; result.GroupedReleases ??= new Dictionary <FactorioVersion, List <ReleaseData> >(); result.Summary = entry.Summary; result.Title = entry.Title; result.Changelog = entry.Changelog; result.CreatedAt = entry.CreatedAt; result.Description = entry.Description; result.GithubPath = entry.GithubPath; result.Homepage = entry.Homepage; return(result); }
public void SyncMod(ResultEntry portalEntry, ResultEntryFull portalEntryFull, ModData modData) { mapperService.MapToModData(portalEntryFull, modData); var duplicateVersions = new HashSet <string>(); var existingReleasesMap = new Dictionary <string, ReleaseData>(); foreach (var release in modData.GroupedReleases .SelectMany(g => g.Value)) { string version = release.Version.ToString(); if (existingReleasesMap.ContainsKey(version)) { existingReleasesMap.Remove(version); duplicateVersions.Add(version); } else if (!duplicateVersions.Contains(version)) { existingReleasesMap.Add(version, release); } } modData.GroupedReleases = new Dictionary <FactorioVersion, List <ReleaseData> >(); foreach (var portalRelease in portalEntryFull.Releases.OrderByDescending(r => r.ReleasedAt)) { ReleaseData releaseData; if (existingReleasesMap.TryGetValue(portalRelease.Version, out var release) && release.ReleasedAt == portalRelease.ReleasedAt) { releaseData = release; } else { releaseData = mapperService.MapToReleaseData(modData, portalRelease); if (portalRelease.InfoJson.Dependencies != null) { foreach (var dependency in portalRelease.InfoJson.Dependencies.dependencies) { releaseData.Dependencies.Add(new ModDependency(releaseData, dependency)); } } } if (!modData.GroupedReleases.TryGetValue(releaseData.FactorioVersion, out var releases)) { releases = new List <ReleaseData>(); modData.GroupedReleases.Add(releaseData.FactorioVersion, releases); } releases.Add(releaseData); if (releaseData.ReleasedAt == portalEntry.LatestRelease.ReleasedAt) { modData.LatestRelease = releaseData; } } if (modData.GroupedReleases.Count == 0) { modData.LatestRelease = null; } }