setInterval(60 * 5); $this->setTimeSensitivity(IJob::TIME_INSENSITIVE); } #[\Override] protected function run($argument): void { $this->manager->forAllRooms([$this, 'callback']); if ($this->numDeletedRooms) { $this->logger->info('Deleted {numDeletedRooms} rooms because they were empty', [ 'numDeletedRooms' => $this->numDeletedRooms, ]); } } public function callback(Room $room): void { if ($room->getType() === Room::TYPE_CHANGELOG) { return; } if ($this->deleteIfIsEmpty($room)) { return; } $this->deleteIfFileIsRemoved($room); } private function deleteIfIsEmpty(Room $room): bool { if ($room->getObjectType() === 'file') { return false; } if ($this->participantService->getNumberOfActors($room) !== 0) { return false; } if ($room->isFederatedConversation() && $this->federationManager->getNumberOfInvitations($room) !== 0) { return false; } $this->doDeleteRoom($room); return true; } private function deleteIfFileIsRemoved(Room $room): bool { if ($room->getObjectType() !== 'file') { return false; } $mountsForFile = $this->userMountCache->getMountsForFileId((int)$room->getObjectId()); if (!empty($mountsForFile)) { return false; } $this->doDeleteRoom($room); return true; } private function doDeleteRoom(Room $room): void { $this->roomService->deleteRoom($room); $this->numDeletedRooms++; } }