/* * Copyright (c) 2023 Proton AG * * This file is part of ProtonVPN. * * ProtonVPN is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ProtonVPN is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ProtonVPN. If not, see . */ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using ProtonVPN.Logging.Contracts; using ProtonVPN.Logging.Contracts.Events.AppUpdateLogs; using ProtonVPN.Update.Responses; namespace ProtonVPN.Update.Releases; /// /// Transforms deserialized release data (stream of ) into stream of . /// public class Releases : IEnumerable { private readonly ILogger _logger; private readonly IEnumerable _releases; private readonly Version _currentVersion; private readonly string _earlyAccessCategoryName; public Releases(ILogger logger, IEnumerable releases, Version currentVersion, string earlyAccessCategoryName) { _logger = logger; _releases = releases; _currentVersion = currentVersion; _earlyAccessCategoryName = earlyAccessCategoryName; } public IEnumerator GetEnumerator() { foreach (ReleaseResponse release in _releases) { if (release == null) { continue; } bool isEarlyAccess = string.Equals(_earlyAccessCategoryName, release.CategoryName, StringComparison.OrdinalIgnoreCase); if (Version.TryParse(release.Version, out Version version)) { yield return new Release { ChangeLog = release.ReleaseNotes.FirstOrDefault()?.Notes ?? [], IsEarlyAccess = isEarlyAccess, File = release.File, IsNew = version > _currentVersion, Version = version, ReleaseDate = release.ReleaseDate }; } else { _logger.Error($"Failed to parse release version {release.Version}."); } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }