using HyperBooru.ApiModels; using System.Management.Automation; namespace HyperBooru.PowerShell; [Alias("ghbm")] [Cmdlet(VerbsCommon.Get, "HyperBooruMedia")] public class GetMediaCmdlet : SessionCmdlet { [Parameter] public SwitchParameter SelectIngest { get; set; } [Parameter] public SwitchParameter IncludeNsfw { get; set; } [Parameter] public Guid? ContinuationToken { get; set; } [Parameter] public int Count { get; set; } = 50; [Parameter] public SortOrder SortOrder { get; set; } [Parameter(ParameterSetName = "All", Mandatory = true)] public SwitchParameter All { get; set; } [Parameter(ParameterSetName = "TagId", Mandatory = true)] public Guid TagId { get; set; } [Parameter(ParameterSetName = "Query", Mandatory = true)] public string Query { get; set; } [Parameter(ParameterSetName = "Checksum", Mandatory = true)] public string Checksum { get; set; } protected override void ProcessRecord() { Guid[] mediaIds; FeedRequest feedRequest; switch(ParameterSetName) { case "TagId": feedRequest = new FeedTagRequest { SelectIngest = SelectIngest, IncludeNsfw = IncludeNsfw, ContinuationToken = ContinuationToken, Count = Count, SortOrder = SortOrder, TagId = TagId }; break; case "Query": feedRequest = new FeedSearchRequest { SelectIngest = SelectIngest, IncludeNsfw = IncludeNsfw, ContinuationToken = ContinuationToken, Count = Count, SortOrder = SortOrder, Query = Query }; break; case "Checksum": mediaIds = Session.Media.GetByChecksumAsync(Checksum) .GetAwaiter() .GetResult() .Select(m => m.MediaId) .ToArray(); foreach(var m in mediaIds) WriteObject(m); return; default: feedRequest = new FeedRequest { SelectIngest = SelectIngest, IncludeNsfw = IncludeNsfw, ContinuationToken = ContinuationToken, Count = Count, SortOrder = SortOrder }; break; } mediaIds = Session.Feed.LoadChunkAsync(feedRequest) .GetAwaiter() .GetResult(); foreach(var m in mediaIds) WriteObject(m); } }