From 5bdc2df7f484f6618919a63247045027d43b78f7 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Mon, 9 Nov 2020 23:29:25 +0100 Subject: Fix unread count and related issues Issue GH-924 Signed-off-by: Sean Molenaar --- lib/Command/Updater/UpdateFeed.php | 7 ++++++- lib/Db/FeedMapperV2.php | 17 +++++++++++++---- lib/Db/ItemMapperV2.php | 2 ++ lib/Service/FeedServiceV2.php | 3 ++- lib/Service/ItemServiceV2.php | 5 +++++ 5 files changed, 28 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/Command/Updater/UpdateFeed.php b/lib/Command/Updater/UpdateFeed.php index 71e88a15f..93fa2a8d3 100644 --- a/lib/Command/Updater/UpdateFeed.php +++ b/lib/Command/Updater/UpdateFeed.php @@ -52,7 +52,7 @@ class UpdateFeed extends Command $userId = $input->getArgument('user-id'); try { $feed = $this->feedService->findForUser($userId, $feedId); - $this->feedService->fetch($feed); + $updated_feed = $this->feedService->fetch($feed); } catch (\Exception $e) { $output->writeln( 'Could not update feed with id ' . $feedId . @@ -62,6 +62,11 @@ class UpdateFeed extends Command return 1; } + if ($updated_feed->getUpdateErrorCount() !== 0) { + $output->writeln($updated_feed->getLastUpdateError()); + return 255; + } + return 0; } } diff --git a/lib/Db/FeedMapperV2.php b/lib/Db/FeedMapperV2.php index 05b272112..366ece141 100644 --- a/lib/Db/FeedMapperV2.php +++ b/lib/Db/FeedMapperV2.php @@ -16,6 +16,7 @@ namespace OCA\News\Db; use OCA\News\Utility\Time; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; +use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; use OCP\AppFramework\Db\Entity; @@ -50,10 +51,18 @@ class FeedMapperV2 extends NewsMapperV2 public function findAllFromUser(string $userId, array $params = []): array { $builder = $this->db->getQueryBuilder(); - $builder->addSelect('*') - ->from($this->tableName) - ->where('user_id = :user_id') - ->andWhere('deleted_at = 0') + $builder->select('feeds.*', $builder->func()->count('items.id', 'unreadCount')) + ->from($this->tableName, 'feeds') + ->leftJoin( + 'feeds', + ItemMapperV2::TABLE_NAME, + 'items', + 'items.feed_id = feeds.id AND items.unread = :unread' + ) + ->where('feeds.user_id = :user_id') + ->andWhere('feeds.deleted_at = 0') + ->groupBy('feeds.id') + ->setParameter(':unread', true, IQueryBuilder::PARAM_BOOL) ->setParameter(':user_id', $userId); return $this->findEntities($builder); diff --git a/lib/Db/ItemMapperV2.php b/lib/Db/ItemMapperV2.php index 8bd939e71..4f6f82413 100644 --- a/lib/Db/ItemMapperV2.php +++ b/lib/Db/ItemMapperV2.php @@ -134,6 +134,8 @@ class ItemMapperV2 extends NewsMapperV2 /** * Delete items from feed that are over the max item threshold * + * TODO: Implement + * * @param int $threshold Deletion threshold */ public function deleteOverThreshold(int $threshold) diff --git a/lib/Service/FeedServiceV2.php b/lib/Service/FeedServiceV2.php index 0d1b45600..94878d5fe 100644 --- a/lib/Service/FeedServiceV2.php +++ b/lib/Service/FeedServiceV2.php @@ -228,6 +228,7 @@ class FeedServiceV2 extends Service $feed->setFolderId($folderId) ->setUserId($userId) + ->setHttpLastModified(null) ->setArticlesPerUpdate(count($items)); if (!is_null($title)) { @@ -236,7 +237,7 @@ class FeedServiceV2 extends Service if (!is_null($user)) { $feed->setBasicAuthUser($user) - ->setBasicAuthUser($password); + ->setBasicAuthPassword($password); } return $this->mapper->insert($feed); diff --git a/lib/Service/ItemServiceV2.php b/lib/Service/ItemServiceV2.php index b4cb16e22..d0093a07e 100644 --- a/lib/Service/ItemServiceV2.php +++ b/lib/Service/ItemServiceV2.php @@ -72,6 +72,11 @@ class ItemServiceV2 extends Service return $this->mapper->findAll(); } + /** + * Insert an item or update. + * + * @param Item $item + */ public function insertOrUpdate(Item $item) { try { -- cgit v1.2.3