You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
58 lines
1.5 KiB
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
namespace OCA\Talk\BackgroundJob;
|
|
|
|
use OCA\Talk\Manager;
|
|
use OCA\Talk\Service\ParticipantService;
|
|
use OCA\Talk\Service\RoomService;
|
|
use OCP\AppFramework\Services\IAppConfig;
|
|
use OCP\AppFramework\Utility\ITimeFactory;
|
|
use OCP\BackgroundJob\TimedJob;
|
|
|
|
class MaximumCallDuration extends TimedJob {
|
|
public function __construct(
|
|
private IAppConfig $appConfig,
|
|
private Manager $manager,
|
|
private RoomService $roomService,
|
|
private ParticipantService $participantService,
|
|
ITimeFactory $time,
|
|
) {
|
|
parent::__construct($time);
|
|
|
|
// Every time the jobs run
|
|
$this->setInterval(1);
|
|
}
|
|
|
|
#[\Override]
|
|
protected function run($argument): void {
|
|
$maxCallDuration = $this->appConfig->getAppValueInt('max_call_duration');
|
|
if ($maxCallDuration <= 0) {
|
|
return;
|
|
}
|
|
|
|
$now = $this->time->getDateTime();
|
|
$maxActiveSince = $now->sub(new \DateInterval('PT' . $maxCallDuration . 'S'));
|
|
$rooms = $this->manager->getRoomsLongerActiveSince($maxActiveSince);
|
|
|
|
foreach ($rooms as $room) {
|
|
if ($room->isFederatedConversation()) {
|
|
continue;
|
|
}
|
|
|
|
$result = $this->roomService->resetActiveSinceInDatabaseOnly($room);
|
|
if (!$result) {
|
|
// Someone else won the race condition, make sure this user disconnects directly and then return
|
|
continue;
|
|
}
|
|
|
|
$this->participantService->endCallForEveryone($room, null);
|
|
$this->roomService->resetActiveSinceInModelOnly($room);
|
|
}
|
|
}
|
|
}
|