diff options
author | Côme Chilliet <91878298+come-nc@users.noreply.github.com> | 2022-08-30 14:47:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-30 14:47:05 +0200 |
commit | f56ecf92426026c913497bea9f7ca99e8d3ac631 (patch) | |
tree | 4e3f02de1eae3ff03e5f23e15b12195b4aee4255 /core | |
parent | 66648011c6bc278ace57230db44fd6d63d67b864 (diff) | |
parent | 0b9a878250d79101756d881d15d22acda2dbeddc (diff) | |
download | nextcloud-server-f56ecf92426026c913497bea9f7ca99e8d3ac631.tar.gz nextcloud-server-f56ecf92426026c913497bea9f7ca99e8d3ac631.zip |
Merge pull request #33640 from nextcloud/fix/fix-symfony-event-typing
Port Repair and Migrator events to IEventDispatcher
Diffstat (limited to 'core')
-rw-r--r-- | core/Command/Maintenance/Repair.php | 72 | ||||
-rw-r--r-- | core/Command/Upgrade.php | 137 | ||||
-rw-r--r-- | core/ajax/update.php | 121 | ||||
-rw-r--r-- | core/register_command.php | 4 |
4 files changed, 158 insertions, 176 deletions
diff --git a/core/Command/Maintenance/Repair.php b/core/Command/Maintenance/Repair.php index 2c1fda7c8e4..e1d1862f3f4 100644 --- a/core/Command/Maintenance/Repair.php +++ b/core/Command/Maintenance/Repair.php @@ -30,24 +30,31 @@ namespace OC\Core\Command\Maintenance; use Exception; use OCP\App\IAppManager; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventDispatcher; use OCP\IConfig; +use OC\Repair\Events\RepairAdvanceEvent; +use OC\Repair\Events\RepairErrorEvent; +use OC\Repair\Events\RepairFinishEvent; +use OC\Repair\Events\RepairInfoEvent; +use OC\Repair\Events\RepairStartEvent; +use OC\Repair\Events\RepairStepEvent; +use OC\Repair\Events\RepairWarningEvent; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\EventDispatcher\GenericEvent; class Repair extends Command { protected \OC\Repair $repair; protected IConfig $config; - private EventDispatcherInterface $dispatcher; + private IEventDispatcher $dispatcher; private ProgressBar $progress; private OutputInterface $output; private IAppManager $appManager; - public function __construct(\OC\Repair $repair, IConfig $config, EventDispatcherInterface $dispatcher, IAppManager $appManager) { + public function __construct(\OC\Repair $repair, IConfig $config, IEventDispatcher $dispatcher, IAppManager $appManager) { $this->repair = $repair; $this->config = $config; $this->dispatcher = $dispatcher; @@ -102,13 +109,13 @@ class Repair extends Command { $this->progress = new ProgressBar($output); $this->output = $output; - $this->dispatcher->addListener('\OC\Repair::startProgress', [$this, 'handleRepairFeedBack']); - $this->dispatcher->addListener('\OC\Repair::advance', [$this, 'handleRepairFeedBack']); - $this->dispatcher->addListener('\OC\Repair::finishProgress', [$this, 'handleRepairFeedBack']); - $this->dispatcher->addListener('\OC\Repair::step', [$this, 'handleRepairFeedBack']); - $this->dispatcher->addListener('\OC\Repair::info', [$this, 'handleRepairFeedBack']); - $this->dispatcher->addListener('\OC\Repair::warning', [$this, 'handleRepairFeedBack']); - $this->dispatcher->addListener('\OC\Repair::error', [$this, 'handleRepairFeedBack']); + $this->dispatcher->addListener(RepairStartEvent::class, [$this, 'handleRepairFeedBack']); + $this->dispatcher->addListener(RepairAdvanceEvent::class, [$this, 'handleRepairFeedBack']); + $this->dispatcher->addListener(RepairFinishEvent::class, [$this, 'handleRepairFeedBack']); + $this->dispatcher->addListener(RepairStepEvent::class, [$this, 'handleRepairFeedBack']); + $this->dispatcher->addListener(RepairInfoEvent::class, [$this, 'handleRepairFeedBack']); + $this->dispatcher->addListener(RepairWarningEvent::class, [$this, 'handleRepairFeedBack']); + $this->dispatcher->addListener(RepairErrorEvent::class, [$this, 'handleRepairFeedBack']); $this->repair->run(); @@ -116,33 +123,22 @@ class Repair extends Command { return 0; } - public function handleRepairFeedBack($event) { - if (!$event instanceof GenericEvent) { - return; - } - switch ($event->getSubject()) { - case '\OC\Repair::startProgress': - $this->progress->start($event->getArgument(0)); - break; - case '\OC\Repair::advance': - $this->progress->advance($event->getArgument(0)); - break; - case '\OC\Repair::finishProgress': - $this->progress->finish(); - $this->output->writeln(''); - break; - case '\OC\Repair::step': - $this->output->writeln(' - ' . $event->getArgument(0)); - break; - case '\OC\Repair::info': - $this->output->writeln(' - ' . $event->getArgument(0)); - break; - case '\OC\Repair::warning': - $this->output->writeln(' - WARNING: ' . $event->getArgument(0)); - break; - case '\OC\Repair::error': - $this->output->writeln('<error> - ERROR: ' . $event->getArgument(0) . '</error>'); - break; + public function handleRepairFeedBack(Event $event): void { + if ($event instanceof RepairStartEvent) { + $this->progress->start($event->getMaxStep()); + } elseif ($event instanceof RepairAdvanceEvent) { + $this->progress->advance($event->getIncrement()); + } elseif ($event instanceof RepairFinishEvent) { + $this->progress->finish(); + $this->output->writeln(''); + } elseif ($event instanceof RepairStepEvent) { + $this->output->writeln('<info> - ' . $event->getStepName() . '</info>'); + } elseif ($event instanceof RepairInfoEvent) { + $this->output->writeln('<info> - ' . $event->getMessage() . '</info>'); + } elseif ($event instanceof RepairWarningEvent) { + $this->output->writeln('<comment> - WARNING: ' . $event->getMessage()) . '</comment>'; + } elseif ($event instanceof RepairErrorEvent) { + $this->output->writeln('<error> - ERROR: ' . $event->getMessage() . '</error>'); } } } diff --git a/core/Command/Upgrade.php b/core/Command/Upgrade.php index acf0b503d19..d476b91d6bf 100644 --- a/core/Command/Upgrade.php +++ b/core/Command/Upgrade.php @@ -33,17 +33,26 @@ */ namespace OC\Core\Command; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IConfig; +use OCP\Util; use OC\Console\TimestampFormatter; +use OC\DB\MigratorExecuteSqlEvent; use OC\Installer; +use OC\Repair\Events\RepairAdvanceEvent; +use OC\Repair\Events\RepairErrorEvent; +use OC\Repair\Events\RepairFinishEvent; +use OC\Repair\Events\RepairInfoEvent; +use OC\Repair\Events\RepairStartEvent; +use OC\Repair\Events\RepairStepEvent; +use OC\Repair\Events\RepairWarningEvent; use OC\Updater; -use OCP\IConfig; -use OCP\Util; use Psr\Log\LoggerInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\EventDispatcher\GenericEvent; class Upgrade extends Command { public const ERROR_SUCCESS = 0; @@ -92,84 +101,70 @@ class Upgrade extends Command { $this->installer ); - $dispatcher = \OC::$server->getEventDispatcher(); + /** @var IEventDispatcher $dispatcher */ + $dispatcher = \OC::$server->get(IEventDispatcher::class); $progress = new ProgressBar($output); $progress->setFormat(" %message%\n %current%/%max% [%bar%] %percent:3s%%"); - $listener = function ($event) use ($progress, $output) { - if ($event instanceof GenericEvent) { - $message = $event->getSubject(); - if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { - $output->writeln(' Checking table ' . $message); - } else { - if (strlen($message) > 60) { - $message = substr($message, 0, 57) . '...'; - } - $progress->setMessage($message); - if ($event[0] === 1) { - $output->writeln(''); - $progress->start($event[1]); - } - $progress->setProgress($event[0]); - if ($event[0] === $event[1]) { - $progress->setMessage('Done'); - $progress->finish(); - $output->writeln(''); - } + $listener = function (MigratorExecuteSqlEvent $event) use ($progress, $output): void { + $message = $event->getSql(); + if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { + $output->writeln(' Executing SQL ' . $message); + } else { + if (strlen($message) > 60) { + $message = substr($message, 0, 57) . '...'; } - } - }; - $repairListener = function ($event) use ($progress, $output) { - if (!$event instanceof GenericEvent) { - return; - } - switch ($event->getSubject()) { - case '\OC\Repair::startProgress': - $progress->setMessage('Starting ...'); - $output->writeln($event->getArgument(1)); + $progress->setMessage($message); + if ($event->getCurrentStep() === 1) { $output->writeln(''); - $progress->start($event->getArgument(0)); - break; - case '\OC\Repair::advance': - $desc = $event->getArgument(1); - if (!empty($desc)) { - $progress->setMessage($desc); - } - $progress->advance($event->getArgument(0)); - - break; - case '\OC\Repair::finishProgress': + $progress->start($event->getMaxStep()); + } + $progress->setProgress($event->getCurrentStep()); + if ($event->getCurrentStep() === $event->getMaxStep()) { $progress->setMessage('Done'); $progress->finish(); $output->writeln(''); - break; - case '\OC\Repair::step': - if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { - $output->writeln('<info>Repair step: ' . $event->getArgument(0) . '</info>'); - } - break; - case '\OC\Repair::info': - if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { - $output->writeln('<info>Repair info: ' . $event->getArgument(0) . '</info>'); - } - break; - case '\OC\Repair::warning': - $output->writeln('<error>Repair warning: ' . $event->getArgument(0) . '</error>'); - break; - case '\OC\Repair::error': - $output->writeln('<error>Repair error: ' . $event->getArgument(0) . '</error>'); - break; + } + } + }; + $repairListener = function (Event $event) use ($progress, $output): void { + if ($event instanceof RepairStartEvent) { + $progress->setMessage('Starting ...'); + $output->writeln($event->getCurrentStepName()); + $output->writeln(''); + $progress->start($event->getMaxStep()); + } elseif ($event instanceof RepairAdvanceEvent) { + $desc = $event->getDescription(); + if (!empty($desc)) { + $progress->setMessage($desc); + } + $progress->advance($event->getIncrement()); + } elseif ($event instanceof RepairFinishEvent) { + $progress->setMessage('Done'); + $progress->finish(); + $output->writeln(''); + } elseif ($event instanceof RepairStepEvent) { + if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { + $output->writeln('<info>Repair step: ' . $event->getStepName() . '</info>'); + } + } elseif ($event instanceof RepairInfoEvent) { + if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { + $output->writeln('<info>Repair info: ' . $event->getMessage() . '</info>'); + } + } elseif ($event instanceof RepairWarningEvent) { + $output->writeln('<error>Repair warning: ' . $event->getMessage() . '</error>'); + } elseif ($event instanceof RepairErrorEvent) { + $output->writeln('<error>Repair error: ' . $event->getMessage() . '</error>'); } }; - $dispatcher->addListener('\OC\DB\Migrator::executeSql', $listener); - $dispatcher->addListener('\OC\DB\Migrator::checkTable', $listener); - $dispatcher->addListener('\OC\Repair::startProgress', $repairListener); - $dispatcher->addListener('\OC\Repair::advance', $repairListener); - $dispatcher->addListener('\OC\Repair::finishProgress', $repairListener); - $dispatcher->addListener('\OC\Repair::step', $repairListener); - $dispatcher->addListener('\OC\Repair::info', $repairListener); - $dispatcher->addListener('\OC\Repair::warning', $repairListener); - $dispatcher->addListener('\OC\Repair::error', $repairListener); + $dispatcher->addListener(MigratorExecuteSqlEvent::class, $listener); + $dispatcher->addListener(RepairStartEvent::class, $repairListener); + $dispatcher->addListener(RepairAdvanceEvent::class, $repairListener); + $dispatcher->addListener(RepairFinishEvent::class, $repairListener); + $dispatcher->addListener(RepairStepEvent::class, $repairListener); + $dispatcher->addListener(RepairInfoEvent::class, $repairListener); + $dispatcher->addListener(RepairWarningEvent::class, $repairListener); + $dispatcher->addListener(RepairErrorEvent::class, $repairListener); $updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($output) { diff --git a/core/ajax/update.php b/core/ajax/update.php index 39a99323cf5..56dffef409c 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -30,8 +30,19 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IEventSource; +use OCP\IL10N; use OCP\ILogger; -use Symfony\Component\EventDispatcher\GenericEvent; +use OC\DB\MigratorExecuteSqlEvent; +use OC\Repair\Events\RepairAdvanceEvent; +use OC\Repair\Events\RepairErrorEvent; +use OC\Repair\Events\RepairFinishEvent; +use OC\Repair\Events\RepairInfoEvent; +use OC\Repair\Events\RepairStartEvent; +use OC\Repair\Events\RepairStepEvent; +use OC\Repair\Events\RepairWarningEvent; if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) { @set_time_limit(0); @@ -48,57 +59,40 @@ $eventSource = \OC::$server->createEventSource(); $eventSource->send('success', $l->t('Preparing update')); class FeedBackHandler { - /** @var integer */ - private $progressStateMax = 100; - /** @var integer */ - private $progressStateStep = 0; - /** @var string */ - private $currentStep; - /** @var \OCP\IEventSource */ - private $eventSource; - /** @var \OCP\IL10N */ - private $l10n; - - public function __construct(\OCP\IEventSource $eventSource, \OCP\IL10N $l10n) { + private int $progressStateMax = 100; + private int $progressStateStep = 0; + private string $currentStep = ''; + private IEventSource $eventSource; + private IL10N $l10n; + + public function __construct(IEventSource $eventSource, IL10N $l10n) { $this->eventSource = $eventSource; $this->l10n = $l10n; } - public function handleRepairFeedback($event) { - if (!$event instanceof GenericEvent) { - return; - } - - switch ($event->getSubject()) { - case '\OC\Repair::startProgress': - $this->progressStateMax = $event->getArgument(0); - $this->progressStateStep = 0; - $this->currentStep = $event->getArgument(1); - break; - case '\OC\Repair::advance': - $this->progressStateStep += $event->getArgument(0); - $desc = $event->getArgument(1); - if (empty($desc)) { - $desc = $this->currentStep; - } - $this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $desc])); - break; - case '\OC\Repair::finishProgress': - $this->progressStateMax = $this->progressStateStep; - $this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $this->currentStep])); - break; - case '\OC\Repair::step': - $this->eventSource->send('success', $this->l10n->t('Repair step:') . ' ' . $event->getArgument(0)); - break; - case '\OC\Repair::info': - $this->eventSource->send('success', $this->l10n->t('Repair info:') . ' ' . $event->getArgument(0)); - break; - case '\OC\Repair::warning': - $this->eventSource->send('notice', $this->l10n->t('Repair warning:') . ' ' . $event->getArgument(0)); - break; - case '\OC\Repair::error': - $this->eventSource->send('notice', $this->l10n->t('Repair error:') . ' ' . $event->getArgument(0)); - break; + public function handleRepairFeedback(Event $event): void { + if ($event instanceof RepairStartEvent) { + $this->progressStateMax = $event->getMaxStep(); + $this->progressStateStep = 0; + $this->currentStep = $event->getCurrentStepName(); + } elseif ($event instanceof RepairAdvanceEvent) { + $this->progressStateStep += $event->getIncrement(); + $desc = $event->getDescription(); + if (empty($desc)) { + $desc = $this->currentStep; + } + $this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $desc])); + } elseif ($event instanceof RepairFinishEvent) { + $this->progressStateMax = $this->progressStateStep; + $this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $this->currentStep])); + } elseif ($event instanceof RepairStepEvent) { + $this->eventSource->send('success', $this->l10n->t('Repair step:') . ' ' . $event->getStepName()); + } elseif ($event instanceof RepairInfoEvent) { + $this->eventSource->send('success', $this->l10n->t('Repair info:') . ' ' . $event->getMessage()); + } elseif ($event instanceof RepairWarningEvent) { + $this->eventSource->send('notice', $this->l10n->t('Repair warning:') . ' ' . $event->getMessage()); + } elseif ($event instanceof RepairErrorEvent) { + $this->eventSource->send('error', $this->l10n->t('Repair error:') . ' ' . $event->getMessage()); } } } @@ -125,25 +119,22 @@ if (\OCP\Util::needUpgrade()) { ); $incompatibleApps = []; - $dispatcher = \OC::$server->getEventDispatcher(); - $dispatcher->addListener('\OC\DB\Migrator::executeSql', function ($event) use ($eventSource, $l) { - if ($event instanceof GenericEvent) { - $eventSource->send('success', $l->t('[%d / %d]: %s', [$event[0], $event[1], $event->getSubject()])); + /** @var IEventDispatcher $dispatcher */ + $dispatcher = \OC::$server->get(IEventDispatcher::class); + $dispatcher->addListener( + MigratorExecuteSqlEvent::class, + function (MigratorExecuteSqlEvent $event) use ($eventSource, $l): void { + $eventSource->send('success', $l->t('[%d / %d]: %s', [$event->getCurrentStep(), $event->getMaxStep(), $event->getSql()])); } - }); - $dispatcher->addListener('\OC\DB\Migrator::checkTable', function ($event) use ($eventSource, $l) { - if ($event instanceof GenericEvent) { - $eventSource->send('success', $l->t('[%d / %d]: Checking table %s', [$event[0], $event[1], $event->getSubject()])); - } - }); + ); $feedBack = new FeedBackHandler($eventSource, $l); - $dispatcher->addListener('\OC\Repair::startProgress', [$feedBack, 'handleRepairFeedback']); - $dispatcher->addListener('\OC\Repair::advance', [$feedBack, 'handleRepairFeedback']); - $dispatcher->addListener('\OC\Repair::finishProgress', [$feedBack, 'handleRepairFeedback']); - $dispatcher->addListener('\OC\Repair::step', [$feedBack, 'handleRepairFeedback']); - $dispatcher->addListener('\OC\Repair::info', [$feedBack, 'handleRepairFeedback']); - $dispatcher->addListener('\OC\Repair::warning', [$feedBack, 'handleRepairFeedback']); - $dispatcher->addListener('\OC\Repair::error', [$feedBack, 'handleRepairFeedback']); + $dispatcher->addListener(RepairStartEvent::class, [$feedBack, 'handleRepairFeedback']); + $dispatcher->addListener(RepairAdvanceEvent::class, [$feedBack, 'handleRepairFeedback']); + $dispatcher->addListener(RepairFinishEvent::class, [$feedBack, 'handleRepairFeedback']); + $dispatcher->addListener(RepairStepEvent::class, [$feedBack, 'handleRepairFeedback']); + $dispatcher->addListener(RepairInfoEvent::class, [$feedBack, 'handleRepairFeedback']); + $dispatcher->addListener(RepairWarningEvent::class, [$feedBack, 'handleRepairFeedback']); + $dispatcher->addListener(RepairErrorEvent::class, [$feedBack, 'handleRepairFeedback']); $updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($eventSource, $l) { $eventSource->send('success', $l->t('Turned on maintenance mode')); diff --git a/core/register_command.php b/core/register_command.php index 98a653aed7e..943180da706 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -168,9 +168,9 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig(), \OC::$server->get(LoggerInterface::class), \OC::$server->query(\OC\Installer::class))); $application->add(new OC\Core\Command\Maintenance\Repair( - new \OC\Repair([], \OC::$server->getEventDispatcher(), \OC::$server->get(LoggerInterface::class)), + new \OC\Repair([], \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class), \OC::$server->get(LoggerInterface::class)), \OC::$server->getConfig(), - \OC::$server->getEventDispatcher(), + \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class), \OC::$server->getAppManager() )); |