shithub: hell

ref: 32f4e4ba21ef726320c9e879ebb5fdfd46161c65
dir: /pages.go/

View raw version
package main

import (
	"context"
	"fmt"
	"strings"
	
	"codeberg.org/penny64/hellclient-go-mastodon"
)

type StatusLoader interface {
	Load(int) *[]PageItem
}

type Page struct {
	loader StatusLoader
	index 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 {
	return nil
}

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)
	}
	
	fmt.Printf("%+v\n", noticeData.page)
	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)
	}
	return sb.String()
}

func (page *Page) Next() {
	page.index = page.index + 5
}

func (page *Page) Prev() {
	if(page.index -5 ) >= 0 {
		page.index = page.index - 5
	}
}

func (page *Page) Current() int {
	return 0
}