예제 #1
0
        /// <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);
        }
예제 #2
0
        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;
            }
        }