summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-12 18:41:31 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-12 18:41:31 +0100
commit14342603a05b64294762c45798debe3a66db26eb (patch)
tree39b317aa8e472e0cfa41bb4f96bb66111dcf9d46 /app/models
parent58cb842966f437a44f58644439f513b94f9dccac (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-xapp/models/Category.php31
-rw-r--r--app/models/Feed.php33
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;