Ejemplo n.º 1
0
        /// <summary>Get the latest beta download for a SMAPI release.</summary>
        /// <param name="release">The SMAPI release.</param>
        private IndexVersionModel GetBetaDownload(GitRelease release)
        {
            // get download with the latest version
            SemanticVersionImpl latestVersion = null;
            string latestUrl = null;

            foreach (GitAsset asset in release.Assets ?? new GitAsset[0])
            {
                // parse version
                Match versionMatch = Regex.Match(asset.FileName, @"SMAPI-([\d\.]+(?:-.+)?)-installer.zip");
                if (!versionMatch.Success || !SemanticVersionImpl.TryParse(versionMatch.Groups[1].Value, out SemanticVersionImpl version))
                {
                    continue;
                }

                // save latest version
                if (latestVersion == null || latestVersion.CompareTo(version) < 0)
                {
                    latestVersion = version;
                    latestUrl     = asset.DownloadUrl;
                }
            }

            // return if prerelease
            return(latestVersion?.Tag != null
                ? new IndexVersionModel(latestVersion.ToString(), release.Body, latestUrl, null)
                : null);
        }
Ejemplo n.º 2
0
 /*********
 ** Public methods
 *********/
 /// <summary>Construct an instance.</summary>
 /// <param name="release">The underlying GitHub release.</param>
 /// <param name="asset">The underlying download asset.</param>
 /// <param name="version">The SMAPI version.</param>
 /// <param name="isBeta">Whether this is a beta download.</param>
 /// <param name="isForDevs">Whether this is a 'for developers' download.</param>
 public ReleaseVersion(GitRelease release, GitAsset asset, SemanticVersionImpl version, bool isBeta, bool isForDevs)
 {
     this.Release   = release;
     this.Asset     = asset;
     this.Version   = version;
     this.IsBeta    = isBeta;
     this.IsForDevs = isForDevs;
 }
Ejemplo n.º 3
0
        /// <summary>Parse a version string without throwing an exception if it fails.</summary>
        /// <param name="version">The version string.</param>
        /// <param name="parsed">The parsed representation.</param>
        /// <returns>Returns whether parsing the version succeeded.</returns>
        internal static bool TryParse(string version, out ISemanticVersion parsed)
        {
            if (SemanticVersionImpl.TryParse(version, out SemanticVersionImpl versionImpl))
            {
                parsed = new SemanticVersion(versionImpl);
                return(true);
            }

            parsed = null;
            return(false);
        }
Ejemplo n.º 4
0
        /// <summary>Get a parsed list of SMAPI downloads for a release.</summary>
        /// <param name="release">The GitHub release.</param>
        private IEnumerable <ReleaseVersion> ParseReleaseVersions(GitRelease release)
        {
            if (release?.Assets == null)
            {
                yield break;
            }

            foreach (GitAsset asset in release.Assets)
            {
                Match match = Regex.Match(asset.FileName, @"SMAPI-(?<version>[\d\.]+(?:-.+)?)-installer(?<forDevs>-for-developers)?.zip");
                if (!match.Success || !SemanticVersionImpl.TryParse(match.Groups["version"].Value, out SemanticVersionImpl version))
                {
                    continue;
                }
                bool isBeta    = version.Tag != null;
                bool isForDevs = match.Groups["forDevs"].Success;

                yield return(new ReleaseVersion(release, asset, version, isBeta, isForDevs));
            }
        }
Ejemplo n.º 5
0
 /*********
 ** Private methods
 *********/
 /// <summary>Construct an instance.</summary>
 /// <param name="version">The underlying semantic version implementation.</param>
 private SemanticVersion(SemanticVersionImpl version)
 {
     this.Version = version;
 }