. * */ namespace OCA\UpdateNotification\Command; use OC\App\AppManager; use OC\Installer; use OCA\UpdateNotification\UpdateChecker; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class Check extends Command { /** * @var Installer $installer */ private $installer; /** * @var AppManager $appManager */ private $appManager; /** * @var UpdateChecker $updateChecker */ private $updateChecker; public function __construct(AppManager $appManager, UpdateChecker $updateChecker, Installer $installer) { parent::__construct(); $this->installer = $installer; $this->appManager = $appManager; $this->updateChecker = $updateChecker; } protected function configure() { $this ->setName('update:check') ->setDescription('Check for server and app updates') ; } protected function execute(InputInterface $input, OutputInterface $output) { $updatesAvailableCount = 0; // Server $r = $this->updateChecker->getUpdateState(); if (isset($r['updateAvailable']) && $r['updateAvailable']) { $output->writeln($r['updateVersionString'] . ' is available. Get more information on how to update at '. $r['updateLink'] . '.'); $updatesAvailableCount += 1; } // Apps $apps = $this->appManager->getInstalledApps(); foreach ($apps as $app) { $update = $this->installer->isUpdateAvailable($app); if ($update !== false) { $output->writeln('Update for ' . $app . ' to version ' . $update . ' is available.'); $updatesAvailableCount += 1; } } // Report summary if ($updatesAvailableCount === 0) { $output->writeln('Everything up to date'); } else if ($updatesAvailableCount === 1) { $output->writeln('1 update available'); } else { $output->writeln('' . $updatesAvailableCount . ' updates available'); } return 0; } }