summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Controllers
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI.Web/Controllers')
-rw-r--r--src/SMAPI.Web/Controllers/IndexController.cs52
-rw-r--r--src/SMAPI.Web/Controllers/ModsApiController.cs7
2 files changed, 19 insertions, 40 deletions
diff --git a/src/SMAPI.Web/Controllers/IndexController.cs b/src/SMAPI.Web/Controllers/IndexController.cs
index 080285ab..f2f4c342 100644
--- a/src/SMAPI.Web/Controllers/IndexController.cs
+++ b/src/SMAPI.Web/Controllers/IndexController.cs
@@ -57,21 +57,16 @@ namespace StardewModdingAPI.Web.Controllers
{
// choose versions
ReleaseVersion[] versions = await this.GetReleaseVersionsAsync();
- ReleaseVersion stableVersion = versions.LastOrDefault(version => !version.IsBeta && !version.IsForDevs);
- ReleaseVersion stableVersionForDevs = versions.LastOrDefault(version => !version.IsBeta && version.IsForDevs);
- ReleaseVersion betaVersion = versions.LastOrDefault(version => version.IsBeta && !version.IsForDevs);
- ReleaseVersion betaVersionForDevs = versions.LastOrDefault(version => version.IsBeta && version.IsForDevs);
+ ReleaseVersion stableVersion = versions.LastOrDefault(version => !version.IsForDevs);
+ ReleaseVersion stableVersionForDevs = versions.LastOrDefault(version => version.IsForDevs);
// render view
IndexVersionModel stableVersionModel = stableVersion != null
? new IndexVersionModel(stableVersion.Version.ToString(), stableVersion.Release.Body, stableVersion.Asset.DownloadUrl, stableVersionForDevs?.Asset.DownloadUrl)
- : new IndexVersionModel("unknown", "", "https://github.com/Pathoschild/SMAPI/releases", null); // just in case something goes wrong)
- IndexVersionModel betaVersionModel = betaVersion != null && this.SiteConfig.BetaEnabled
- ? new IndexVersionModel(betaVersion.Version.ToString(), betaVersion.Release.Body, betaVersion.Asset.DownloadUrl, betaVersionForDevs?.Asset.DownloadUrl)
- : null;
+ : new IndexVersionModel("unknown", "", "https://github.com/Pathoschild/SMAPI/releases", null); // just in case something goes wrong
// render view
- var model = new IndexModel(stableVersionModel, betaVersionModel, this.SiteConfig.BetaBlurb, this.SiteConfig.SupporterList);
+ var model = new IndexModel(stableVersionModel, this.SiteConfig.OtherBlurb, this.SiteConfig.SupporterList);
return this.View(model);
}
@@ -93,27 +88,12 @@ namespace StardewModdingAPI.Web.Controllers
{
entry.AbsoluteExpiration = DateTimeOffset.UtcNow.Add(this.CacheTime);
- // get latest release (whether preview or stable)
- GitRelease stableRelease = await this.GitHub.GetLatestReleaseAsync(this.RepositoryName, includePrerelease: true);
+ // get latest stable release
+ GitRelease release = await this.GitHub.GetLatestReleaseAsync(this.RepositoryName, includePrerelease: false);
- // split stable/prerelease if applicable
- GitRelease betaRelease = null;
- if (stableRelease.IsPrerelease)
+ // strip 'noinclude' blocks from release description
+ if (release != null)
{
- GitRelease result = await this.GitHub.GetLatestReleaseAsync(this.RepositoryName, includePrerelease: false);
- if (result != null)
- {
- betaRelease = stableRelease;
- stableRelease = result;
- }
- }
-
- // strip 'noinclude' blocks from release descriptions
- foreach (GitRelease release in new[] { stableRelease, betaRelease })
- {
- if (release == null)
- continue;
-
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(release.Body);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//*[@class='noinclude']")?.ToArray() ?? new HtmlNode[0])
@@ -122,10 +102,8 @@ namespace StardewModdingAPI.Web.Controllers
}
// get versions
- ReleaseVersion[] stableVersions = this.ParseReleaseVersions(stableRelease).ToArray();
- ReleaseVersion[] betaVersions = this.ParseReleaseVersions(betaRelease).ToArray();
- return stableVersions
- .Concat(betaVersions)
+ return this
+ .ParseReleaseVersions(release)
.OrderBy(p => p.Version)
.ToArray();
});
@@ -146,10 +124,9 @@ namespace StardewModdingAPI.Web.Controllers
Match match = Regex.Match(asset.FileName, @"SMAPI-(?<version>[\d\.]+(?:-.+)?)-installer(?<forDevs>-for-developers)?.zip");
if (!match.Success || !SemanticVersion.TryParse(match.Groups["version"].Value, out ISemanticVersion version))
continue;
- bool isBeta = version.IsPrerelease();
bool isForDevs = match.Groups["forDevs"].Success;
- yield return new ReleaseVersion(release, asset, version, isBeta, isForDevs);
+ yield return new ReleaseVersion(release, asset, version, isForDevs);
}
}
@@ -168,9 +145,6 @@ namespace StardewModdingAPI.Web.Controllers
/// <summary>The SMAPI version.</summary>
public ISemanticVersion Version { get; }
- /// <summary>Whether this is a beta download.</summary>
- public bool IsBeta { get; }
-
/// <summary>Whether this is a 'for developers' download.</summary>
public bool IsForDevs { get; }
@@ -182,14 +156,12 @@ namespace StardewModdingAPI.Web.Controllers
/// <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, ISemanticVersion version, bool isBeta, bool isForDevs)
+ public ReleaseVersion(GitRelease release, GitAsset asset, ISemanticVersion version, bool isForDevs)
{
this.Release = release;
this.Asset = asset;
this.Version = version;
- this.IsBeta = isBeta;
this.IsForDevs = isForDevs;
}
}
diff --git a/src/SMAPI.Web/Controllers/ModsApiController.cs b/src/SMAPI.Web/Controllers/ModsApiController.cs
index dcddaf10..37d763cc 100644
--- a/src/SMAPI.Web/Controllers/ModsApiController.cs
+++ b/src/SMAPI.Web/Controllers/ModsApiController.cs
@@ -81,6 +81,8 @@ namespace StardewModdingAPI.Web.Controllers
if (model?.Mods == null)
return new ModEntryModel[0];
+ ModUpdateCheckConfig config = this.Config.Value;
+
// fetch wiki data
WikiModEntry[] wikiData = this.WikiCache.GetWikiMods().Select(p => p.Data).ToArray();
IDictionary<string, ModEntryModel> mods = new Dictionary<string, ModEntryModel>(StringComparer.CurrentCultureIgnoreCase);
@@ -89,6 +91,11 @@ namespace StardewModdingAPI.Web.Controllers
if (string.IsNullOrWhiteSpace(mod.ID))
continue;
+ // special case: if this is an update check for the official SMAPI repo, check the Nexus mod page for beta versions
+ if (mod.ID == config.SmapiInfo.ID && mod.UpdateKeys?.Any(key => key == config.SmapiInfo.DefaultUpdateKey) == true && mod.InstalledVersion?.IsPrerelease() == true)
+ mod.UpdateKeys = mod.UpdateKeys.Concat(config.SmapiInfo.AddBetaUpdateKeys).ToArray();
+
+ // fetch result
ModEntryModel result = await this.GetModData(mod, wikiData, model.IncludeExtendedMetadata, model.ApiVersion);
if (!model.IncludeExtendedMetadata && (model.ApiVersion == null || mod.InstalledVersion == null))
{