@page "/ViewMedia"
@using HyperBooru.Util
@inject IJSRuntime jsRuntime
@inject IDbContextFactory dbFactory
@inject ITagService tagService
@inject IMediaService mediaService
@implements IDisposable
@title
} else {
@media.OcrData?.Text
}
@code {
[Parameter]
[SupplyParameterFromQuery(Name = "m")]
public Guid MediaId { get; set; }
private Media media;
private string title;
private bool infoEditMode = false;
private string? shortDescription;
private string? longDescription;
private MediaTagTable mediaTagTable;
private Dialog deleteDialog;
private Dialog ocrDialog;
private TagSelectDialog tagDialog;
private HBContext db;
protected override void OnInitialized() {
db = dbFactory.CreateDbContext();
LoadMedia();
}
private void LoadMedia() {
media = db.Media
.Include(m => m.Tags)
.ThenInclude(t => t.TagDefinition)
.Include(m => m.UploadedFiles)
.Include(m => m.OcrData)
.First(m => m.Guid == MediaId);
title = media.DisplayName ?? "Media View";
}
private void AddTags(TagDefinition[] tagDefs) {
foreach(var tagDef in tagDefs)
tagService.AddTag(media, tagDef);
mediaTagTable.Refresh();
}
private async void SetIngest(bool ingest) {
mediaService.SetIngest(media, ingest);
db.Entry(media).State = EntityState.Detached;
LoadMedia();
if(ingest)
StateHasChanged();
else
await jsRuntime.InvokeVoidAsync("history.back");
}
private bool InfoEditMode {
get => infoEditMode;
set {
shortDescription = media.ShortDescription;
longDescription = media.LongDescription;
infoEditMode = value;
StateHasChanged();
}
}
private void ApplyInfoEdit(bool apply) {
if(apply) {
if(string.IsNullOrEmpty(shortDescription)) shortDescription = null;
if(string.IsNullOrEmpty(longDescription)) longDescription = null;
media.ShortDescription = shortDescription;
media.LongDescription = longDescription;
mediaService.SetDescription(media, shortDescription, longDescription);
}
infoEditMode = false;
}
private async void DeleteMedia() {
mediaService.Delete(media);
await jsRuntime.InvokeVoidAsync("history.back");
}
public void Dispose() => db.Dispose();
}