using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Net.NetworkInformation; namespace HyperBooru; public class Media : HBObject { public string? ShortDescription { get; set; } public string? LongDescription { get; set; } public virtual OcrData? OcrData { get; set; } public virtual UploadedFile? CurrentUploadedFile { get; set; } public virtual List UploadedFiles { get; set; } = new(); public bool IsIngest => Tags .Select(t => t.TagDefinitionId) .Contains(HBContext.IngestTagId); public string? DisplayName { get { if(ShortDescription is not null) return ShortDescription; return UploadedFiles .OrderBy(f => f.UploadTime) .First()?.Filename ?? Guid.ToString().ToUpper(); } } } public class UploadedFile : HBObject { public string Checksum { get; set; } public bool ChecksumVerified { get; set; } = false; public string? Filename { get; set; } public long Length { get; set; } public string MimeType { get; set; } public int? Width { get; set; } public int? Height { get; set; } public DateTime UploadTime { get; set; } = DateTime.UtcNow; public DateTime? LastAccessTime { get; set; } public DateTime? LastWriteTime { get; set; } public DateTime? CreateTime { get; set; } public virtual Media Media { get; set; } } public class OcrData { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int OcrDataId { get; set; } [ForeignKey("ObjectId")] public int MediaId { get; set; } public string Text { get; set; } public string SearchableText { get; set; } public DateTime Timestamp { get; set; } public virtual Media Media { get; set; } }