diff options
Diffstat (limited to 'Services')
| -rw-r--r-- | Services/FeedService.cs | 37 |
1 files changed, 29 insertions, 8 deletions
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(); } |
