@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;
}