summaryrefslogtreecommitdiff
path: root/Server/Media.cs
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2026-05-22 00:52:16 +1000
committerJake Mannens <jake@asger.xyz>2026-05-23 22:22:55 +1000
commit12eaa5814ef20b0910e8d64a753378b6f6797989 (patch)
tree062cf477c29054e0f089cb80f0cd79a9f3b7ccd9 /Server/Media.cs
parent6de5d7f5364fe1d54703da6d6b7cb08ea26e939f (diff)
Initial commitwasm-initial
Diffstat (limited to 'Server/Media.cs')
-rw-r--r--Server/Media.cs92
1 files changed, 92 insertions, 0 deletions
diff --git a/Server/Media.cs b/Server/Media.cs
new file mode 100644
index 0000000..2ff9e63
--- /dev/null
+++ b/Server/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