summaryrefslogtreecommitdiff
path: root/Pages/ViewMedia.razor
diff options
context:
space:
mode:
Diffstat (limited to 'Pages/ViewMedia.razor')
-rw-r--r--Pages/ViewMedia.razor106
1 files changed, 106 insertions, 0 deletions
diff --git a/Pages/ViewMedia.razor b/Pages/ViewMedia.razor
new file mode 100644
index 0000000..8436159
--- /dev/null
+++ b/Pages/ViewMedia.razor
@@ -0,0 +1,106 @@
+@page "/ViewMedia"
+@inject IDbContextFactory<HBContext> dbFactory
+@inject ITagService tagService
+
+<PageTitle>@title</PageTitle>
+
+<link rel="stylesheet" type="text/css" href="@(nameof(HyperBooru)).styles.css"/>
+
+<div id="content">
+ <img src="/media/@(media.Guid)"/>
+ <div id="metadata">
+ <TabContainer>
+ <TabPane Title="Media Info">
+ <div id="metadata-fileinfo">
+ <p>Title: <i>@(@media.ShortDescription ?? "None")</i></p>
+ <p>Description: <i>@(media.LongDescription ?? "None")</i></p>
+ <p>Upload history</p>
+ <hr />
+ <table class="data-table">
+ <tr>
+ <th>Created On</th>
+ <th>Last Write</th>
+ <th>Uploaded On</th>
+ <th>Filename</th>
+ <th>Original Checksum</th>
+ </tr>
+ @foreach(var file in media.UploadedFiles) {
+ <tr>
+ <td>@(file.CreateTime?.ToString() ?? "N/A")</td>
+ <td>@(file.LastWriteTime?.ToString() ?? "N/A")</td>
+ <td>@file.UploadTime</td>
+ <td>@file.Filename</td>
+ <td>@file.OriginalChecksum</td>
+ </tr>
+ }
+ </table>
+ <div class="button-container">
+ <button @onclick=@(() => deleteDialog.Show()) class="warning">Delete</button>
+ <button>Apply</button>
+ </div>
+ </div>
+ </TabPane>
+ <TabPane Title="Tags">
+ <div id="metadata-tags">
+ <MediaTagTable Media=media @ref=mediaTagTable/>
+ <div class="button-container">
+ <button @onclick=@(() => tagDialog.Show()) class="secondary">Add Tag</button>
+ @if(media.IsIngest) {
+ <button @onclick=@(() => SetIngest(false))>Mark Tagging Complete</button>
+ } else {
+ <button class="secondary" @onclick=@(() => SetIngest(true))>Mark Tagging Incomplete</button>
+ }
+ </div>
+ </div>
+ </TabPane>
+ </TabContainer>
+ </div>
+</div>
+
+<Dialog Title="Delete this media?" @ref=deleteDialog>
+ <div class="button-container">
+ <button class="secondary" @onclick=@(() => deleteDialog.Hide())>Cancel</button>
+ <button onclick="deleteMedia()" class="warning">Confirm</button>
+ </div>
+</Dialog>
+
+<TagSelectDialog
+ Title="Select one or more tag(s) to add"
+ OnSubmit=AddTags
+ @ref=tagDialog/>
+
+@code {
+ [Parameter]
+ [SupplyParameterFromQuery(Name = "m")]
+ public Guid MediaId { get; set; }
+
+ private Media media;
+
+ private string title;
+
+ private bool infoEditMode = false;
+
+ private Dialog deleteDialog;
+ private TagSelectDialog tagDialog;
+ private MediaTagTable mediaTagTable;
+
+ protected override void OnInitialized() {
+ using var db = dbFactory.CreateDbContext();
+ media = db.Media.AsNoTracking().First(m => m.Guid == MediaId);
+ if(media is null)
+ throw new ArgumentException("Media not found!");
+
+ title = media.DisplayName ?? "Media View";
+ }
+
+ private void AddTags(TagDefinition[] tagDefs) {
+ Console.WriteLine($"Adding tags: {string.Join(", ", tagDefs.Select(td => td.Name))}");
+ foreach(var tagDef in tagDefs)
+ tagService.AddTag(media, tagDef);
+ mediaTagTable.Refresh();
+ }
+
+ private void SetIngest(bool ingest) {
+ StateHasChanged();
+ }
+}