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))); }