From 51a4b16af518fde883df50f7f627fda21c18065e Mon Sep 17 00:00:00 2001
From: r <r@freesoftwareextremist.com>
Date: Sun, 15 Dec 2019 06:55:13 +0000
Subject: Fix prev pagination

---
 service/service.go | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

(limited to 'service')

diff --git a/service/service.go b/service/service.go
index 15dab5d..e502b65 100644
--- a/service/service.go
+++ b/service/service.go
@@ -207,10 +207,9 @@ func (svc *service) ServeTimelinePage(ctx context.Context, client io.Writer,
 	var nextLink, prevLink string
 
 	var pg = mastodon.Pagination{
-		MaxID:   maxID,
-		SinceID: sinceID,
-		MinID:   minID,
-		Limit:   20,
+		MaxID: maxID,
+		MinID: minID,
+		Limit: 20,
 	}
 
 	statuses, err := c.GetTimelineHome(ctx, &pg)
@@ -218,14 +217,31 @@ func (svc *service) ServeTimelinePage(ctx context.Context, client io.Writer,
 		return err
 	}
 
+	if len(maxID) > 0 && len(statuses) > 0 {
+		hasPrev = true
+		prevLink = fmt.Sprintf("/timeline?min_id=%s", statuses[0].ID)
+	}
+	if len(minID) > 0 && len(pg.MinID) > 0 {
+		newStatuses, err := c.GetTimelineHome(ctx, &mastodon.Pagination{MinID: pg.MinID, Limit: 20})
+		if err != nil {
+			return err
+		}
+		newStatusesLen := len(newStatuses)
+		if newStatusesLen == 20 {
+			hasPrev = true
+			prevLink = fmt.Sprintf("/timeline?min_id=%s", pg.MinID)
+		} else {
+			i := 20 - newStatusesLen - 1
+			if len(statuses) > i {
+				hasPrev = true
+				prevLink = fmt.Sprintf("/timeline?min_id=%s", statuses[i].ID)
+			}
+		}
+	}
 	if len(pg.MaxID) > 0 {
 		hasNext = true
 		nextLink = fmt.Sprintf("/timeline?max_id=%s", pg.MaxID)
 	}
-	if len(pg.SinceID) > 0 {
-		hasPrev = true
-		prevLink = fmt.Sprintf("/timeline?since_id=%s", pg.SinceID)
-	}
 
 	data := renderer.NewTimelinePageTemplateData(statuses, hasNext, nextLink, hasPrev, prevLink)
 	err = svc.renderer.RenderTimelinePage(ctx, client, data)
-- 
cgit v1.2.3