private IEnumerable<SelectionCandidate> GetCandidates(FeedUri feedUri, Feed feed, Requirements requirements)
{
var feedPreferences = FeedPreferences.LoadForSafe(feedUri);
foreach (var element in feed.Elements)
{
var packageImplementation = element as PackageImplementation;
if (packageImplementation != null)
{ // Each <package-implementation> provides 0..n selection candidates
var externalImplementations = _packageManager.Query(packageImplementation, requirements.Distributions.ToArray());
foreach (var externalImplementation in externalImplementations)
{
_externalImplementations[externalImplementation.ID] = externalImplementation;
yield return new SelectionCandidate(new FeedUri(FeedUri.FromDistributionPrefix + feedUri), feedPreferences, externalImplementation, requirements);
}
}
else if (requirements.Distributions.ContainsOrEmpty(Restriction.DistributionZeroInstall))
{
var implementation = element as Implementation;
if (implementation != null)
{ // Each <implementation> provides 1 selection candidate
yield return new SelectionCandidate(feedUri, feedPreferences, implementation, requirements,
offlineUncached: (_config.NetworkUse == NetworkLevel.Offline) && !_isCached(implementation));
}
}
}
}