From ee0e3374332af78c6189cda3a94b87a259228ce7 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sat, 18 Mar 2017 15:03:30 -0700 Subject: [PATCH] opds(fix): avoid infinite loop on paging --- frontend/ui/widget/opdsbrowser.lua | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/ui/widget/opdsbrowser.lua b/frontend/ui/widget/opdsbrowser.lua index a87a463e9..ae5c83dd6 100644 --- a/frontend/ui/widget/opdsbrowser.lua +++ b/frontend/ui/widget/opdsbrowser.lua @@ -474,6 +474,8 @@ end function OPDSBrowser:appendCatalog(item_table_url) local new_table = self:genItemTableFromURL(item_table_url) + if #new_table == 0 then return false end + for _, item in ipairs(new_table) do table.insert(self.item_table, item) end @@ -728,11 +730,20 @@ end function OPDSBrowser:onNext() logger.dbg("fetch next page catalog") - local hrefs = self.item_table.hrefs + -- self.page_num comes from menu.lua local page_num = self.page_num - while page_num == self.page_num and hrefs and hrefs.next do - self:appendCatalog(hrefs.next) + -- fetch more entries until we fill out one page or reach the end + while page_num == self.page_num do + local hrefs = self.item_table.hrefs + if hrefs and hrefs.next then + if not self:appendCatalog(hrefs.next) then + break -- reach end of paging + end + else + break + end end + return true end