mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 17:56:51 +13:00
GitHub update checker code refactoring
This commit is contained in:
parent
1b9a39b42b
commit
aa8334f439
1 changed files with 82 additions and 79 deletions
|
@ -41,13 +41,7 @@ public class GitHubUpdateChecker : UpdateChecker
|
|||
|
||||
private const string APIURL = "https://api.github.com";
|
||||
|
||||
private string ReleasesURL
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format("{0}/repos/{1}/{2}/releases", APIURL, Owner, Repo);
|
||||
}
|
||||
}
|
||||
private string ReleasesURL => $"{APIURL}/repos/{Owner}/{Repo}/releases";
|
||||
|
||||
public GitHubUpdateChecker(string owner, string repo)
|
||||
{
|
||||
|
@ -59,59 +53,12 @@ public override void CheckUpdate()
|
|||
{
|
||||
try
|
||||
{
|
||||
List<GitHubRelease> releases = GetReleases();
|
||||
GitHubRelease latestRelease = GetLatestRelease(IncludePreRelease);
|
||||
|
||||
if (releases != null && releases.Count > 0)
|
||||
if (UpdateReleaseInfo(latestRelease, IsPortable, IsPortable ? true : false))
|
||||
{
|
||||
GitHubRelease latestRelease;
|
||||
|
||||
if (IncludePreRelease)
|
||||
{
|
||||
latestRelease = releases[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
latestRelease = releases.FirstOrDefault(x => !x.prerelease);
|
||||
}
|
||||
|
||||
if (latestRelease != null && !string.IsNullOrEmpty(latestRelease.tag_name) && latestRelease.tag_name.Length > 1 && latestRelease.tag_name[0] == 'v')
|
||||
{
|
||||
LatestVersion = new Version(latestRelease.tag_name.Substring(1));
|
||||
|
||||
if (latestRelease.assets != null && latestRelease.assets.Count > 0)
|
||||
{
|
||||
string extension;
|
||||
|
||||
if (IsPortable)
|
||||
{
|
||||
extension = "portable.zip";
|
||||
}
|
||||
else
|
||||
{
|
||||
extension = ".exe";
|
||||
}
|
||||
|
||||
foreach (GitHubAsset asset in latestRelease.assets)
|
||||
{
|
||||
if (asset != null && !string.IsNullOrEmpty(asset.name) && asset.name.EndsWith(extension, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
Filename = asset.name;
|
||||
|
||||
if (IsPortable)
|
||||
{
|
||||
DownloadURL = asset.browser_download_url;
|
||||
}
|
||||
else
|
||||
{
|
||||
DownloadURL = asset.url;
|
||||
}
|
||||
|
||||
RefreshStatus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
RefreshStatus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -122,13 +69,20 @@ public override void CheckUpdate()
|
|||
Status = UpdateStatus.UpdateCheckFailed;
|
||||
}
|
||||
|
||||
public string GetLatestDownloadURL()
|
||||
public string GetLatestDownloadURL(bool includePreRelease, bool isPortable, bool isBrowserDownloadURL)
|
||||
{
|
||||
List<GitHubRelease> releases = GetReleases();
|
||||
|
||||
if (releases != null && releases.Count > 0)
|
||||
try
|
||||
{
|
||||
return GetDownloadURL(releases[0]);
|
||||
GitHubRelease latestRelease = GetLatestRelease(includePreRelease);
|
||||
|
||||
if (UpdateReleaseInfo(latestRelease, isPortable, isBrowserDownloadURL))
|
||||
{
|
||||
return DownloadURL;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
DebugHelper.WriteException(e);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -140,27 +94,12 @@ public string GetDownloadCounts()
|
|||
|
||||
foreach (GitHubRelease release in GetReleases().Where(x => x.assets != null && x.assets.Count > 0))
|
||||
{
|
||||
sb.AppendFormat("{0} ({1}): {2}\r\n", release.name, DateTime.Parse(release.published_at), release.assets.Sum(x => x.download_count));
|
||||
sb.AppendFormat("{0} ({1}): {2}{3}", release.name, DateTime.Parse(release.published_at), release.assets.Sum(x => x.download_count), Environment.NewLine);
|
||||
}
|
||||
|
||||
return sb.ToString().Trim();
|
||||
}
|
||||
|
||||
private string GetDownloadURL(GitHubRelease release)
|
||||
{
|
||||
if (release.assets != null && release.assets.Count > 0)
|
||||
{
|
||||
GitHubAsset asset = release.assets[0];
|
||||
|
||||
if (asset != null && !string.IsNullOrEmpty(asset.name))
|
||||
{
|
||||
return string.Format("https://github.com/{0}/{1}/releases/download/{2}/{3}", Owner, Repo, release.tag_name, asset.name);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<GitHubRelease> GetReleases()
|
||||
{
|
||||
using (WebClient wc = new WebClient())
|
||||
|
@ -179,6 +118,70 @@ private List<GitHubRelease> GetReleases()
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
private GitHubRelease GetLatestRelease(bool includePreRelease)
|
||||
{
|
||||
GitHubRelease latestRelease = null;
|
||||
|
||||
List<GitHubRelease> releases = GetReleases();
|
||||
|
||||
if (releases != null && releases.Count > 0)
|
||||
{
|
||||
if (includePreRelease)
|
||||
{
|
||||
latestRelease = releases[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
latestRelease = releases.FirstOrDefault(x => !x.prerelease);
|
||||
}
|
||||
}
|
||||
|
||||
return latestRelease;
|
||||
}
|
||||
|
||||
public bool UpdateReleaseInfo(GitHubRelease release, bool isPortable, bool isBrowserDownloadURL)
|
||||
{
|
||||
if (release != null && !string.IsNullOrEmpty(release.tag_name) && release.tag_name.Length > 1 && release.tag_name[0] == 'v')
|
||||
{
|
||||
LatestVersion = new Version(release.tag_name.Substring(1));
|
||||
|
||||
if (release.assets != null && release.assets.Count > 0)
|
||||
{
|
||||
string endsWith;
|
||||
|
||||
if (isPortable)
|
||||
{
|
||||
endsWith = "portable.zip";
|
||||
}
|
||||
else
|
||||
{
|
||||
endsWith = ".exe";
|
||||
}
|
||||
|
||||
foreach (GitHubAsset asset in release.assets)
|
||||
{
|
||||
if (asset != null && !string.IsNullOrEmpty(asset.name) && asset.name.EndsWith(endsWith, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
Filename = asset.name;
|
||||
|
||||
if (isBrowserDownloadURL)
|
||||
{
|
||||
DownloadURL = asset.browser_download_url;
|
||||
}
|
||||
else
|
||||
{
|
||||
DownloadURL = asset.url;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public class GitHubRelease
|
||||
|
|
Loading…
Reference in a new issue