Skip to content

Commit 11d87cd

Browse files
committed
Add first, last and previous links to search and genres feeds
1 parent b7f0a05 commit 11d87cd

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

pkg/opds/feed.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const (
2222
FeedFirstLinkRel = "first"
2323
FeedLastLinkRel = "last"
2424
FeedNextLinkRel = "next"
25-
FeedPrevLinkRel = "prev"
25+
FeedPrevLinkRel = "previous"
2626
FeedSubsectionLinkRel = "subsection"
2727

2828
// Content types

pkg/opds/opds.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"image"
88
"image/jpeg"
99
"io"
10+
"math"
1011
"mime"
1112
"net/http"
1213
"net/url"
@@ -291,6 +292,24 @@ func (h *Handler) serach(w http.ResponseWriter, r *http.Request) {
291292
f.Link = append(f.Link, *nextLink)
292293
books = books[:h.CFG.OPDS.PAGE_SIZE-1]
293294
}
295+
if int(bc) > h.CFG.OPDS.PAGE_SIZE {
296+
if page > 1 {
297+
firstRef := fmt.Sprintf("/opds/genres?language=%s&book=%s&page=1", lang, queryString)
298+
firstLink := &Link{Rel: FeedFirstLinkRel, Href: firstRef, Type: FeedNavigationLinkType}
299+
f.Link = append(f.Link, *firstLink)
300+
301+
prevRef := fmt.Sprintf("/opds/genres?language=%s&book=%s&page=%d", lang, queryString, page-1)
302+
prevLink := &Link{Rel: FeedPrevLinkRel, Href: prevRef, Type: FeedNavigationLinkType}
303+
f.Link = append(f.Link, *prevLink)
304+
}
305+
lastPage := int(math.Ceil(float64(bc) / float64(h.CFG.OPDS.PAGE_SIZE)))
306+
if page < lastPage {
307+
lastRef := fmt.Sprintf("/opds/genres?language=%s&book=%s&page=%d", lang, queryString, lastPage)
308+
lastLink := &Link{Rel: FeedLastLinkRel, Href: lastRef, Type: FeedNavigationLinkType}
309+
f.Link = append(f.Link, *lastLink)
310+
}
311+
}
312+
294313
h.feedBookEntries(books, f)
295314
writeFeed(w, http.StatusOK, *f)
296315
case ac != 0 && bc == 0: // show authors
@@ -309,6 +328,24 @@ func (h *Handler) serach(w http.ResponseWriter, r *http.Request) {
309328
f.Link = append(f.Link, *nextLink)
310329
authors = authors[:h.CFG.OPDS.PAGE_SIZE-1]
311330
}
331+
if int(ac) > h.CFG.OPDS.PAGE_SIZE {
332+
if page > 1 {
333+
firstRef := fmt.Sprintf("/opds/genres?language=%s&book=%s&page=1", lang, queryString)
334+
firstLink := &Link{Rel: FeedFirstLinkRel, Href: firstRef, Type: FeedNavigationLinkType}
335+
f.Link = append(f.Link, *firstLink)
336+
337+
prevRef := fmt.Sprintf("/opds/genres?language=%s&book=%s&page=%d", lang, queryString, page-1)
338+
prevLink := &Link{Rel: FeedPrevLinkRel, Href: prevRef, Type: FeedNavigationLinkType}
339+
f.Link = append(f.Link, *prevLink)
340+
}
341+
lastPage := int(math.Ceil(float64(ac) / float64(h.CFG.OPDS.PAGE_SIZE)))
342+
if page < lastPage {
343+
lastRef := fmt.Sprintf("/opds/genres?language=%s&book=%s&page=%d", lang, queryString, lastPage)
344+
lastLink := &Link{Rel: FeedLastLinkRel, Href: lastRef, Type: FeedNavigationLinkType}
345+
f.Link = append(f.Link, *lastLink)
346+
}
347+
}
348+
312349
// h.feedAuthorEntries(authors, f)
313350
for _, author := range authors {
314351
entry := &Entry{
@@ -596,6 +633,23 @@ func (h *Handler) genreBooks(w http.ResponseWriter, r *http.Request) {
596633
f.Link = append(f.Link, *nextLink)
597634
books = books[:h.CFG.OPDS.PAGE_SIZE]
598635
}
636+
if gbc := h.DB.CountGenreBooks(genreCode); int(gbc) > h.CFG.OPDS.PAGE_SIZE {
637+
if page > 1 {
638+
firstRef := fmt.Sprintf("/opds/genres?language=%s&code=%s&page=1", lang, genreCode)
639+
firstLink := &Link{Rel: FeedFirstLinkRel, Href: firstRef, Type: FeedNavigationLinkType}
640+
f.Link = append(f.Link, *firstLink)
641+
642+
prevRef := fmt.Sprintf("/opds/genres?language=%s&code=%s&page=%d", lang, genreCode, page-1)
643+
prevLink := &Link{Rel: FeedPrevLinkRel, Href: prevRef, Type: FeedNavigationLinkType}
644+
f.Link = append(f.Link, *prevLink)
645+
}
646+
lastPage := int(math.Ceil(float64(gbc) / float64(h.CFG.OPDS.PAGE_SIZE)))
647+
if page < lastPage {
648+
lastRef := fmt.Sprintf("/opds/genres?language=%s&code=%s&page=%d", lang, genreCode, lastPage)
649+
lastLink := &Link{Rel: FeedLastLinkRel, Href: lastRef, Type: FeedNavigationLinkType}
650+
f.Link = append(f.Link, *lastLink)
651+
}
652+
}
599653

600654
h.feedBookEntries(books, f)
601655
writeFeed(w, http.StatusOK, *f)

0 commit comments

Comments
 (0)