Cmdlets/src/XpandPosh.Cmdlets/Nuget/Find-XpandNugetPackage/Find-XpandNugetPackage.cs
using System.Linq;
using System.Management.Automation; using System.Reactive.Linq; using System.Threading.Tasks; using XpandPosh.CmdLets; namespace XpandPosh.Cmdlets.Nuget{ [Cmdlet(VerbsCommon.Find, "XpandNugetPackage")] [CmdletBinding] public class FindXpandNugetPackage : NugetCmdlet{ [Parameter] public XpandPackageSource PackageSource{ get; set; } =XpandPackageSource.Nuget; [Parameter] public XpandPackageFilter Filter{ get; set; } protected override async Task ProcessRecordAsync(){ var feed = GetFeed(XpandPackageSource.Xpand); var allLabPackages = Providers.ListPackages(feed) .Where(FilterMatch); if (PackageSource == XpandPackageSource.Xpand){ await allLabPackages.Distinct().WriteObject(this); } else{ feed = GetFeed(XpandPackageSource.Nuget); await allLabPackages.SelectMany(id => Providers.ListPackages(feed, id)) .Distinct() .WriteObject(this); } } private string GetFeed(XpandPackageSource source){ return (string) this.Invoke($"Get-packageFeed -{source}").First().BaseObject; } private bool FilterMatch(string id){ if (Filter == XpandPackageFilter.Standalone) return id.StartsWith("Xpand"); if (Filter == XpandPackageFilter.Xpand){ return id.StartsWith("eXpand"); } return id.StartsWith("Xpand") || id.StartsWith("eXpand"); } } public enum XpandPackageFilter{ All, Xpand, Standalone } public enum XpandPackageSource{ Nuget, Xpand } } |