aboutsummaryrefslogtreecommitdiff
path: root/app/controllers/indexController.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-16 21:03:25 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-16 21:03:25 +0100
commit32306a78d2e53bbbc864f3eabda9a2f1a3dd2322 (patch)
tree8d3ee43aa98981ebeada93d31930c1b91fae9395 /app/controllers/indexController.php
parent770ea63258d9cb138e86d7545b2bccc046666f95 (diff)
SQL : grosse mise à jour avec mise en cache du nombre d'articles lus/non-lus
* Mise en cache du nombre d'articles lus et non-lus par flux, via `f.cache_nbEntries, f.cache_nbUnreads` pour de biens meilleures performances * Implémente https://github.com/marienfressinaud/FreshRSS/issues/268 * Révision de la plupart des requêtes de modification en conséquence * En cas d'affichage `not_read`, évite de faire une requête si on sait déjà qu'il n'y a pas d'article non lu et fait directement un affichage `all`. * Appelle `cleanOldEntries` seulement une fois de temps en temps aléatoirement (1 fois sur 30 actuellement) pour économiser les ressources, et avant les insertions pour plus de robustesse. * Utilisation des transactions lors de mises à jour multiples et liées * Lors de requêtes de modifications, retourne le nombre de lignes impactées plutôt qu'un booléen en cas de succès * Suppression de code oublié relatif à is_public qui n'est plus utilisé
Diffstat (limited to 'app/controllers/indexController.php')
-rwxr-xr-xapp/controllers/indexController.php27
1 files changed, 26 insertions, 1 deletions
diff --git a/app/controllers/indexController.php b/app/controllers/indexController.php
index 7b5dbd264..10c29bc7b 100755
--- a/app/controllers/indexController.php
+++ b/app/controllers/indexController.php
@@ -90,6 +90,30 @@ class indexController extends ActionController {
$nb = Request::param ('nb', $this->view->conf->postsPerPage ());
$first = Request::param ('next', '');
+ if ($state === 'not_read') { //Any unread article in this category at all?
+ switch ($type['type']) {
+ case 'all':
+ $hasUnread = $this->view->nb_not_read > 0;
+ break;
+ case 'favoris':
+ $hasUnread = $this->view->nb_favorites['unread'] > 0;
+ break;
+ case 'c':
+ $hasUnread = (!isset($this->view->cat_aside[$type['id']])) || ($this->view->cat_aside[$type['id']]->nbNotRead() > 0);
+ break;
+ case 'f':
+ $myFeed = HelperCategory::findFeed($this->view->cat_aside, $type['id']);
+ $hasUnread = ($myFeed === null) || ($myFeed->nbNotRead() > 0);
+ break;
+ default:
+ $hasUnread = true;
+ break;
+ }
+ if (!$hasUnread) {
+ $this->view->state = $state = 'all';
+ }
+ }
+
try {
// EntriesGetter permet de déporter la complexité du filtrage
$getter = new EntriesGetter ($type, $state, $filter, $order, $nb, $first);
@@ -98,7 +122,8 @@ class indexController extends ActionController {
// Si on a récupéré aucun article "non lus"
// on essaye de récupérer tous les articles
- if ($state == 'not_read' && $entries->isEmpty ()) {
+ if ($state === 'not_read' && $entries->isEmpty ()) { //TODO: Remove in v0.8
+ Minz_Log::record ('Conflicting information about nbNotRead!', Minz_Log::NOTICE); //TODO: Consider adding a Minz_Log::DEBUG level
$this->view->state = 'all';
$getter->_state ('all');
$getter->execute ();