diff options
-rw-r--r-- | lib/BackgroundJob/ExpireChatMessages.php | 19 | ||||
-rw-r--r-- | lib/Service/RoomService.php | 1 |
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/BackgroundJob/ExpireChatMessages.php b/lib/BackgroundJob/ExpireChatMessages.php index b64e3aee0..d66e50e5c 100644 --- a/lib/BackgroundJob/ExpireChatMessages.php +++ b/lib/BackgroundJob/ExpireChatMessages.php @@ -26,16 +26,25 @@ declare(strict_types=1); namespace OCA\Talk\BackgroundJob; use OCA\Talk\Chat\ChatManager; +use OCA\Talk\Exceptions\RoomNotFoundException; +use OCA\Talk\Manager; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\IJob; +use OCP\BackgroundJob\IJobList; use OCP\BackgroundJob\TimedJob; class ExpireChatMessages extends TimedJob { + private IJobList $jobList; + private Manager $roomManager; private ChatManager $chatManager; public function __construct(ITimeFactory $timeFactory, + IJobList $jobList, + Manager $roomManager, ChatManager $chatManager) { parent::__construct($timeFactory); + $this->jobList = $jobList; + $this->roomManager = $roomManager; $this->chatManager = $chatManager; // Every 5 minutes @@ -48,5 +57,15 @@ class ExpireChatMessages extends TimedJob { */ protected function run($argument): void { $this->chatManager->deleteExpiredMessages($argument['room_id']); + + try { + $room = $this->roomManager->getRoomById($argument['room_id']); + if ($room->getMessageExpiration() === 0) { + // FIXME check if there are still messages to expire in the database + $this->jobList->remove(ExpireChatMessages::class, $argument); + } + } catch (RoomNotFoundException $e) { + $this->jobList->remove(ExpireChatMessages::class, $argument); + } } } diff --git a/lib/Service/RoomService.php b/lib/Service/RoomService.php index 515e03e2b..82ef69543 100644 --- a/lib/Service/RoomService.php +++ b/lib/Service/RoomService.php @@ -556,7 +556,6 @@ class RoomService { $this->jobList->add(ExpireChatMessages::class, ['room_id' => $room->getId()]); $this->addMessageExpirationSystemMessage($room, $participant, $seconds, 'message_expiration_enabled'); } else { - $this->jobList->remove(ExpireChatMessages::class, ['room_id' => $room->getId()]); $this->addMessageExpirationSystemMessage($room, $participant, $seconds, 'message_expiration_disabled'); } |