public CachedPrefixInfo( string id, string about, PrefixVersionsIndex remoteIndex, VersionIndex[] localVersions) { Id = id; About = about; remoteIndex.Latest.TryGetValue(IndexTool.VersionTypeRelease, out var latest); var versions = new List <CachedVersionInfo>(remoteIndex.Versions.Length + localVersions.Length + 1) { new CachedVersionInfo(IndexTool.VersionAliasLatest) }; var knownIds = new HashSet <string> { IndexTool.VersionAliasLatest }; if (remoteIndex.Versions != null) { foreach (var versionEntry in remoteIndex.Versions) { if (versionEntry.Id == IndexTool.VersionAliasLatest) { continue; } knownIds.Add(versionEntry.Id); versions.Add(new CachedVersionInfo(versionEntry)); } } foreach (var versionIndex in localVersions) { if (!knownIds.Contains(versionIndex.Id)) { versions.Add(new CachedVersionInfo(versionIndex)); } } versions.Sort(); Versions = versions.Select(v => v.Id).ToArray(); LatestVersion = latest ?? (versions.Count > 0 ? versions[0].Id : null); }
private void UpdatePrefixes(IReadOnlyDictionary <string, PrefixVersionsIndex> remoteVersions) { Prefixes = new CachedPrefixInfo[_index.Prefixes.Count]; var i = 0; foreach (var(prefixId, prefix) in _index.Prefixes) { _log.Info($"Looking for cached versions in the '{prefixId}' prefix..."); if (!remoteVersions.TryGetValue(prefixId, out var versionsIndex)) { versionsIndex = new PrefixVersionsIndex(); } var localVersions = GetLocalVersions(prefixId); Prefixes[i++] = new CachedPrefixInfo(prefixId, prefix.About, versionsIndex, localVersions); } Array.Sort(Prefixes); }