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 OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\IConfig;
|
||||
use OCP\ILogger;
|
||||
use Sabre\VObject\DateTimeParser;
|
||||
use Sabre\VObject\InvalidDataException;
|
||||
|
@ -40,6 +41,11 @@ class RefreshWebcalJob extends Job {
|
|||
*/
|
||||
private $refreshWebcalService;
|
||||
|
||||
/**
|
||||
* @var IConfig
|
||||
*/
|
||||
private $config;
|
||||
|
||||
/** @var ILogger */
|
||||
private $logger;
|
||||
|
||||
|
@ -50,11 +56,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;
|
||||
}
|
||||
|
@ -73,12 +81,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");
|
||||
|
|
|
@ -28,6 +28,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;
|
||||
use Test\TestCase;
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue