blob: 99c6e0178aa9d11291ff858067d5ce592588aaf3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
using System.Reflection;
namespace HyperBooru;
public class WindowedReader<T> where T : class {
public int WindowSize { get; init; } = 200;
private LinkedList<T> window = new();
private IQueryable<T> DataSource { get; set; }
private object loadLock = new();
private Task loadTask = Task.CompletedTask;
private LoadOperation currentOperation = LoadOperation.None;
public WindowedReader(IQueryable<T> dataSource) =>
DataSource = dataSource;
private void DoLoad(LoadOperation operation) {
T? bookmark = null;
IQueryable<T> query = DataSource;
PropertyInfo orderProperty;
switch(operation) {
case LoadOperation.InitialLoad:
window = new(DataSource.Take(WindowSize));
break;
case LoadOperation.LoadPrevious:
bookmark = window.FirstOrDefault();
break;
case LoadOperation.LoadNext:
bookmark = window.LastOrDefault();
break;
default:
return;
}
if(bookmark is null) {
DoLoad(LoadOperation.InitialLoad);
return;
}
}
}
public enum LoadOperation {
None = 0,
InitialLoad,
LoadPrevious,
LoadNext
}
|