*/ class AppUpdateEventListener implements IEventListener { public function __construct( private IJobList $jobList, private LoggerInterface $logger, private IAppConfig $appConfig, ) { } /** * @param AppUpdateEvent $event */ public function handle(Event $event): void { if (!($event instanceof AppUpdateEvent)) { return; } if (!$this->appConfig->getValueBool(Application::APP_NAME, 'app_updated.enabled', true)) { return; } foreach ($this->jobList->getJobsIterator(AppUpdatedNotifications::class, null, 0) as $job) { // Remove waiting notification jobs for this app if ($job->getArgument()['appId'] === $event->getAppId()) { $this->jobList->remove($job); } } $this->jobList->add(AppUpdatedNotifications::class, [ 'appId' => $event->getAppId(), 'timestamp' => time(), ]); $this->logger->debug( 'Scheduled app update notification for "' . $event->getAppId() . '"', [ 'app' => Application::APP_NAME, ], ); } }