Beispiel #1
0
        private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename)
        {
            if (updateLevel == PackageVersionClass.Release)
            {
                // Technically all we need to do is check that it's not pre-release
                // But let's addititional checks for -beta and -dev to handle builds that might be temporarily tagged incorrectly.
                obj = obj.Where(i => !i.prerelease && !i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) && !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray();
            }
            else if (updateLevel == PackageVersionClass.Beta)
            {
                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))
                .Where(i => i != null)
                .OrderByDescending(i => Version.Parse(i.AvailableVersion))
                .FirstOrDefault();

            return availableUpdate ?? new CheckForUpdateResult
            {
                IsUpdateAvailable = false
            };
        }
Beispiel #2
0
        public async Task<CheckForUpdateResult> 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);

            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(options).ConfigureAwait(false))
            {
                var obj = _jsonSerializer.DeserializeFromStream<RootObject[]>(stream);

                return CheckForUpdateResult(obj, minVersion, updateLevel, assetFilename, packageName, targetFilename);
            }
        }
Beispiel #3
0
        private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename)
        {
            if (updateLevel == PackageVersionClass.Release)
            {
                obj = obj.Where(i => !i.prerelease).ToArray();
            }
            else if (updateLevel == PackageVersionClass.Beta)
            {
                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))
                .Where(i => i != null)
                .OrderByDescending(i => Version.Parse(i.AvailableVersion))
                .FirstOrDefault();
            
            return availableUpdate ?? new CheckForUpdateResult
            {
                IsUpdateAvailable = false
            };
        }
        private async Task CheckVersion(Version currentVersion, PackageVersionClass updateLevel, CancellationToken cancellationToken)
        {
            var releases = await new GithubUpdater(_httpClient, _jsonSerializer, TimeSpan.FromMinutes(5))
                .GetLatestReleases("MediaBrowser", "Emby", _releaseAssetFilename, cancellationToken).ConfigureAwait(false);

            var newUpdateLevel = updateLevel;

            // If the current version is later than current stable, set the update level to beta
            if (releases.Count >= 1)
            {
                var release = releases[0];
                var version = ParseVersion(release.tag_name);
                if (version != null && currentVersion > version)
                {
                    newUpdateLevel = PackageVersionClass.Beta;
                }
            }

            // If the current version is later than current beta, set the update level to dev
            if (releases.Count >= 2)
            {
                var release = releases[1];
                var version = ParseVersion(release.tag_name);
                if (version != null && currentVersion > version)
                {
                    newUpdateLevel = PackageVersionClass.Dev;
                }
            }

            if (newUpdateLevel != updateLevel)
            {
                _config.Configuration.SystemUpdateLevel = newUpdateLevel;
                _config.SaveConfiguration();
            }
        }
Beispiel #5
0
        public async Task<CheckForUpdateResult> CheckForApplicationUpdate(Version currentVersion,
            PackageVersionClass updateLevel,
            IInstallationManager installationManager,
            CancellationToken cancellationToken,
            IProgress<double> progress)
        {
            var result = new CheckForUpdateResult { AvailableVersion = currentVersion.ToString(), IsUpdateAvailable = false };
			
			return Task.FromResult(result);
        }
Beispiel #6
0
        private async Task CheckVersion(Version currentVersion, PackageVersionClass currentUpdateLevel, CancellationToken cancellationToken)
        {
            var releases = await new GithubUpdater(_httpClient, _jsonSerializer)
                .GetLatestReleases("MediaBrowser", "Emby", _releaseAssetFilename, cancellationToken).ConfigureAwait(false);

            var newUpdateLevel = GetNewUpdateLevel(currentVersion, currentUpdateLevel, releases);

            if (newUpdateLevel != currentUpdateLevel)
            {
                _config.Configuration.SystemUpdateLevel = newUpdateLevel;
                _config.SaveConfiguration();
            }
        }
Beispiel #7
0
        private bool MatchesUpdateLevel(RootObject i, PackageVersionClass updateLevel)
        {
            if (updateLevel == PackageVersionClass.Beta)
            {
                return !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase);
            }
            if (updateLevel == PackageVersionClass.Dev)
            {
                return !i.prerelease || i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) ||
                       i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase);
            }

            // Technically all we need to do is check that it's not pre-release
            // But let's addititional checks for -beta and -dev to handle builds that might be temporarily tagged incorrectly.
            return !i.prerelease && !i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) &&
                   !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase);
        }
        /// <summary>
        /// Initialize our internal variables from an installation request
        /// </summary>
        /// <param name="request"></param>
        protected void Init(InstallationRequest request)
        {
            Operation = request.Operation;
            Archive = request.Archive;
            PackageClass = request.PackageClass;
            RequestedVersion = request.Version ?? new Version("4.0");
            Progress = request.Progress;
            ReportStatus = request.ReportStatus;
            MainClient = request.WebClient;
            ServiceName = request.ServiceName;
            AppDataFolder = request.InstallPath ?? Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

            switch (request.Product.ToLower())
            {
                case "mbt":
                    PackageName = "MBTheater";
                    RootSuffix = "-Theater";
                    TargetExe = "MediaBrowser.UI.exe";
                    FriendlyName = "Media Browser Theater";
                    RootPath = request.InstallPath ?? Path.Combine(AppDataFolder, "MediaBrowser" + RootSuffix);
                    EndInstallPath = Path.Combine(RootPath, "system");
                    break;

                case "mbc":
                    PackageName = "MBClassic";
                    RootSuffix = "-Classic";
                    TargetExe = "ehshell.exe";
                    TargetArgs = @"/nostartupanimation /entrypoint:{CE32C570-4BEC-4aeb-AD1D-CF47B91DE0B2}\{FC9ABCCC-36CB-47ac-8BAB-03E8EF5F6F22}";
                    FriendlyName = "Media Browser Classic";
                    RootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MediaBrowser" + RootSuffix);
                    EndInstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "ehome");
                    break;

                default:
                    PackageName = "MBServer";
                    RootSuffix = "-Server";
                    TargetExe = "MediaBrowser.ServerApplication.exe";
                    FriendlyName = "Media Browser Server";
                    RootPath = request.InstallPath ?? Path.Combine(AppDataFolder, "MediaBrowser" + RootSuffix);
                    EndInstallPath = Path.Combine(RootPath, "system");
                    break;
            }

        }
Beispiel #9
0
        private PackageVersionClass GetNewUpdateLevel(Version currentVersion, PackageVersionClass currentUpdateLevel, List<GithubUpdater.RootObject> releases)
        {
            var newUpdateLevel = currentUpdateLevel;

            // If the current version is later than current stable, set the update level to beta
            if (releases.Count >= 1)
            {
                var release = releases[0];
                var version = ParseVersion(release.tag_name);
                if (version != null)
                {
                    if (currentVersion > version)
                    {
                        newUpdateLevel = PackageVersionClass.Beta;
                    }
                    else
                    {
                        return PackageVersionClass.Release;
                    }
                }
            }

            // If the current version is later than current beta, set the update level to dev
            if (releases.Count >= 2)
            {
                var release = releases[1];
                var version = ParseVersion(release.tag_name);
                if (version != null)
                {
                    if (currentVersion > version)
                    {
                        newUpdateLevel = PackageVersionClass.Dev;
                    }
                    else
                    {
                        return PackageVersionClass.Beta;
                    }
                }
            }

            return newUpdateLevel;
        }
        /// <summary>
        /// Initialize our internal variables from an installation request
        /// </summary>
        /// <param name="request"></param>
        protected void Init(InstallationRequest request)
        {
            Operation = request.Operation;
            Archive = request.Archive;
            PackageClass = request.PackageClass;
            RequestedVersion = request.Version ?? new Version("4.0");
            Progress = request.Progress;
            ReportStatus = request.ReportStatus;
            MainClient = request.WebClient;
            ServiceName = request.ServiceName;

            switch (request.Product.ToLower())
            {
                case "mbt":
                    PackageName = "MBTheater";
                    FriendlyName = "Emby Theater";
                    ProgramDataPath = request.ProgramDataPath ?? GetTheaterProgramDataPath();
                    TargetExecutablePath = request.TargetExecutablePath ?? Path.Combine(ProgramDataPath, "system", "MediaBrowser.UI.exe");
                    SystemPath = request.SystemPath ?? Path.GetDirectoryName(TargetExecutablePath);
                    break;

                case "mbc":
                    PackageName = "MBClassic";
                    TargetArgs = @"/nostartupanimation /entrypoint:{CE32C570-4BEC-4aeb-AD1D-CF47B91DE0B2}\{FC9ABCCC-36CB-47ac-8BAB-03E8EF5F6F22}";
                    FriendlyName = "Emby for WMC";
                    ProgramDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MediaBrowser" + "-Classic");
                    TargetExecutablePath = request.TargetExecutablePath ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "ehome", "ehshell.exe");
                    SystemPath = request.SystemPath ?? Path.Combine(ProgramDataPath, "system");
                    break;

                default:
                    PackageName = "MBServer";
                    FriendlyName = "Emby Server";
                    ProgramDataPath = request.ProgramDataPath ?? GetServerProgramDataPath();
                    TargetExecutablePath = request.TargetExecutablePath ?? Path.Combine(ProgramDataPath, "system", "MediaBrowser.ServerApplication.exe");
                    SystemPath = request.SystemPath ?? Path.GetDirectoryName(TargetExecutablePath);
                    break;
            }

        }
        /// <summary>
        /// Gets the latest compatible version.
        /// </summary>
        /// <param name="availablePackages">The available packages.</param>
        /// <param name="name">The name.</param>
        /// <param name="classification">The classification.</param>
        /// <returns>PackageVersionInfo.</returns>
        public PackageVersionInfo GetLatestCompatibleVersion(IEnumerable<PackageInfo> availablePackages, string name, PackageVersionClass classification = PackageVersionClass.Release)
        {
            var package = availablePackages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase));

            if (package == null)
            {
                return null;
            }

            return package.versions
                .OrderByDescending(v => v.version)
                .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, ApplicationHost.ApplicationVersion));
        }
        /// <summary>
        /// Gets the package.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="classification">The classification.</param>
        /// <param name="version">The version.</param>
        /// <returns>Task{PackageVersionInfo}.</returns>
        public async Task<PackageVersionInfo> GetPackage(string name, PackageVersionClass classification, Version version)
        {
            var packages = await GetAvailablePackages(CancellationToken.None).ConfigureAwait(false);

            var package = packages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase));

            if (package == null)
            {
                return null;
            }

            return package.versions.FirstOrDefault(v => v.version.Equals(version) && v.classification == classification);
        }
        /// <summary>
        /// Gets the latest compatible version.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="classification">The classification.</param>
        /// <returns>Task{PackageVersionInfo}.</returns>
        public async Task<PackageVersionInfo> GetLatestCompatibleVersion(string name, PackageVersionClass classification = PackageVersionClass.Release)
        {
            var packages = await GetAvailablePackages(CancellationToken.None).ConfigureAwait(false);

            return GetLatestCompatibleVersion(packages, name, classification);
        }
Beispiel #14
0
        private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename)
        {
            if (updateLevel == PackageVersionClass.Release)
            {
                obj = obj.Where(i => !i.prerelease).ToArray();
            }
            else if (updateLevel == PackageVersionClass.Beta)
            {
                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))
                                  .Where(i => i != null)
                                  .OrderByDescending(i => Version.Parse(i.AvailableVersion))
                                  .FirstOrDefault();

            return(availableUpdate ?? new CheckForUpdateResult
            {
                IsUpdateAvailable = false
            });
        }
Beispiel #15
0
 public Task <CheckForUpdateResult> CheckForEmbyTheaterUpdate(PackageVersionClass level, CancellationToken cancellationToken)
 {
     return(CheckForUpdateResult("MediaBrowser", "Emby.Theater.Windows", new Version(1, 0, 0), level, "emby.theater.zip", "emby.theater", "emby.theater.zip", cancellationToken));
 }
Beispiel #16
0
        protected void GetArgs()
        {
            //cmd line args should be name/value pairs like: product=server archive="c:\.." caller=34552
            var cmdArgs = Environment.GetCommandLineArgs();
            var args    = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            foreach (var pair in cmdArgs)
            {
                var nameValue = pair.Split('=');
                if (nameValue.Length == 2)
                {
                    args[nameValue[0]] = nameValue[1];
                }
            }
            Archive = args.GetValueOrDefault("archive", null);
            if (args.GetValueOrDefault("pismo", "true") == "false")
            {
                InstallPismo = false;
            }

            var product = args.GetValueOrDefault("product", null) ?? ConfigurationManager.AppSettings["product"] ?? "server";

            PackageClass     = (PackageVersionClass)Enum.Parse(typeof(PackageVersionClass), args.GetValueOrDefault("class", null) ?? ConfigurationManager.AppSettings["class"] ?? "Release");
            RequestedVersion = new Version(args.GetValueOrDefault("version", "4.0"));

            var callerId = args.GetValueOrDefault("caller", null);

            if (callerId != null)
            {
                // Wait for our caller to exit
                try
                {
                    var process = Process.GetProcessById(Convert.ToInt32(callerId));
                    process.WaitForExit();
                }
                catch (ArgumentException)
                {
                    // wasn't running
                }
            }

            //MessageBox.Show(string.Format("Called with args: product: {0} archive: {1} caller: {2}", product, Archive, callerId));

            switch (product.ToLower())
            {
            case "mbt":
                PackageName  = "MBTheater";
                RootSuffix   = "-Theater";
                TargetExe    = "MediaBrowser.UI.exe";
                FriendlyName = "Media Browser Theater";
                break;

            default:
                PackageName  = "MBServer";
                RootSuffix   = "-Server";
                TargetExe    = "MediaBrowser.ServerApplication.exe";
                FriendlyName = "Media Browser Server";
                break;
            }

            RootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MediaBrowser" + RootSuffix);
        }
Beispiel #17
0
        /// <summary>
        /// Gets the latest compatible version.
        /// </summary>
        /// <param name="availablePackages">The available packages.</param>
        /// <param name="name">The name.</param>
        /// <param name="currentServerVersion">The current server version.</param>
        /// <param name="classification">The classification.</param>
        /// <returns>PackageVersionInfo.</returns>
        public PackageVersionInfo GetLatestCompatibleVersion(IEnumerable<PackageInfo> availablePackages, string name, string guid, Version currentServerVersion, PackageVersionClass classification = PackageVersionClass.Release)
        {
            var package = availablePackages.FirstOrDefault(p => string.Equals(p.guid, guid ?? "none", StringComparison.OrdinalIgnoreCase))
                            ?? availablePackages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase));

            if (package == null)
            {
                return null;
            }

            return package.versions
                .OrderByDescending(GetPackageVersion)
                .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, currentServerVersion));
        }
Beispiel #18
0
        private CheckForUpdateResult CheckForUpdateResult(RootObject[] obj, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename)
        {
            if (updateLevel == PackageVersionClass.Release)
            {
                // Technically all we need to do is check that it's not pre-release
                // But let's addititional checks for -beta and -dev to handle builds that might be temporarily tagged incorrectly.
                obj = obj.Where(i => !i.prerelease && !i.name.EndsWith("-beta", StringComparison.OrdinalIgnoreCase) && !i.name.EndsWith("-dev", StringComparison.OrdinalIgnoreCase)).ToArray();
            }
            else if (updateLevel == PackageVersionClass.Beta)
            {
                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))
                                  .Where(i => i != null)
                                  .OrderByDescending(i => Version.Parse(i.AvailableVersion))
                                  .FirstOrDefault();

            return(availableUpdate ?? new CheckForUpdateResult
            {
                IsUpdateAvailable = false
            });
        }
Beispiel #19
0
        public async Task <CheckForUpdateResult> 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);

            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(options).ConfigureAwait(false))
            {
                var obj = _jsonSerializer.DeserializeFromStream <RootObject[]>(stream);

                return(CheckForUpdateResult(obj, minVersion, updateLevel, assetFilename, packageName, targetFilename));
            }
        }
        /// <summary>
        /// Gets the latest compatible version.
        /// </summary>
        /// <param name="availablePackages">The available packages.</param>
        /// <param name="name">The name.</param>
        /// <param name="classification">The classification.</param>
        /// <returns>PackageVersionInfo.</returns>
        public PackageVersionInfo GetLatestCompatibleVersion(IEnumerable <PackageInfo> availablePackages, string name, PackageVersionClass classification = PackageVersionClass.Release)
        {
            var package = availablePackages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase));

            if (package == null)
            {
                return(null);
            }

            return(package.versions
                   .OrderByDescending(v => v.version)
                   .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, _applicationHost.ApplicationVersion)));
        }
        /// <summary>
        /// Gets the latest compatible version.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="guid">The assembly guid if this is a plug-in</param>
        /// <param name="currentServerVersion">The current server version.</param>
        /// <param name="classification">The classification.</param>
        /// <returns>Task{PackageVersionInfo}.</returns>
        public async Task <PackageVersionInfo> GetLatestCompatibleVersion(string name, string guid, Version currentServerVersion, PackageVersionClass classification = PackageVersionClass.Release)
        {
            var packages = await GetAvailablePackages(CancellationToken.None, false).ConfigureAwait(false);

            return(GetLatestCompatibleVersion(packages, name, guid, currentServerVersion, classification));
        }
Beispiel #22
0
        public async Task <CheckForUpdateResult> CheckForUpdateResult(string organzation, string repository, Version minVersion, PackageVersionClass updateLevel, string assetFilename, string packageName, string targetFilename, CancellationToken cancellationToken)
        {
            Trace.TraceInformation("Getting github releases for {0} {1} minVersion: {2} level: {3}", organzation, repository, minVersion, updateLevel);

            // Need to bust the cache
            var url = string.Format("https://api.github.com/repos/{0}/{1}/releases?v={2}", organzation, repository, DateTime.UtcNow.Ticks.ToString(CultureInfo.InvariantCulture));

            Trace.TraceInformation("Github url: {0}", url);

            // Github will throw an error without a user agent
            _mainClient.Headers.Set(HttpRequestHeader.UserAgent, "Emby/3.0");

            var json = await _mainClient.DownloadStringTaskAsync(url);

            Trace.TraceInformation("Github json: {0}", json);

            var packages = JsonSerializer.DeserializeFromString <RootObject[]>(json);

            Trace.TraceInformation("Release count: {0}", packages.Length);

            var availableUpdate = CheckForUpdateResult(packages, minVersion, updateLevel, assetFilename, packageName, targetFilename);

            return(availableUpdate ?? new CheckForUpdateResult
            {
                IsUpdateAvailable = false
            });
        }
        /// <summary>
        /// Gets the latest compatible version.
        /// </summary>
        /// <param name="availablePackages">The available packages.</param>
        /// <param name="name">The name.</param>
        /// <param name="currentServerVersion">The current server version.</param>
        /// <param name="classification">The classification.</param>
        /// <returns>PackageVersionInfo.</returns>
        public PackageVersionInfo GetLatestCompatibleVersion(IEnumerable <PackageInfo> availablePackages, string name, string guid, Version currentServerVersion, PackageVersionClass classification = PackageVersionClass.Release)
        {
            var package = availablePackages.FirstOrDefault(p => string.Equals(p.guid, guid ?? "none", StringComparison.OrdinalIgnoreCase))
                          ?? availablePackages.FirstOrDefault(p => p.name.Equals(name, StringComparison.OrdinalIgnoreCase));

            if (package == null)
            {
                return(null);
            }

            return(package.versions
                   .OrderByDescending(GetPackageVersion)
                   .FirstOrDefault(v => v.classification <= classification && IsPackageVersionUpToDate(v, currentServerVersion)));
        }
Beispiel #24
0
        public static async Task<CheckForUpdateResult> CheckForApplicationUpdate(Version currentVersion,
            PackageVersionClass updateLevel,
            IInstallationManager installationManager,
            CancellationToken cancellationToken,
            IProgress<double> progress)
        {
            var availablePackages = await installationManager.GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false);

            var version = installationManager.GetLatestCompatibleVersion(availablePackages, "MBServer", null, currentVersion, updateLevel);

            var versionObject = version == null || string.IsNullOrWhiteSpace(version.versionStr) ? null : new Version(version.versionStr);

            var isUpdateAvailable = versionObject != null && versionObject > currentVersion;

            return versionObject != null ?
                new CheckForUpdateResult { AvailableVersion = versionObject.ToString(), IsUpdateAvailable = isUpdateAvailable, Package = version } :
                new CheckForUpdateResult { AvailableVersion = currentVersion.ToString(), IsUpdateAvailable = false };
        }