@page "/" @page "/Gallery" @inject IJSRuntime jsRuntime @inject HBSession hb @* @implements IDisposable @attribute [Authorize]*@ @Title @if(Ingest && !hb.HasNsfwClaim) {

Ingest feed is not available unless NSFW mode is enabled!

You must enable NSFW mode to continue...

} else if(TagId is not null && Query is not null) {

Invalid query parameters! Both a search query and

a tag ID have been specified!

} else {
@foreach(var mediaId in displayMedia) { // Precalculate thumbnail size to help the browser // lay out the images during initial page load @* int width = (int) media.CurrentUploadedFile!.Width! * 200 / (int) media.CurrentUploadedFile.Height!; *@ }
} @code { [Parameter] [SupplyParameterFromQuery(Name = "t")] public Guid? TagId { get; set; } [Parameter] [SupplyParameterFromQuery(Name = "q")] public string? Query { get; set; } [Parameter] [SupplyParameterFromQuery(Name = "s")] public string? SortOrder { get; set; } [Parameter] [SupplyParameterFromQuery] public bool Ingest { get; set; } = false; public const int PageSize = 50; private string Title { get { if(Query is null) return Ingest ? "Ingest Feed" : "Gallery"; else return "Search Results"; } } private List displayMedia = new(); // protected override void OnInitialized() => // userService.UserSessionState.OnStateChange += ShowNsfwChanged; protected override void OnInitialized() => Console.WriteLine("PENUS"); protected override void OnParametersSet() => LoadMedia(true); protected override void OnAfterRender(bool firstRender) { if(firstRender) jsRuntime.InvokeVoidAsync( "registerScrollObserver", DotNetObjectReference.Create(this)); } [JSInvokable("LoadMedia")] public void LoadMedia(bool initial = false) { Guid? key = displayMedia?.Any() ?? false && !initial ? displayMedia.Last() : null; if(initial) displayMedia = new(); ApiModels.SortOrder? sortOrder = null; if(Enum.TryParse(SortOrder, true, out var so)) sortOrder = so; FeedRequest feedRequest = new FeedRequest() { SelectIngest = Ingest, IncludeNsfw = hb.HasNsfwClaim, ContinuationToken = key, Count = PageSize, SortOrder = sortOrder ?? default }; if(TagId is not null && Query is null) { feedRequest = new FeedTagRequest() { SelectIngest = Ingest, IncludeNsfw = hb.HasNsfwClaim, TagId = (Guid) TagId!, ContinuationToken = key, Count = PageSize, SortOrder = sortOrder ?? default }; } else if(Query is not null && TagId is null) { feedRequest = new FeedSearchRequest() { SelectIngest = Ingest, IncludeNsfw = hb.HasNsfwClaim, Query = string.IsNullOrWhiteSpace(Query) ? null : Query, ContinuationToken = key, Count = PageSize, SortOrder = sortOrder ?? default }; } hb.Feed .LoadChunkAsync(feedRequest) .ContinueWith(async m => { displayMedia!.AddRange(await m); await InvokeAsync(() => StateHasChanged()); }); } // private async void ShowNsfwChanged(UserSessionState userSessionState) { // await InvokeAsync(() => { // LoadMedia(true); // }); // } // public void Dispose() => // userService.UserSessionState.OnStateChange -= ShowNsfwChanged; }