Add release index download

This commit is contained in:
Michael Bucari-Tovo 2022-07-27 09:49:58 -06:00
parent bbe91099cb
commit 1f685ae8a0
3 changed files with 23 additions and 11 deletions

View File

@ -309,10 +309,17 @@ namespace AppScaffolding
LibraryCommands.BookUserDefinedItemCommitted += (_, books) => SearchEngineCommands.UpdateBooks(books); LibraryCommands.BookUserDefinedItemCommitted += (_, books) => SearchEngineCommands.UpdateBooks(books);
} }
public static UpgradeProperties GetLatestRelease(string regexpattern = ".*") public enum ReleaseIdentifier
{
WindowsClassic,
WindowsAvalonia,
Linux
}
public static UpgradeProperties GetLatestRelease(ReleaseIdentifier releaseID = ReleaseIdentifier.WindowsClassic)
{ {
// timed out // timed out
var latest = getLatestRelease(TimeSpan.FromSeconds(10), regexpattern); var latest = getLatestRelease(TimeSpan.FromSeconds(100), releaseID);
if (latest is null) if (latest is null)
return null; return null;
@ -337,11 +344,11 @@ namespace AppScaffolding
return new(zipUrl, latest.HtmlUrl, zip.Name, latestRelease); return new(zipUrl, latest.HtmlUrl, zip.Name, latestRelease);
} }
private static Octokit.Release getLatestRelease(TimeSpan timeout, string regexpattern) private static Octokit.Release getLatestRelease(TimeSpan timeout, ReleaseIdentifier releaseID)
{ {
try try
{ {
var task = System.Threading.Tasks.Task.Run(() => getLatestRelease(regexpattern)); var task = getLatestRelease(releaseID);
if (task.Wait(timeout)) if (task.Wait(timeout))
return task.Result; return task.Result;
@ -353,14 +360,19 @@ namespace AppScaffolding
} }
return null; return null;
} }
private static Octokit.Release getLatestRelease(string regexpattern) private static async System.Threading.Tasks.Task<Octokit.Release> getLatestRelease(ReleaseIdentifier releaseID)
{ {
var gitHubClient = new Octokit.GitHubClient(new Octokit.ProductHeaderValue("Libation")); var gitHubClient = new Octokit.GitHubClient(new Octokit.ProductHeaderValue("Libation"));
// https://octokitnet.readthedocs.io/en/latest/releases/ //Download the release index
var releases = gitHubClient.Repository.Release.GetAll("rmcrackan", "Libation").GetAwaiter().GetResult(); var bts = await gitHubClient.Repository.Content.GetRawContent("Mbucari", "Libation", ".releaseindex.json");
var releaseIndex = JObject.Parse(System.Text.Encoding.ASCII.GetString(bts));
var regexPattern = releaseIndex.Value<string>(releaseID.ToString());
var regex = new System.Text.RegularExpressions.Regex(regexpattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase); // https://octokitnet.readthedocs.io/en/latest/releases/
var releases = await gitHubClient.Repository.Release.GetAll("rmcrackan", "Libation");
var regex = new System.Text.RegularExpressions.Regex(regexPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
var latest = releases.FirstOrDefault(r => !r.Draft && !r.Prerelease && r.Assets.Any(a => regex.IsMatch(a.Name))); var latest = releases.FirstOrDefault(r => !r.Draft && !r.Prerelease && r.Assets.Any(a => regex.IsMatch(a.Name)));
return latest; return latest;
} }

View File

@ -87,7 +87,7 @@ namespace LibationAvalonia.Views
AppScaffolding.UpgradeProperties upgradeProperties; AppScaffolding.UpgradeProperties upgradeProperties;
try try
{ {
upgradeProperties = AppScaffolding.LibationScaffolding.GetLatestRelease(@"Libation\.\d+\.\d+\.\d+-win-avalonia.zip"); upgradeProperties = AppScaffolding.LibationScaffolding.GetLatestRelease(AppScaffolding.LibationScaffolding.ReleaseIdentifier.WindowsAvalonia);
if (upgradeProperties is null) if (upgradeProperties is null)
return; return;
@ -104,7 +104,7 @@ namespace LibationAvalonia.Views
return; return;
} }
//Silently download the update in the background, ave it to a temp file. //Silently download the update in the background, save it to a temp file.
var zipPath = System.IO.Path.GetTempFileName(); var zipPath = System.IO.Path.GetTempFileName();
try try

View File

@ -170,7 +170,7 @@ namespace LibationWinForms
try try
{ {
upgradeProperties = AppScaffolding.LibationScaffolding.GetLatestRelease(@"Libation\.\d+\.\d+\.\d+-win.zip"); upgradeProperties = AppScaffolding.LibationScaffolding.GetLatestRelease(AppScaffolding.LibationScaffolding.ReleaseIdentifier.WindowsClassic);
if (upgradeProperties is null) if (upgradeProperties is null)
return; return;
} }