diff options
Diffstat (limited to 'Services')
| -rw-r--r-- | Services/FeedService.cs | 53 |
1 files changed, 44 insertions, 9 deletions
diff --git a/Services/FeedService.cs b/Services/FeedService.cs index 067bff7..3744e73 100644 --- a/Services/FeedService.cs +++ b/Services/FeedService.cs @@ -26,6 +26,8 @@ public interface IFeedService { Media? key = null, int count = 50, SortOrder sortOrder = SortOrder.ObjectId); + + public Media[] LoadChunk(FeedRequest feedRequest); } public class FeedService : IFeedService { @@ -37,35 +39,67 @@ public class FeedService : IFeedService { public Media[] LoadChunk( bool selectIngest, bool includeNsfw, - Media? key, + Media? continuationToken, int count, SortOrder sortOrder) => LoadChunkInternal( - selectIngest, includeNsfw, null, null, key, count, sortOrder); + selectIngest, includeNsfw, null, null, continuationToken?.Guid, count, sortOrder); public Media[] LoadChunk( bool selectIngest, bool includeNsfw, string query, - Media? key, + Media? continuationToken, int count, SortOrder sortOrder) => LoadChunkInternal( - selectIngest, includeNsfw, query, null, key, count, sortOrder); + selectIngest, includeNsfw, query, null, continuationToken?.Guid, count, sortOrder); public Media[] LoadChunk( bool selectIngest, bool includeNsfw, Guid tagId, - Media? key, + Media? continuationToken, int count, SortOrder sortOrder) => LoadChunkInternal( - selectIngest, includeNsfw, null, tagId, key, count, sortOrder); + selectIngest, includeNsfw, null, tagId, continuationToken?.Guid, count, sortOrder); + + public Media[] LoadChunk(FeedRequest feedRequest) { + switch(feedRequest) { + case FeedSearchRequest searchRequest: + return LoadChunkInternal( + selectIngest: searchRequest.SelectIngest, + includeNsfw: searchRequest.IncludeNsfw, + query: searchRequest.Query, + tagId: null, + continuationToken: searchRequest.ContinuationToken, + count: searchRequest.Count, + sortOrder: searchRequest.SortOrder); + case FeedTagRequest tagRequest: + return LoadChunkInternal( + selectIngest: tagRequest.SelectIngest, + includeNsfw: tagRequest.IncludeNsfw, + query: null, + tagId: tagRequest.TagId, + continuationToken: tagRequest.ContinuationToken, + count: tagRequest.Count, + sortOrder: tagRequest.SortOrder); + default: + return LoadChunkInternal( + selectIngest: feedRequest.SelectIngest, + includeNsfw: feedRequest.IncludeNsfw, + query: null, + tagId: null, + continuationToken: feedRequest.ContinuationToken, + count: feedRequest.Count, + sortOrder: feedRequest.SortOrder); + } + } private Media[] LoadChunkInternal( bool selectIngest, bool includeNsfw, string? query, Guid? tagId, - Media? key, + Guid? continuationToken, int count, SortOrder sortOrder) { @@ -107,8 +141,9 @@ public class FeedService : IFeedService { .Any()); } - if(key is not null) - media = media.Where(m => m.ObjectId > key.ObjectId); + if(continuationToken is not null) + media = media + .Where(m => m.ObjectId > db.Media.First(m => m.Guid == continuationToken).ObjectId); switch(sortOrder) { case SortOrder.ObjectId: |
