diff --git a/AobaClient/src/components/media_item.rs b/AobaClient/src/components/media_item.rs index e792a4d..6ee193f 100644 --- a/AobaClient/src/components/media_item.rs +++ b/AobaClient/src/components/media_item.rs @@ -14,8 +14,13 @@ pub fn MediaItem(props: MediaItemProps) -> Element { let filename = item.file_name; let id = item.id.unwrap().value; let thumb = item.thumb_url; + let url = item.media_url; return rsx! { - a { class: "mediaItem", href: "{HOST}/m/{id}", target: "_blank", + a { + class: "mediaItem", + href: "{HOST}/{url}", + target: "_blank", + "data-id" : id, img { src: "{HOST}{thumb}" } span { class: "info", span { class: "name", "{filename}" } diff --git a/AobaCore/Models/Media.cs b/AobaCore/Models/Media.cs index e9e8099..cb44cef 100644 --- a/AobaCore/Models/Media.cs +++ b/AobaCore/Models/Media.cs @@ -1,6 +1,8 @@ using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; +using SixLabors.ImageSharp; + namespace AobaCore.Models; [BsonIgnoreExtraElements] @@ -16,6 +18,7 @@ public class Media public ObjectId Owner { get; set; } public DateTime UploadDate { get; set; } public string[] Tags { get; set; } = []; + public Size? Dimensions { get; set; } public Dictionary Thumbnails { get; set; } = []; @@ -82,7 +85,7 @@ public class Media { return this switch { - //Media { MediaType: MediaType.Raw or MediaType.Text or MediaType.Code} => $"/i/dl/{MediaId}/{Filename}", + Media { MediaType: MediaType.Raw or MediaType.Text or MediaType.Code } => $"/m/{MediaId}/{Uri.EscapeDataString(Filename)}", _ => $"/m/{MediaId}" }; } diff --git a/AobaServer/Controllers/MediaController.cs b/AobaServer/Controllers/MediaController.cs index b7c2401..0625f92 100644 --- a/AobaServer/Controllers/MediaController.cs +++ b/AobaServer/Controllers/MediaController.cs @@ -14,6 +14,7 @@ namespace AobaServer.Controllers; public class MediaController(AobaService aobaService, ILogger logger) : Controller { [HttpGet("{id}")] + [HttpGet("{id}/*")] [ResponseCache(Duration = int.MaxValue)] public async Task MediaAsync(ObjectId id, [FromServices] MongoClient client, CancellationToken cancellationToken) { @@ -58,6 +59,7 @@ public class MediaController(AobaService aobaService, ILogger l } [HttpGet("/t/{id}")] + [ResponseCache(Duration = int.MaxValue)] public async Task ThumbAsync(ObjectId id, [FromServices] ThumbnailService thumbnailService, CancellationToken cancellationToken = default) { var thumb = await thumbnailService.GetThumbnailByFileIdAsync(id, cancellationToken); diff --git a/AobaServer/Proto/Types.proto b/AobaServer/Proto/Types.proto index 41e441e..2df1884 100644 --- a/AobaServer/Proto/Types.proto +++ b/AobaServer/Proto/Types.proto @@ -82,6 +82,7 @@ message MediaModel { int32 viewCount = 5; Id owner = 6; string thumbUrl = 7; + string mediaUrl = 8; } enum MediaType { @@ -99,3 +100,14 @@ message ShareXResponse { string error = 2; } } + + +message SearchQuery { + optional string queryText = 1; + repeated Filter filters = 2; +} + +message Filter { + string key = 1; + repeated string values = 2; +} \ No newline at end of file diff --git a/AobaServer/Utils/ProtoExtensions.cs b/AobaServer/Utils/ProtoExtensions.cs index f7bd73a..4ef0cdd 100644 --- a/AobaServer/Utils/ProtoExtensions.cs +++ b/AobaServer/Utils/ProtoExtensions.cs @@ -56,6 +56,7 @@ public static class ProtoExtensions Owner = media.Owner.ToId(), ViewCount = media.ViewCount, ThumbUrl = thumbUrl, + MediaUrl = media.GetMediaUrl() }; }