diff options
| author | Jake Mannens <jake@asger.xyz> | 2026-04-01 06:00:33 +1100 |
|---|---|---|
| committer | Jake Mannens <jake@asger.xyz> | 2026-04-01 06:00:33 +1100 |
| commit | 0d517e182dcf97e9fe46f6524f1d116ca5a94929 (patch) | |
| tree | 5ec8fbfdabe7db20fe2555dc38836248a4a397d4 | |
| parent | dfe942d3cf4a60c06a530c64793981bfff5fe9fd (diff) | |
v0.6av0.6a
| -rw-r--r-- | Enum.cs | 6 | ||||
| -rw-r--r-- | Pages/Gallery.razor | 17 | ||||
| -rw-r--r-- | Server.csproj | 4 | ||||
| -rw-r--r-- | Services/FeedService.cs | 37 |
4 files changed, 51 insertions, 13 deletions
@@ -1,5 +1,11 @@ namespace HyperBooru; +public enum SortOrder { + ObjectId, + LastWriteTime, + Random, +} + public enum PathType { Windows, Unix diff --git a/Pages/Gallery.razor b/Pages/Gallery.razor index 704b73d..1464c13 100644 --- a/Pages/Gallery.razor +++ b/Pages/Gallery.razor @@ -59,6 +59,10 @@ public string? Query { get; set; } [Parameter] + [SupplyParameterFromQuery(Name = "s")] + public string? SortOrder { get; set; } + + [Parameter] [SupplyParameterFromQuery] public bool Ingest { get; set; } = false; @@ -94,26 +98,33 @@ if(initial) displayMedia = new(); + SortOrder? sortOrder = null; + if(Enum.TryParse<SortOrder>(SortOrder, true, out var so)) + sortOrder = so; + if(TagId is not null && Query is null) { displayMedia!.AddRange(feedService.LoadChunk( selectIngest: Ingest, includeNsfw: userService.UserSessionState.ShowNsfw, tagId: (Guid) TagId!, key: key, - count: PageSize)); + count: PageSize, + sortOrder: sortOrder ?? default)); } else if(Query is not null && TagId is null) { displayMedia!.AddRange(feedService.LoadChunk( selectIngest: Ingest, includeNsfw: userService.UserSessionState.ShowNsfw, query: string.IsNullOrWhiteSpace(Query) ? null : Query, key: key, - count: PageSize)); + count: PageSize, + sortOrder: sortOrder ?? default)); } else { displayMedia!.AddRange(feedService.LoadChunk( selectIngest: Ingest, includeNsfw: userService.UserSessionState.ShowNsfw, key: key, - count: PageSize)); + count: PageSize, + sortOrder: sortOrder ?? default)); } StateHasChanged(); diff --git a/Server.csproj b/Server.csproj index 1a48326..46a9ffd 100644 --- a/Server.csproj +++ b/Server.csproj @@ -6,9 +6,9 @@ <ImplicitUsings>enable</ImplicitUsings> <AssemblyName>HyperBooru</AssemblyName> <RootNamespace>HyperBooru</RootNamespace> - <AssemblyVersion>0.5.0.0</AssemblyVersion> + <AssemblyVersion>0.6.0.0</AssemblyVersion> <FileVersion>$(AssemblyVersion)</FileVersion> - <Version>0.5-alpha</Version> + <Version>0.6-alpha</Version> <UserSecretsId>2907567f-4640-4581-8f4d-0977952d26bd</UserSecretsId> </PropertyGroup> diff --git a/Services/FeedService.cs b/Services/FeedService.cs index 864a751..77f92b5 100644 --- a/Services/FeedService.cs +++ b/Services/FeedService.cs @@ -7,21 +7,24 @@ public interface IFeedService { bool selectIngest, bool includeNsfw, Media? key = null, - int count = 50); + int count = 50, + SortOrder sortOrder = SortOrder.ObjectId); public Media[] LoadChunk( bool selectIngest, bool includeNsfw, string query, Media? key = null, - int count = 50); + int count = 50, + SortOrder sortOrder = SortOrder.ObjectId); public Media[] LoadChunk( bool selectIngest, bool includeNsfw, Guid tagId, Media? key = null, - int count = 50); + int count = 50, + SortOrder sortOrder = SortOrder.ObjectId); } public class FeedService : IFeedService { @@ -34,21 +37,27 @@ public class FeedService : IFeedService { bool selectIngest, bool includeNsfw, Media? key, - int count) => LoadChunkInternal(selectIngest, includeNsfw, null, null, key, count); + int count, + SortOrder sortOrder) => LoadChunkInternal( + selectIngest, includeNsfw, null, null, key, count, sortOrder); public Media[] LoadChunk( bool selectIngest, bool includeNsfw, string query, Media? key, - int count) => LoadChunkInternal(selectIngest, includeNsfw, query, null, key, count); + int count, + SortOrder sortOrder) => LoadChunkInternal( + selectIngest, includeNsfw, query, null, key, count, sortOrder); public Media[] LoadChunk( bool selectIngest, bool includeNsfw, Guid tagId, Media? key, - int count) => LoadChunkInternal(selectIngest, includeNsfw, null, tagId, key, count); + int count, + SortOrder sortOrder) => LoadChunkInternal( + selectIngest, includeNsfw, null, tagId, key, count, sortOrder); private Media[] LoadChunkInternal( bool selectIngest, @@ -56,7 +65,8 @@ public class FeedService : IFeedService { string? query, Guid? tagId, Media? key, - int count) { + int count, + SortOrder sortOrder) { if(selectIngest && !includeNsfw) return Array.Empty<Media>(); @@ -99,8 +109,19 @@ public class FeedService : IFeedService { if(key is not null) media = media.Where(m => m.ObjectId > key.ObjectId); + switch(sortOrder) { + case SortOrder.ObjectId: + media = media.OrderBy(m => m.ObjectId); + break; + case SortOrder.LastWriteTime: + media = media.OrderBy(m => m.CurrentUploadedFile!.LastWriteTime); + break; + case SortOrder.Random: + media = media.OrderBy(m => EF.Functions.Random()); + break; + } + return media - .OrderBy(m => m.ObjectId) .Take(count) .ToArray(); } |
