aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapp/controllers/feedController.php8
-rwxr-xr-xapp/models/Entry.php8
2 files changed, 14 insertions, 2 deletions
diff --git a/app/controllers/feedController.php b/app/controllers/feedController.php
index 1131c3a7a..f14ed7997 100755
--- a/app/controllers/feedController.php
+++ b/app/controllers/feedController.php
@@ -150,14 +150,18 @@ class feedController extends ActionController {
$feed->load ();
$entries = $feed->entries ();
+ //For this feed, check last n entry IDs already in database
+ $existingIds = array_fill_keys ($entryDAO->listLastIdsByFeed ($feed->id (), count($entries) + 2), 1);
+
// ajout des articles en masse sans se soucier des erreurs
// On ne vérifie pas que l'article n'est pas déjà en BDD
// car demanderait plus de ressources
// La BDD refusera l'ajout de son côté car l'id doit être
// unique
foreach ($entries as $entry) {
- if ($entry->date (true) >= $date_min ||
- $feed->keepHistory ()) {
+ if ((!isset ($existingIds[$entry->id ()])) &&
+ ($entry->date (true) >= $date_min ||
+ $feed->keepHistory ())) {
$values = $entry->toArray ();
$entryDAO->addEntry ($values);
}
diff --git a/app/models/Entry.php b/app/models/Entry.php
index 2829a3586..e835f9aed 100755
--- a/app/models/Entry.php
+++ b/app/models/Entry.php
@@ -439,6 +439,14 @@ class EntryDAO extends Model_pdo {
public function listByFeed ($feed, $state, $order = 'high_to_low', $limitFromId = '', $limitCount = '') {
return $this->listWhere (' WHERE id_feed = ?', $state, $order, $limitFromId, $limitCount, array ($feed));
}
+
+ public function listLastIdsByFeed($id, $n) {
+ $sql = 'SELECT id FROM ' . $this->prefix . 'entry WHERE id_feed=? ORDER BY date DESC LIMIT ' . intval($n);
+ $stm = $this->bd->prepare ($sql);
+ $values = array ($id);
+ $stm->execute ($values);
+ return $stm->fetchAll (PDO::FETCH_COLUMN, 0);
+ }
public function countUnreadRead () {
$sql = 'SELECT is_read, COUNT(*) AS count FROM ' . $this->prefix . 'entry e INNER JOIN ' . $this->prefix . 'feed f ON e.id_feed = f.id WHERE priority > 0 GROUP BY is_read';