Răsfoiți Sursa

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
Alexandre Alapetite 12 ani în urmă
părinte
comite
14342603a0
3 a modificat fișierele cu 40 adăugiri și 29 ștergeri
  1. 1 4
      app/controllers/configureController.php
  2. 22 9
      app/models/Category.php
  3. 17 16
      app/models/Feed.php

+ 1 - 4
app/controllers/configureController.php

@@ -84,7 +84,7 @@ class configureController extends ActionController {
 
 		$this->view->flux = false;
 		if ($id != false) {
-			$this->view->flux = $feedDAO->searchById ($id);
+			$this->view->flux = $this->view->feeds[$id];
 
 			if (!$this->view->flux) {
 				Error::error (
@@ -92,9 +92,6 @@ class configureController extends ActionController {
 					array ('error' => array (Translate::t ('page_not_found')))
 				);
 			} else {
-				$catDAO = new CategoryDAO ();
-				$this->view->categories = $catDAO->listCategories (false);
-
 				if (Request::isPost () && $this->view->flux) {
 					$name = Request::param ('name', '');
 					$hist = Request::param ('keep_history', 'no');

+ 22 - 9
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;

+ 17 - 16
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;