shithub: hell

Download patch

ref: 162c733fdd42ec8d872931375a96a9fe755efb4a
parent: b19a327ceef4e79820f68d25e23aca97edf8e1c1
author: penny <penny@limitedideas.org>
date: Sun Sep 28 13:44:44 EDT 2025

buffer pages dynamically

--- a/pages.go
+++ b/pages.go
@@ -158,24 +158,25 @@
 	return &itemArray
 }
 
-func findIndex(height int, items []PageItem) (index int) {
+
+func findIndex(height int, items []PageItem) (index int, bumped bool) {
 	linecount := 5
 	for i, _ := range items {
 		linecount = linecount + items[i].lines
 		if i != 0 && linecount > height {
-			return
+			return index, true
 		}
 		//-1 lines indicates we should display this item on its own page
 		if i != 0 && items[i].lines == -1 {
-			return
+			return index, false
 		}
 		if i == 0 && items[i].lines == -1 {
 			index++
-			return
+			return index, false
 		}
 		index++
 	}
-	return
+	return index, false
 }
 
 func (page *Page) findIndexStart() {
@@ -187,7 +188,8 @@
 	var items []PageItem
 	items = (*page.itembuffer)[:page.index]
 	items = reverseArray(items)
-	page.index = page.index - findIndex(windowheight, items)
+	newindex, _ := findIndex(windowheight, items)
+	page.index = page.index - newindex
 	return
 }
 
@@ -199,9 +201,33 @@
 	}
 	page.indexend = page.index
 	var items []PageItem
+	newend := page.indexend
+	var bumped bool
+	if page.itembuffer == nil {
+		page.Buffer()
+	}
 	if len(*page.itembuffer) >= page.index {
-		items = (*page.itembuffer)[page.index:]
-		page.indexend = page.indexend + findIndex(windowheight, items)
+		for {
+			items = (*page.itembuffer)[page.index:]
+			newend, bumped = findIndex(windowheight, items)
+			newend = page.indexend + newend
+			if bumped {
+				page.indexend = newend
+				return
+			}
+			if !bumped && len((*page.itembuffer)[page.indexend:]) > 0 {
+				page.indexend = newend
+				return
+			}
+			//If we didn't bump and there's no posts left, check for more
+			if !bumped && len((*page.itembuffer)[page.indexend:]) == 0 {
+				page.Buffer()
+				if len((*page.itembuffer)[page.indexend:]) == 0 {
+					page.indexend = newend
+					return
+				}
+			}
+		}
 	}
 	return
 }
@@ -210,17 +236,11 @@
 	if page.itembuffer == nil {
 		page.itembuffer = &[]PageItem{}
 	}
-	if page.indexend == 0 {
-		*page.itembuffer = append(*page.itembuffer, *page.loader.Load(20)...)
-	}
-	if len(*page.itembuffer) < page.indexend {
-		*page.itembuffer = append(*page.itembuffer, *page.loader.Load(20)...)
-	}
+	*page.itembuffer = append(*page.itembuffer, *page.loader.Load(20)...)
 }
 
 func (page *Page) String() string {
 	var sb strings.Builder
-	page.Buffer()
 	page.findIndexEnd()
 	var items []PageItem
 	items = (*page.itembuffer)[page.index:page.indexend]
@@ -239,7 +259,6 @@
 	page.page++
 	page.index = page.indexend
 	page.indexend = 0
-	page.Buffer()
 	page.findIndexEnd()
 }
 
--