diff options
Diffstat (limited to 'Media.cs')
| -rw-r--r-- | Media.cs | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/Media.cs b/Media.cs new file mode 100644 index 0000000..2ff9e63 --- /dev/null +++ b/Media.cs @@ -0,0 +1,92 @@ +using HyperBooru.ApiModels; +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +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<UploadedFile> UploadedFiles { get; set; } = new(); + + public bool IsIngest => Tags + .Select(t => t.TagDefinitionId) + .Contains((int) HBObjectId.IngestTag); + + public string? DisplayName { + get { + if(ShortDescription is not null) + return ShortDescription; + + return UploadedFiles + .OrderBy(f => f.UploadTime) + .First()?.Filename ?? Guid.ToString().ToUpper(); + } + } + + public static explicit operator ApiModels.Media(Media media) => + new() { + MediaId = media.Guid, + ShortDescription = media.ShortDescription, + LongDescription = media.LongDescription + }; +} + +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 string? Path { get; set; } + public PathType? PathType { get; set; } + public virtual Media Media { get; set; } + + public static explicit operator ApiModels.UploadedFile(UploadedFile uploadedFile) => + new() { + MediaId = uploadedFile.Media.Guid, + UploadedFileId = uploadedFile.Guid, + Checksum = uploadedFile.Checksum, + ChecksumVerified = uploadedFile.ChecksumVerified, + Filename = uploadedFile.Filename, + Length = uploadedFile.Length, + MimeType = uploadedFile.MimeType, + Width = uploadedFile.Width, + Height = uploadedFile.Height, + UploadTime = uploadedFile.UploadTime, + LastAccessTime = uploadedFile.LastAccessTime, + LastWriteTime = uploadedFile.LastWriteTime, + CreateTime = uploadedFile.CreateTime, + Path = uploadedFile.Path, + PathType = (ApiModels.PathType?) uploadedFile.PathType + }; +} + +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; } + + public static explicit operator ApiModels.OcrData(OcrData ocrData) => + new() { + MediaId = ocrData.Media.Guid, + Text = ocrData.Text, + SearchableText = ocrData.SearchableText, + Timestamp = ocrData.Timestamp + }; +}
\ No newline at end of file |
