From 68ae496d609c135609884e3d58d36656559a035e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 2 Jan 2016 20:23:09 -0500 Subject: get stable and beta server packages from github --- .../Updates/GithubUpdater.cs | 195 +++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs (limited to 'MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs') diff --git a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs new file mode 100644 index 000000000..aff3dcf8d --- /dev/null +++ b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Net; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Updates; + +namespace MediaBrowser.Common.Implementations.Updates +{ + public class GithubUpdater + { + private readonly IHttpClient _httpClient; + private readonly IJsonSerializer _jsonSerializer; + private TimeSpan _cacheLength; + + public GithubUpdater(IHttpClient httpClient, IJsonSerializer jsonSerializer, TimeSpan cacheLength) + { + _httpClient = httpClient; + _jsonSerializer = jsonSerializer; + _cacheLength = cacheLength; + } + + public async Task CheckForUpdateResult(string organzation, string repository, Version minVersion, bool includePrerelease, string assetFilename, string packageName, string targetFilename, CancellationToken cancellationToken) + { + var url = string.Format("https://api.github.com/repos/{0}/{1}/releases", organzation, repository); + + var options = new HttpRequestOptions + { + Url = url, + EnableKeepAlive = false, + CancellationToken = cancellationToken, + UserAgent = "Emby/3.0" + + }; + + if (_cacheLength.Ticks > 0) + { + options.CacheMode = CacheMode.Unconditional; + options.CacheLength = _cacheLength; + } + + using (var stream = await _httpClient.Get(new HttpRequestOptions + { + Url = url, + EnableKeepAlive = false, + CancellationToken = cancellationToken, + UserAgent = "Emby/3.0" + + }).ConfigureAwait(false)) + { + var obj = _jsonSerializer.DeserializeFromStream(stream); + + var availableUpdate = CheckForUpdateResult(obj, minVersion, includePrerelease, assetFilename, packageName, targetFilename); + + return availableUpdate ?? new CheckForUpdateResult + { + IsUpdateAvailable = false + }; + } + } + + private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, bool includePrerelease, string assetFilename, string packageName, string targetFilename) + { + if (!includePrerelease) + { + obj = obj.Where(i => !i.prerelease).ToArray(); + } + + // TODO: + // Filter using name and check for suffixes such as -beta, -dev? + + return obj.Select(i => CheckForUpdateResult(i, minVersion, assetFilename, packageName, targetFilename)).FirstOrDefault(i => i != null); + } + + private CheckForUpdateResult CheckForUpdateResult(RootObject obj, Version minVersion, string assetFilename, string packageName, string targetFilename) + { + Version version; + if (!Version.TryParse(obj.tag_name, out version)) + { + return null; + } + + if (version < minVersion) + { + return null; + } + + var asset = (obj.assets ?? new List()).FirstOrDefault(i => string.Equals(assetFilename, Path.GetFileName(i.browser_download_url), StringComparison.OrdinalIgnoreCase)); + + if (asset == null) + { + return null; + } + + return new CheckForUpdateResult + { + AvailableVersion = version.ToString(), + IsUpdateAvailable = version > minVersion, + Package = new PackageVersionInfo + { + classification = obj.prerelease ? PackageVersionClass.Beta : PackageVersionClass.Release, + name = packageName, + sourceUrl = asset.browser_download_url, + targetFilename = targetFilename, + versionStr = version.ToString(), + requiredVersionStr = "1.0.0" + } + }; + } + + public class Uploader + { + public string login { get; set; } + public int id { get; set; } + public string avatar_url { get; set; } + public string gravatar_id { get; set; } + public string url { get; set; } + public string html_url { get; set; } + public string followers_url { get; set; } + public string following_url { get; set; } + public string gists_url { get; set; } + public string starred_url { get; set; } + public string subscriptions_url { get; set; } + public string organizations_url { get; set; } + public string repos_url { get; set; } + public string events_url { get; set; } + public string received_events_url { get; set; } + public string type { get; set; } + public bool site_admin { get; set; } + } + + public class Asset + { + public string url { get; set; } + public int id { get; set; } + public string name { get; set; } + public object label { get; set; } + public Uploader uploader { get; set; } + public string content_type { get; set; } + public string state { get; set; } + public int size { get; set; } + public int download_count { get; set; } + public string created_at { get; set; } + public string updated_at { get; set; } + public string browser_download_url { get; set; } + } + + public class Author + { + public string login { get; set; } + public int id { get; set; } + public string avatar_url { get; set; } + public string gravatar_id { get; set; } + public string url { get; set; } + public string html_url { get; set; } + public string followers_url { get; set; } + public string following_url { get; set; } + public string gists_url { get; set; } + public string starred_url { get; set; } + public string subscriptions_url { get; set; } + public string organizations_url { get; set; } + public string repos_url { get; set; } + public string events_url { get; set; } + public string received_events_url { get; set; } + public string type { get; set; } + public bool site_admin { get; set; } + } + + public class RootObject + { + public string url { get; set; } + public string assets_url { get; set; } + public string upload_url { get; set; } + public string html_url { get; set; } + public int id { get; set; } + public string tag_name { get; set; } + public string target_commitish { get; set; } + public string name { get; set; } + public bool draft { get; set; } + public Author author { get; set; } + public bool prerelease { get; set; } + public string created_at { get; set; } + public string published_at { get; set; } + public List assets { get; set; } + public string tarball_url { get; set; } + public string zipball_url { get; set; } + public string body { get; set; } + } + } +} -- cgit v1.2.3 From ed66d1a80cd6d057b687823c14c455e5779f8e57 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 2 Jan 2016 20:33:44 -0500 Subject: add release description --- MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs') diff --git a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs index aff3dcf8d..b5ccebd2a 100644 --- a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs +++ b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs @@ -108,7 +108,8 @@ namespace MediaBrowser.Common.Implementations.Updates sourceUrl = asset.browser_download_url, targetFilename = targetFilename, versionStr = version.ToString(), - requiredVersionStr = "1.0.0" + requiredVersionStr = "1.0.0", + description = obj.body } }; } -- cgit v1.2.3 From 1b50cd00ec7b81a8c571a8a50ca46c286fac2295 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 3 Jan 2016 14:01:05 -0500 Subject: update github updater --- .../Updates/GithubUpdater.cs | 11 +++-- MediaBrowser.Server.Mono/Program.cs | 2 +- .../ApplicationHost.cs | 53 ++++++++++------------ MediaBrowser.ServerApplication/MainStartup.cs | 2 +- 4 files changed, 34 insertions(+), 34 deletions(-) (limited to 'MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs') diff --git a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs index b5ccebd2a..a6dcc53d0 100644 --- a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs +++ b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs @@ -25,7 +25,7 @@ namespace MediaBrowser.Common.Implementations.Updates _cacheLength = cacheLength; } - public async Task CheckForUpdateResult(string organzation, string repository, Version minVersion, bool includePrerelease, string assetFilename, string packageName, string targetFilename, CancellationToken cancellationToken) + public async Task CheckForUpdateResult(string organzation, string repository, Version minVersion, bool includePrerelease, string[] excludeSuffixes, string assetFilename, string packageName, string targetFilename, CancellationToken cancellationToken) { var url = string.Format("https://api.github.com/repos/{0}/{1}/releases", organzation, repository); @@ -55,7 +55,7 @@ namespace MediaBrowser.Common.Implementations.Updates { var obj = _jsonSerializer.DeserializeFromStream(stream); - var availableUpdate = CheckForUpdateResult(obj, minVersion, includePrerelease, assetFilename, packageName, targetFilename); + var availableUpdate = CheckForUpdateResult(obj, minVersion, includePrerelease, excludeSuffixes, assetFilename, packageName, targetFilename); return availableUpdate ?? new CheckForUpdateResult { @@ -64,13 +64,18 @@ namespace MediaBrowser.Common.Implementations.Updates } } - private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, bool includePrerelease, string assetFilename, string packageName, string targetFilename) + private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, bool includePrerelease, string[] excludeSuffixes, string assetFilename, string packageName, string targetFilename) { if (!includePrerelease) { obj = obj.Where(i => !i.prerelease).ToArray(); } + if (excludeSuffixes.Length > 0) + { + obj = obj.Where(i => !excludeSuffixes.Any(e => i.name.EndsWith(e, StringComparison.OrdinalIgnoreCase))).ToArray(); + } + // TODO: // Filter using name and check for suffixes such as -beta, -dev? diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index 69c8201af..bccf6487a 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -82,7 +82,7 @@ namespace MediaBrowser.Server.Mono var nativeApp = new NativeApp(options); - _appHost = new ApplicationHost(appPaths, logManager, options, fileSystem, "MBServer.Mono", nativeApp); + _appHost = new ApplicationHost(appPaths, logManager, options, fileSystem, "emby.mono.zip", nativeApp); if (options.ContainsOption("-v")) { diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 2f03e13f8..7403ec920 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -207,7 +207,7 @@ namespace MediaBrowser.Server.Startup.Common private IPlaylistManager PlaylistManager { get; set; } private readonly StartupOptions _startupOptions; - private readonly string _remotePackageName; + private readonly string _releaseAssetFilename; internal INativeApp NativeApp { get; set; } private Timer _ipAddressCacheTimer; @@ -219,18 +219,18 @@ namespace MediaBrowser.Server.Startup.Common /// The log manager. /// The options. /// The file system. - /// Name of the remote package. + /// The release asset filename. /// The native application. public ApplicationHost(ServerApplicationPaths applicationPaths, ILogManager logManager, StartupOptions options, IFileSystem fileSystem, - string remotePackageName, + string releaseAssetFilename, INativeApp nativeApp) : base(applicationPaths, logManager, fileSystem) { _startupOptions = options; - _remotePackageName = remotePackageName; + _releaseAssetFilename = releaseAssetFilename; NativeApp = nativeApp; SetBaseExceptionMessage(); @@ -1301,36 +1301,31 @@ namespace MediaBrowser.Server.Startup.Common /// Task{CheckForUpdateResult}. public override async Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress) { - if (ConfigurationManager.CommonConfiguration.SystemUpdateLevel != PackageVersionClass.Dev) - { - var includePreRelease = ConfigurationManager.CommonConfiguration.SystemUpdateLevel != PackageVersionClass.Release; - - var cacheLength = TimeSpan.FromHours(1); + var includePreRelease = false; + var cacheLength = TimeSpan.FromHours(12); + var excludeSuffixes = new List(); - return await new GithubUpdater(HttpClient, JsonSerializer, cacheLength) - .CheckForUpdateResult("MediaBrowser", "Emby", ApplicationVersion, includePreRelease, "emby.windows.zip", "MBServer", "Mbserver.zip", cancellationToken).ConfigureAwait(false); + if (ConfigurationManager.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Release) + { + // Shouldn't actually be needed due to the prerelease filter + excludeSuffixes.Add("-beta"); + excludeSuffixes.Add("-dev"); } - - var availablePackages = await InstallationManager.GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false); - - var version = InstallationManager.GetLatestCompatibleVersion(availablePackages, _remotePackageName, null, ApplicationVersion, ConfigurationManager.CommonConfiguration.SystemUpdateLevel); - - var versionObject = version == null || string.IsNullOrWhiteSpace(version.versionStr) ? null : new Version(version.versionStr); - - var isUpdateAvailable = versionObject != null && versionObject > ApplicationVersion; - - var result = versionObject != null ? - new CheckForUpdateResult { AvailableVersion = versionObject.ToString(), IsUpdateAvailable = isUpdateAvailable, Package = version } : - new CheckForUpdateResult { AvailableVersion = ApplicationVersion.ToString(), IsUpdateAvailable = false }; - - HasUpdateAvailable = result.IsUpdateAvailable; - - if (result.IsUpdateAvailable) + else if (ConfigurationManager.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Beta) + { + excludeSuffixes.Add("-dev"); + cacheLength = TimeSpan.FromHours(1); + includePreRelease = true; + } + else if (ConfigurationManager.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Dev) { - Logger.Info("New application version is available: {0}", result.AvailableVersion); + excludeSuffixes.Add("-dev"); + cacheLength = TimeSpan.FromMinutes(5); + includePreRelease = true; } - return result; + return await new GithubUpdater(HttpClient, JsonSerializer, cacheLength) + .CheckForUpdateResult("MediaBrowser", "Emby", ApplicationVersion, includePreRelease, excludeSuffixes.ToArray(), _releaseAssetFilename, "MBServer", "Mbserver.zip", cancellationToken).ConfigureAwait(false); } /// diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index b8af35fde..090e36ee6 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -215,7 +215,7 @@ namespace MediaBrowser.ServerApplication logManager, options, fileSystem, - "MBServer", + "emby.windows.zip", nativeApp); var initProgress = new Progress(); -- cgit v1.2.3 From e0e4ebb0bb24865830e3f8d5eef9eb5a79f5684b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 3 Jan 2016 21:31:22 -0500 Subject: update the updater --- .../Updates/GithubUpdater.cs | 41 +++++++++------------- .../ApplicationHost.cs | 20 +++-------- 2 files changed, 21 insertions(+), 40 deletions(-) (limited to 'MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs') diff --git a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs index a6dcc53d0..ac7002668 100644 --- a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs +++ b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs @@ -25,7 +25,7 @@ namespace MediaBrowser.Common.Implementations.Updates _cacheLength = cacheLength; } - public async Task CheckForUpdateResult(string organzation, string repository, Version minVersion, bool includePrerelease, string[] excludeSuffixes, string assetFilename, string packageName, string targetFilename, CancellationToken cancellationToken) + public async Task CheckForUpdateResult(string organzation, string repository, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename, CancellationToken cancellationToken) { var url = string.Format("https://api.github.com/repos/{0}/{1}/releases", organzation, repository); @@ -44,42 +44,31 @@ namespace MediaBrowser.Common.Implementations.Updates options.CacheLength = _cacheLength; } - using (var stream = await _httpClient.Get(new HttpRequestOptions - { - Url = url, - EnableKeepAlive = false, - CancellationToken = cancellationToken, - UserAgent = "Emby/3.0" - - }).ConfigureAwait(false)) + using (var stream = await _httpClient.Get(options).ConfigureAwait(false)) { var obj = _jsonSerializer.DeserializeFromStream(stream); - var availableUpdate = CheckForUpdateResult(obj, minVersion, includePrerelease, excludeSuffixes, assetFilename, packageName, targetFilename); - - return availableUpdate ?? new CheckForUpdateResult - { - IsUpdateAvailable = false - }; + return CheckForUpdateResult(obj, minVersion, updateLevel, assetFilename, packageName, targetFilename); } } - private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, bool includePrerelease, string[] excludeSuffixes, string assetFilename, string packageName, string targetFilename) + private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename) { - if (!includePrerelease) + if (updateLevel == PackageVersionClass.Release) { obj = obj.Where(i => !i.prerelease).ToArray(); } - - if (excludeSuffixes.Length > 0) + else if (updateLevel == PackageVersionClass.Beta) { - obj = obj.Where(i => !excludeSuffixes.Any(e => i.name.EndsWith(e, StringComparison.OrdinalIgnoreCase))).ToArray(); + obj = obj.Where(i => !i.prerelease || !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray(); } - // TODO: - // Filter using name and check for suffixes such as -beta, -dev? - - return obj.Select(i => CheckForUpdateResult(i, minVersion, assetFilename, packageName, targetFilename)).FirstOrDefault(i => i != null); + var availableUpdate = obj.Select(i => CheckForUpdateResult(i, minVersion, assetFilename, packageName, targetFilename)).FirstOrDefault(i => i != null); + + return availableUpdate ?? new CheckForUpdateResult + { + IsUpdateAvailable = false + }; } private CheckForUpdateResult CheckForUpdateResult(RootObject obj, Version minVersion, string assetFilename, string packageName, string targetFilename) @@ -108,7 +97,9 @@ namespace MediaBrowser.Common.Implementations.Updates IsUpdateAvailable = version > minVersion, Package = new PackageVersionInfo { - classification = obj.prerelease ? PackageVersionClass.Beta : PackageVersionClass.Release, + classification = obj.prerelease ? + (obj.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase) ? PackageVersionClass.Dev : PackageVersionClass.Beta) : + PackageVersionClass.Release, name = packageName, sourceUrl = asset.browser_download_url, targetFilename = targetFilename, diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 385dc1d81..143a31624 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -1301,30 +1301,20 @@ namespace MediaBrowser.Server.Startup.Common /// Task{CheckForUpdateResult}. public override Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress) { - var includePreRelease = false; var cacheLength = TimeSpan.FromHours(12); - var excludeSuffixes = new List(); + var updateLevel = ConfigurationManager.CommonConfiguration.SystemUpdateLevel; - if (ConfigurationManager.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Release) + if (updateLevel == PackageVersionClass.Beta) { - // Shouldn't actually be needed due to the prerelease filter - excludeSuffixes.Add("-beta"); - excludeSuffixes.Add("-dev"); - } - else if (ConfigurationManager.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Beta) - { - excludeSuffixes.Add("-dev"); cacheLength = TimeSpan.FromHours(1); - includePreRelease = true; } - else if (ConfigurationManager.CommonConfiguration.SystemUpdateLevel == PackageVersionClass.Dev) + else if (updateLevel == PackageVersionClass.Dev) { cacheLength = TimeSpan.FromMinutes(5); - includePreRelease = true; } - return new GithubUpdater(HttpClient, JsonSerializer, cacheLength) - .CheckForUpdateResult("MediaBrowser", "Emby", ApplicationVersion, includePreRelease, excludeSuffixes.ToArray(), _releaseAssetFilename, "MBServer", "Mbserver.zip", cancellationToken); + return new GithubUpdater(HttpClient, JsonSerializer, cacheLength).CheckForUpdateResult("MediaBrowser", "Emby", ApplicationVersion, updateLevel, _releaseAssetFilename, + "MBServer", "Mbserver.zip", cancellationToken); } /// -- cgit v1.2.3 From ef98c115d5916ed58b701298a55cdaeadde49793 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 3 Jan 2016 21:56:43 -0500 Subject: update the updater --- MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs') diff --git a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs index ac7002668..3239d7b95 100644 --- a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs +++ b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs @@ -60,7 +60,11 @@ namespace MediaBrowser.Common.Implementations.Updates } else if (updateLevel == PackageVersionClass.Beta) { - obj = obj.Where(i => !i.prerelease || !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray(); + obj = obj.Where(i => !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase)).ToArray(); + } + else if (updateLevel == PackageVersionClass.Dev) + { + obj = obj.Where(i => !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) || i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray(); } var availableUpdate = obj.Select(i => CheckForUpdateResult(i, minVersion, assetFilename, packageName, targetFilename)).FirstOrDefault(i => i != null); -- cgit v1.2.3 From eb440582e4e370f29df7000a93f9bd6267366f33 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 6 Jan 2016 13:16:01 -0500 Subject: update the updater --- .../Updates/GithubUpdater.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs') diff --git a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs index 3239d7b95..599b483fe 100644 --- a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs +++ b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs @@ -88,7 +88,7 @@ namespace MediaBrowser.Common.Implementations.Updates return null; } - var asset = (obj.assets ?? new List()).FirstOrDefault(i => string.Equals(assetFilename, Path.GetFileName(i.browser_download_url), StringComparison.OrdinalIgnoreCase)); + var asset = (obj.assets ?? new List()).FirstOrDefault(i => IsAsset(i, assetFilename)); if (asset == null) { @@ -114,6 +114,18 @@ namespace MediaBrowser.Common.Implementations.Updates }; } + private bool IsAsset(Asset asset, string assetFilename) + { + var downloadFilename = Path.GetFileName(asset.browser_download_url) ?? string.Empty; + + if (downloadFilename.IndexOf(assetFilename, StringComparison.OrdinalIgnoreCase) != -1) + { + return true; + } + + return string.Equals(assetFilename, downloadFilename, StringComparison.OrdinalIgnoreCase); + } + public class Uploader { public string login { get; set; } -- cgit v1.2.3 From de897c3d8e07d9912e5904be98d564bac029d7d9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 8 Jan 2016 20:51:51 -0500 Subject: update github updater --- MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs') diff --git a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs index 599b483fe..360428072 100644 --- a/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs +++ b/MediaBrowser.Common.Implementations/Updates/GithubUpdater.cs @@ -67,7 +67,11 @@ namespace MediaBrowser.Common.Implementations.Updates obj = obj.Where(i => !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) || i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray(); } - var availableUpdate = obj.Select(i => CheckForUpdateResult(i, minVersion, assetFilename, packageName, targetFilename)).FirstOrDefault(i => i != null); + var availableUpdate = obj + .Select(i => CheckForUpdateResult(i, minVersion, assetFilename, packageName, targetFilename)) + .Where(i => i != null) + .OrderByDescending(i => Version.Parse(i.AvailableVersion)) + .FirstOrDefault(); return availableUpdate ?? new CheckForUpdateResult { -- cgit v1.2.3