/// <summary> /// Resolves and returns Package Sources to the client. /// /// Specified sources are passed in via the request object (<c>request.GetSources()</c>). /// /// Sources are returned using <c>request.YieldPackageSource(...)</c> /// </summary> /// <param name="request">An object passed in from the CORE that contains functions that can be used to interact with the CORE and HOST</param> public void ResolvePackageSources(Request request) { request.Debug("Calling '{0}::ResolvePackageSources'", PackageProviderName); if (request.Sources.Any()) { // the system is requesting sources that match the values passed. // if the value passed can be a legitimate source, but is not registered, return a package source marked unregistered. var packageSources = ProviderStorage.GetPackageSources(request); if (request.IsCanceled) { return; } foreach (var source in request.Sources.AsNotNull()) { if (packageSources.ContainsKey(source)) { var packageSource = packageSources[source]; // YieldPackageSource returns false when operation was cancelled if (!request.YieldPackageSource(packageSource.Name, packageSource.Location, packageSource.Trusted, packageSource.IsRegistered, packageSource.IsValidated)) { return; } } else { request.Warning("Package Source '{0}' not found.", source); } } } else { // the system is requesting all the registered sources var packageSources = ProviderStorage.GetPackageSources(request); foreach (var entry in packageSources.AsNotNull()) { var packageSource = entry.Value; // YieldPackageSource returns false when operation was cancelled if (!request.YieldPackageSource(packageSource.Name, packageSource.Location, packageSource.Trusted, packageSource.IsRegistered, packageSource.IsValidated)) { return; } } } }