ref: 7d1a10551f567003be765fff0e56a84a43423835
dir: /pages.go/
package main
import (
"context"
"fmt"
"strings"
"codeberg.org/penny64/hellclient-go-mastodon"
)
type StatusLoader interface {
Load(int) *[]PageItem
}
type Page struct {
loader StatusLoader
//Array index for the item buffer
index int
//our previous index for going back
previndex int
//Semantic page number for the UI
page int
itembuffer *[]PageItem
}
type NotificationPages struct {
hc *Hellclient
page *mastodon.Pagination
}
type StatusPages struct {
hc *Hellclient
page *mastodon.Pagination
}
type PageItem struct {
itemtext string
lines int
}
func (statusData *StatusPages) Load(limit int) *[]PageItem {
if statusData.page == nil {
statusData.page = &mastodon.Pagination{}
}
statusData.page.Limit = int64(limit)
var statuses []*mastodon.Status
var err error
statuses, err = statusData.hc.client.GetBookmarks(context.Background(), statusData.page)
if err != nil {
fmt.Printf("Error loading status page: %s\n", err)
}
var itemArray []PageItem
for i, _ := range statuses {
item := PageItem{itemtext: statusData.hc.renderAndIncrement(statusData.hc.ctxref, statuses[i]) + "\n"}
itemArray = append(itemArray, item)
}
statusData.page.MinID = ""
return &itemArray
}
func (noticeData *NotificationPages) Load(limit int) *[]PageItem {
if noticeData.page == nil {
noticeData.page = &mastodon.Pagination{}
}
noticeData.page.Limit = int64(limit)
var notices []*mastodon.Notification
var err error
getnotifs := func(job *GenericJob){notices, err = noticeData.hc.client.GetNotifications(context.Background(), noticeData.page)}
notifjob := noticeData.hc.dispatchFunc(getnotifs)
notifjob.Wait()
if err != nil {
fmt.Printf("Error getting notification page: %s\n", err)
}
noticeArray := noticeData.hc.RenderNotificationsArray(notices)
var itemArray []PageItem
for i, _ := range noticeArray {
item := PageItem{itemtext: noticeArray[i]}
itemArray = append(itemArray, item)
}
noticeData.page.MinID = ""
return &itemArray
}
func (page *Page) Buffer() {
if page.itembuffer == nil {
page.itembuffer = &[]PageItem{}
}
if len(*page.itembuffer) < (page.index + 5) {
*page.itembuffer = append(*page.itembuffer, *page.loader.Load(20)...)
}
}
func (page *Page) String() string {
var sb strings.Builder
page.Buffer()
var items []PageItem
if len(*page.itembuffer) >= page.index {
items = (*page.itembuffer)[page.index:]
}
if len(items) > 5 {
items = items[:5]
}
reverseditems := reverseArray(items)
for i, _ := range reverseditems {
sb.WriteString(reverseditems[i].itemtext)
}
sb.WriteString(page.pageTitle())
return sb.String()
}
func (page *Page) Next() {
page.page++
page.index = page.index + 5
}
func (page *Page) Prev() {
if(page.index -5 ) >= 0 {
page.index = page.index - 5
page.page--
}
}
func (page *Page) pageTitle() string {
return fmt.Sprintf("Page %v. /next for next page /prev for previous\n", page.page+1)
}
func (page *Page) Current() int {
return page.page
}