diff options
| author | 2013-11-12 18:41:31 +0100 | |
|---|---|---|
| committer | 2013-11-12 18:41:31 +0100 | |
| commit | 14342603a05b64294762c45798debe3a66db26eb (patch) | |
| tree | 39b317aa8e472e0cfa41bb4f96bb66111dcf9d46 /app/models | |
| parent | 58cb842966f437a44f58644439f513b94f9dccac (diff) | |
Suppression de requêtes de catégorie et de flux
* Suppression de requêtes inutiles en utilisant mieux les données déjà
reçues.
* Change la signature de `CategoryDAO->listCategories ($prePopulateFeeds
= true, $details = false)` pour ne pas charger de détails inutiles pour
la vue principale (comme feed.description, feed.url...).
* C'est la requête la plus importante.
Suite de https://github.com/marienfressinaud/FreshRSS/pull/180
Diffstat (limited to 'app/models')
| -rwxr-xr-x | app/models/Category.php | 31 | ||||
| -rw-r--r-- | app/models/Feed.php | 33 |
2 files changed, 39 insertions, 25 deletions
diff --git a/app/models/Category.php b/app/models/Category.php index 419284130..9b36b3bcc 100755 --- a/app/models/Category.php +++ b/app/models/Category.php @@ -175,12 +175,13 @@ class CategoryDAO extends Model_pdo { } } - public function listCategories ($prePopulateFeeds = true) { + public function listCategories ($prePopulateFeeds = true, $details = false) { if ($prePopulateFeeds) { - $sql = 'SELECT c.id AS c_id, c.name AS c_name, c.color AS c_color, ' + $sql = 'SELECT c.id AS c_id, c.name AS c_name, ' + . ($details ? 'c.color AS c_color, ' : '') . 'COUNT(CASE WHEN e.is_read = 0 THEN 1 END) AS nbNotRead, ' . 'COUNT(e.id) AS nbEntries, ' - . 'f.* ' + . ($details ? 'f.* ' : 'f.id, f.name, f.website, f.priority, f.error ') . 'FROM ' . $this->prefix . 'category c ' . 'LEFT OUTER JOIN ' . $this->prefix . 'feed f ON f.category = c.id ' . 'LEFT OUTER JOIN ' . $this->prefix . 'entry e ON e.id_feed = f.id ' @@ -270,6 +271,18 @@ class HelperCategory { return null; } + public static function CountUnreads($categories, $minPriority = 0) { + $n = 0; + foreach ($categories as $category) { + foreach ($category->feeds () as $feed) { + if ($feed->priority () >= $minPriority) { + $n += $feed->nbNotRead(); + } + } + } + return $n; + } + public static function daoToCategoryPrepopulated ($listDAO) { $list = array (); @@ -284,11 +297,11 @@ class HelperCategory { // End of the current category, we add it to the $list $cat = new Category ( $previousLine['c_name'], - $previousLine['c_color'], - HelperFeed::daoToFeed ($feedsDao) + isset($previousLine['c_color']) ? $previousLine['c_color'] : '', + HelperFeed::daoToFeed ($feedsDao, $previousLine['c_id']) ); $cat->_id ($previousLine['c_id']); - $list[] = $cat; + $list[$previousLine['c_id']] = $cat; $feedsDao = array(); //Prepare for next category } @@ -301,11 +314,11 @@ class HelperCategory { if ($previousLine != null) { $cat = new Category ( $previousLine['c_name'], - $previousLine['c_color'], - HelperFeed::daoToFeed ($feedsDao) + isset($previousLine['c_color']) ? $previousLine['c_color'] : '', + HelperFeed::daoToFeed ($feedsDao, $previousLine['c_id']) ); $cat->_id ($previousLine['c_id']); - $list[] = $cat; + $list[$previousLine['c_id']] = $cat; } return $list; diff --git a/app/models/Feed.php b/app/models/Feed.php index c6ebc9caf..75dff01b7 100644 --- a/app/models/Feed.php +++ b/app/models/Feed.php @@ -533,7 +533,7 @@ class FeedDAO extends Model_pdo { } class HelperFeed { - public static function daoToFeed ($listDAO) { + public static function daoToFeed ($listDAO, $catID = null) { $list = array (); if (!is_array ($listDAO)) { @@ -541,33 +541,34 @@ class HelperFeed { } foreach ($listDAO as $key => $dao) { - if (empty ($dao['url'])) { + if (!isset ($dao['name'])) { continue; } if (isset ($dao['id'])) { $key = $dao['id']; } - $list[$key] = new Feed ($dao['url'], false); - $list[$key]->_category ($dao['category']); - $list[$key]->_name ($dao['name']); - $list[$key]->_website ($dao['website']); - $list[$key]->_description ($dao['description']); - $list[$key]->_lastUpdate ($dao['lastUpdate']); - $list[$key]->_priority ($dao['priority']); - $list[$key]->_pathEntries ($dao['pathEntries']); - $list[$key]->_httpAuth (base64_decode ($dao['httpAuth'])); - $list[$key]->_error ($dao['error']); - $list[$key]->_keepHistory ($dao['keep_history']); + $myFeed = new Feed (isset($dao['url']) ? $dao['url'] : '', false); + $myFeed->_category ($catID === null ? $dao['category'] : $catID); + $myFeed->_name ($dao['name']); + $myFeed->_website ($dao['website']); + $myFeed->_description (isset($dao['description']) ? $dao['description'] : ''); + $myFeed->_lastUpdate (isset($dao['lastUpdate']) ? $dao['lastUpdate'] : 0); + $myFeed->_priority ($dao['priority']); + $myFeed->_pathEntries (isset($dao['pathEntries']) ? $dao['pathEntries'] : ''); + $myFeed->_httpAuth (isset($dao['httpAuth']) ? base64_decode ($dao['httpAuth']) : ''); + $myFeed->_error ($dao['error']); + $myFeed->_keepHistory (isset($dao['keep_history']) ? $dao['keep_history'] : ''); if (isset ($dao['nbNotRead'])) { - $list[$key]->_nbNotRead ($dao['nbNotRead']); + $myFeed->_nbNotRead ($dao['nbNotRead']); } if (isset ($dao['nbEntries'])) { - $list[$key]->_nbEntries ($dao['nbEntries']); + $myFeed->_nbEntries ($dao['nbEntries']); } if (isset ($dao['id'])) { - $list[$key]->_id ($dao['id']); + $myFeed->_id ($dao['id']); } + $list[$key] = $myFeed; } return $list; |
