From 5dfad8e3366d1635aca89d5987d745d89d3d6a9a Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Mon, 14 Apr 2025 02:41:17 +1000 Subject: Added framework for WindowedReader class --- WindowedReader.cs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 WindowedReader.cs diff --git a/WindowedReader.cs b/WindowedReader.cs new file mode 100644 index 0000000..99c6e01 --- /dev/null +++ b/WindowedReader.cs @@ -0,0 +1,50 @@ +using System.Reflection; + +namespace HyperBooru; + +public class WindowedReader where T : class { + public int WindowSize { get; init; } = 200; + + private LinkedList window = new(); + private IQueryable DataSource { get; set; } + + private object loadLock = new(); + private Task loadTask = Task.CompletedTask; + private LoadOperation currentOperation = LoadOperation.None; + + public WindowedReader(IQueryable dataSource) => + DataSource = dataSource; + + private void DoLoad(LoadOperation operation) { + T? bookmark = null; + IQueryable 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 +} -- cgit v1.3