]> source.dussan.org Git - nextcloud-server.git/commitdiff
Introduce a default refresh rate app setting for calendar subscriptions 19784/head
authorThomas Citharel <tcit@tcit.fr>
Mon, 10 Feb 2020 12:52:57 +0000 (13:52 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 5 Mar 2020 08:20:10 +0000 (08:20 +0000)
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
apps/dav/lib/BackgroundJob/RefreshWebcalJob.php
apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php

index 710dd09da8687e8d62160d5a5ae2d8553c7f29cd..f1d567759030743f34d2a6587dfc0768382953d7 100644 (file)
@@ -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");
index 3f95b24661fb90d4c53c10e780d252da490751ab..95aebd449c70cea0db3733d485e343a63a13ccd1 100644 (file)
@@ -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);