diff options
author | Joas Schilling <coding@schilljs.com> | 2022-07-01 16:47:53 +0300 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2022-07-01 16:47:53 +0300 |
commit | 30cd60e3d992bda09b6a631a554c7cec0b65f4a9 (patch) | |
tree | bcfc59c6d5417bd80ca55b0cab890cd11fea7622 | |
parent | 82a0613c27c18aba184304bcf59ff06b666fc53d (diff) |
Only remove the job when expiration is "done"
Signed-off-by: Joas Schilling <coding@schilljs.com>
-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'); } |