From 1cb83ccea3f8429a0f6eef603618add99100771b Mon Sep 17 00:00:00 2001 From: logmanoriginal Date: Fri, 6 Apr 2018 22:13:52 +0200 Subject: [PATCH] [IPBBridge] Use limit for the number of items The limit was used to specify the number of pages to return from a given topic which resulted in the number of returned items variing between one and however many entries are listed on one page. This commit changes the implementation for the limit to keep loading more pages until the specified limit is reached. Excessive elements are removed in order to return the exact amount of items specified by the limit. This behavior is closer to how other bridges are implemented and makes it more natural to use without being too confusing. Existing queries must be updated to account for the new limit. References #657 --- bridges/IPBBridge.php | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/bridges/IPBBridge.php b/bridges/IPBBridge.php index f3fa14f..5b9d0e0 100644 --- a/bridges/IPBBridge.php +++ b/bridges/IPBBridge.php @@ -18,8 +18,8 @@ class IPBBridge extends FeedExpander { 'name' => 'Limit', 'type' => 'number', 'required' => false, - 'title' => 'Specify how many pages should be fetched (-1: all)', - 'defaultValue' => 1 + 'title' => 'Specifies the number of items to return on each request (-1: all)', + 'defaultValue' => 10 ) ) ); @@ -161,15 +161,18 @@ class IPBBridge extends FeedExpander { $next = null; // Holds the URI of the next page - do { - // Skip loading HTML on first iteration - if(!is_null($next)) { - $html = getSimpleHTMLDOMCached($next); + while(true) { + $next = $this->$callback($html, is_null($next)); + + if(is_null($next) || ($limit > 0 && count($this->items) >= $limit)) { + break; } - $next = $this->$callback($html, is_null($next)); - $limit--; - } while(!is_null($next) && $limit <> 0); + $html = getSimpleHTMLDOMCached($next); + } + + // We might have more items than specified, remove excess + $this->items = array_slice($this->items, 0, $limit); } private function collectTopicArticle($html, $firstrun = true){