From 4e4cff20521fdfd7d4e8ae1cae03fb35b1ef1c1f Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Mon, 10 Feb 2020 13:52:57 +0100 Subject: [PATCH] Introduce a default refresh rate app setting for calendar subscriptions Signed-off-by: Thomas Citharel --- apps/dav/lib/BackgroundJob/RefreshWebcalJob.php | 16 +++++++++++++--- .../unit/BackgroundJob/RefreshWebcalJobTest.php | 12 +++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php b/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php index 710dd09da8..f1d5677590 100644 --- a/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php +++ b/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php @@ -32,6 +32,7 @@ use DateInterval; use OC\BackgroundJob\Job; use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\IConfig; use OCP\ILogger; use Sabre\VObject\DateTimeParser; use Sabre\VObject\InvalidDataException; @@ -43,6 +44,11 @@ class RefreshWebcalJob extends Job { */ private $refreshWebcalService; + /** + * @var IConfig + */ + private $config; + /** @var ILogger */ private $logger; @@ -53,11 +59,13 @@ class RefreshWebcalJob extends Job { * RefreshWebcalJob constructor. * * @param RefreshWebcalService $refreshWebcalService + * @param IConfig $config * @param ILogger $logger * @param ITimeFactory $timeFactory */ - public function __construct(RefreshWebcalService $refreshWebcalService, ILogger $logger, ITimeFactory $timeFactory) { + public function __construct(RefreshWebcalService $refreshWebcalService, IConfig $config, ILogger $logger, ITimeFactory $timeFactory) { $this->refreshWebcalService = $refreshWebcalService; + $this->config = $config; $this->logger = $logger; $this->timeFactory = $timeFactory; } @@ -76,12 +84,14 @@ class RefreshWebcalJob extends Job { $this->fixSubscriptionRowTyping($subscription); // if no refresh rate was configured, just refresh once a week + $defaultRefreshRate = $this->config->getAppValue('dav', 'calendarSubscriptionRefreshRate', 'P1W'); + $refreshRate = $subscription[RefreshWebcalService::REFRESH_RATE] ?? $defaultRefreshRate; + $subscriptionId = $subscription['id']; - $refreshrate = $subscription[RefreshWebcalService::REFRESH_RATE] ?? 'P1W'; try { /** @var DateInterval $dateInterval */ - $dateInterval = DateTimeParser::parseDuration($refreshrate); + $dateInterval = DateTimeParser::parseDuration($refreshRate); } catch(InvalidDataException $ex) { $this->logger->logException($ex); $this->logger->warning("Subscription $subscriptionId could not be refreshed, refreshrate in database is invalid"); diff --git a/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php b/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php index 3f95b24661..95aebd449c 100644 --- a/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php +++ b/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php @@ -29,6 +29,7 @@ use OCA\DAV\BackgroundJob\RefreshWebcalJob; use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\IJobList; +use OCP\IConfig; use OCP\ILogger; use PHPUnit\Framework\MockObject\MockObject; @@ -39,6 +40,9 @@ class RefreshWebcalJobTest extends TestCase { /** @var RefreshWebcalService | MockObject */ private $refreshWebcalService; + /** @var IConfig | MockObject */ + private $config; + /** @var ILogger | MockObject */ private $logger; @@ -52,6 +56,7 @@ class RefreshWebcalJobTest extends TestCase { parent::setUp(); $this->refreshWebcalService = $this->createMock(RefreshWebcalService::class); + $this->config = $this->createMock(IConfig::class); $this->logger = $this->createMock(ILogger::class); $this->timeFactory = $this->createMock(ITimeFactory::class); @@ -67,7 +72,7 @@ class RefreshWebcalJobTest extends TestCase { * @dataProvider runDataProvider */ public function testRun(int $lastRun, int $time, bool $process) { - $backgroundJob = new RefreshWebcalJob($this->refreshWebcalService, $this->logger, $this->timeFactory); + $backgroundJob = new RefreshWebcalJob($this->refreshWebcalService, $this->config, $this->logger, $this->timeFactory); $backgroundJob->setArgument([ 'principaluri' => 'principals/users/testuser', @@ -88,6 +93,11 @@ class RefreshWebcalJobTest extends TestCase { 'source' => 'webcal://foo.bar/bla' ]); + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('dav', 'calendarSubscriptionRefreshRate', 'P1W') + ->will($this->returnValue('P1W')); + $this->timeFactory->expects($this->once()) ->method('getTime') ->willReturn($time);