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