summaryrefslogtreecommitdiff
path: root/Services
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2026-05-13 00:48:51 +1000
committerJake Mannens <jake@asger.xyz>2026-05-13 00:48:51 +1000
commitc2b3c05f027d315f4e553ff656d1f06e99a82488 (patch)
treeaefdc66bb705241807f4365cebe4c4964192d3a4 /Services
parenta565ebb08901e9d1854f8bcfc669063ddea49bce (diff)
v0.16av0.16a
Diffstat (limited to 'Services')
-rw-r--r--Services/FeedService.cs53
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: