Example #1
0
        IObservable <UpdateInfo> determineUpdateInfo(IEnumerable <ReleaseEntry> localReleases, IEnumerable <ReleaseEntry> remoteReleases, bool ignoreDeltaUpdates)
        {
            localReleases = localReleases ?? Enumerable.Empty <ReleaseEntry>();

            if (remoteReleases == null)
            {
                log.Warn("Release information couldn't be determined due to remote corrupt RELEASES file");
                return(Observable.Throw <UpdateInfo>(new Exception("Corrupt remote RELEASES file")));
            }

            if (localReleases.Count() == remoteReleases.Count())
            {
                log.Info("No updates, remote and local are the same");
                return(Observable.Return <UpdateInfo>(null));
            }

            if (ignoreDeltaUpdates)
            {
                remoteReleases = remoteReleases.Where(x => !x.IsDelta);
            }

            if (!localReleases.Any())
            {
                log.Warn("First run or local directory is corrupt, starting from scratch");

                var latestFullRelease = findCurrentVersion(remoteReleases);
                return(Observable.Return(UpdateInfo.Create(findCurrentVersion(localReleases), new[] { latestFullRelease }, PackageDirectory, appFrameworkVersion)));
            }

            if (localReleases.Max(x => x.Version) > remoteReleases.Max(x => x.Version))
            {
                log.Warn("hwhat, local version is greater than remote version");

                var latestFullRelease = findCurrentVersion(remoteReleases);
                return(Observable.Return(UpdateInfo.Create(findCurrentVersion(localReleases), new[] { latestFullRelease }, PackageDirectory, appFrameworkVersion)));
            }

            return(Observable.Return(UpdateInfo.Create(findCurrentVersion(localReleases), remoteReleases, PackageDirectory, appFrameworkVersion)));
        }