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()
}
--
⑨