Merge pull request #19785 from nextcloud/backport/19392/stable17
[stable17] Introduce a default refresh rate app setting for calendar subscriptions
This commit is contained in:
commit
50ea452682
2 changed files with 24 additions and 4 deletions
|
@ -29,6 +29,7 @@ use DateInterval;
|
||||||
use OC\BackgroundJob\Job;
|
use OC\BackgroundJob\Job;
|
||||||
use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
|
use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
|
||||||
use OCP\AppFramework\Utility\ITimeFactory;
|
use OCP\AppFramework\Utility\ITimeFactory;
|
||||||
|
use OCP\IConfig;
|
||||||
use OCP\ILogger;
|
use OCP\ILogger;
|
||||||
use Sabre\VObject\DateTimeParser;
|
use Sabre\VObject\DateTimeParser;
|
||||||
use Sabre\VObject\InvalidDataException;
|
use Sabre\VObject\InvalidDataException;
|
||||||
|
@ -40,6 +41,11 @@ class RefreshWebcalJob extends Job {
|
||||||
*/
|
*/
|
||||||
private $refreshWebcalService;
|
private $refreshWebcalService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var IConfig
|
||||||
|
*/
|
||||||
|
private $config;
|
||||||
|
|
||||||
/** @var ILogger */
|
/** @var ILogger */
|
||||||
private $logger;
|
private $logger;
|
||||||
|
|
||||||
|
@ -50,11 +56,13 @@ class RefreshWebcalJob extends Job {
|
||||||
* RefreshWebcalJob constructor.
|
* RefreshWebcalJob constructor.
|
||||||
*
|
*
|
||||||
* @param RefreshWebcalService $refreshWebcalService
|
* @param RefreshWebcalService $refreshWebcalService
|
||||||
|
* @param IConfig $config
|
||||||
* @param ILogger $logger
|
* @param ILogger $logger
|
||||||
* @param ITimeFactory $timeFactory
|
* @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->refreshWebcalService = $refreshWebcalService;
|
||||||
|
$this->config = $config;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
$this->timeFactory = $timeFactory;
|
$this->timeFactory = $timeFactory;
|
||||||
}
|
}
|
||||||
|
@ -73,12 +81,14 @@ class RefreshWebcalJob extends Job {
|
||||||
$this->fixSubscriptionRowTyping($subscription);
|
$this->fixSubscriptionRowTyping($subscription);
|
||||||
|
|
||||||
// if no refresh rate was configured, just refresh once a week
|
// 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'];
|
$subscriptionId = $subscription['id'];
|
||||||
$refreshrate = $subscription[RefreshWebcalService::REFRESH_RATE] ?? 'P1W';
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
/** @var DateInterval $dateInterval */
|
/** @var DateInterval $dateInterval */
|
||||||
$dateInterval = DateTimeParser::parseDuration($refreshrate);
|
$dateInterval = DateTimeParser::parseDuration($refreshRate);
|
||||||
} catch(InvalidDataException $ex) {
|
} catch(InvalidDataException $ex) {
|
||||||
$this->logger->logException($ex);
|
$this->logger->logException($ex);
|
||||||
$this->logger->warning("Subscription $subscriptionId could not be refreshed, refreshrate in database is invalid");
|
$this->logger->warning("Subscription $subscriptionId could not be refreshed, refreshrate in database is invalid");
|
||||||
|
|
|
@ -28,6 +28,7 @@ use OCA\DAV\BackgroundJob\RefreshWebcalJob;
|
||||||
use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
|
use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
|
||||||
use OCP\AppFramework\Utility\ITimeFactory;
|
use OCP\AppFramework\Utility\ITimeFactory;
|
||||||
use OCP\BackgroundJob\IJobList;
|
use OCP\BackgroundJob\IJobList;
|
||||||
|
use OCP\IConfig;
|
||||||
use OCP\ILogger;
|
use OCP\ILogger;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
use Test\TestCase;
|
use Test\TestCase;
|
||||||
|
@ -39,6 +40,9 @@ class RefreshWebcalJobTest extends TestCase {
|
||||||
/** @var RefreshWebcalService | MockObject */
|
/** @var RefreshWebcalService | MockObject */
|
||||||
private $refreshWebcalService;
|
private $refreshWebcalService;
|
||||||
|
|
||||||
|
/** @var IConfig | MockObject */
|
||||||
|
private $config;
|
||||||
|
|
||||||
/** @var ILogger | MockObject */
|
/** @var ILogger | MockObject */
|
||||||
private $logger;
|
private $logger;
|
||||||
|
|
||||||
|
@ -52,6 +56,7 @@ class RefreshWebcalJobTest extends TestCase {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->refreshWebcalService = $this->createMock(RefreshWebcalService::class);
|
$this->refreshWebcalService = $this->createMock(RefreshWebcalService::class);
|
||||||
|
$this->config = $this->createMock(IConfig::class);
|
||||||
$this->logger = $this->createMock(ILogger::class);
|
$this->logger = $this->createMock(ILogger::class);
|
||||||
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
||||||
|
|
||||||
|
@ -67,7 +72,7 @@ class RefreshWebcalJobTest extends TestCase {
|
||||||
* @dataProvider runDataProvider
|
* @dataProvider runDataProvider
|
||||||
*/
|
*/
|
||||||
public function testRun(int $lastRun, int $time, bool $process) {
|
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([
|
$backgroundJob->setArgument([
|
||||||
'principaluri' => 'principals/users/testuser',
|
'principaluri' => 'principals/users/testuser',
|
||||||
|
@ -88,6 +93,11 @@ class RefreshWebcalJobTest extends TestCase {
|
||||||
'source' => 'webcal://foo.bar/bla'
|
'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())
|
$this->timeFactory->expects($this->once())
|
||||||
->method('getTime')
|
->method('getTime')
|
||||||
->willReturn($time);
|
->willReturn($time);
|
||||||
|
|
Loading…
Reference in a new issue