From 6418307c64da236a0268f4496f793d982e128ad0 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Wed, 13 Jul 2022 09:57:47 +0200 Subject: [feature] Add back/next buttons to profiles for paging through statuses (#708) * add GetAccountWebStatuses to db * add WebStatusesGet func to processor * don't add limit to next/prev links if 0 * take query params for next/prev statuses * add separate next + prev links for convenience * show 'nothing here' message if no statuses exist * add back / next links to profiles * allow paging down only * go fmt ./... * 'recent public toots' -> 'latest public toots' --- internal/util/timeline.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'internal/util') diff --git a/internal/util/timeline.go b/internal/util/timeline.go index 929464add..bdb0f3f03 100644 --- a/internal/util/timeline.go +++ b/internal/util/timeline.go @@ -61,12 +61,15 @@ func PackageTimelineableResponse(params TimelineableResponseParams) (*apimodel.T Items: params.Items, } - // prepare the next and previous links if len(params.Items) != 0 { protocol := config.GetProtocol() host := config.GetHost() - nextRaw := fmt.Sprintf("limit=%d&%s=%s", params.Limit, params.NextMaxIDKey, params.NextMaxIDValue) + // next + nextRaw := params.NextMaxIDKey + "=" + params.NextMaxIDValue + if params.Limit != 0 { + nextRaw = fmt.Sprintf("limit=%d&", params.Limit) + nextRaw + } for _, p := range params.ExtraQueryParams { nextRaw = nextRaw + "&" + p } @@ -76,9 +79,14 @@ func PackageTimelineableResponse(params TimelineableResponseParams) (*apimodel.T Path: params.Path, RawQuery: nextRaw, } - next := fmt.Sprintf("<%s>; rel=\"next\"", nextLink.String()) + nextLinkString := nextLink.String() + timelineResponse.NextLink = nextLinkString - prevRaw := fmt.Sprintf("limit=%d&%s=%s", params.Limit, params.PrevMinIDKey, params.PrevMinIDValue) + // prev + prevRaw := params.PrevMinIDKey + "=" + params.PrevMinIDValue + if params.Limit != 0 { + prevRaw = fmt.Sprintf("limit=%d&", params.Limit) + prevRaw + } for _, p := range params.ExtraQueryParams { prevRaw = prevRaw + "&" + p } @@ -88,7 +96,12 @@ func PackageTimelineableResponse(params TimelineableResponseParams) (*apimodel.T Path: params.Path, RawQuery: prevRaw, } - prev := fmt.Sprintf("<%s>; rel=\"prev\"", prevLink.String()) + prevLinkString := prevLink.String() + timelineResponse.PrevLink = prevLinkString + + // link header + next := fmt.Sprintf("<%s>; rel=\"next\"", nextLinkString) + prev := fmt.Sprintf("<%s>; rel=\"prev\"", prevLinkString) timelineResponse.LinkHeader = next + ", " + prev } -- cgit v1.2.3