summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorCôme Chilliet <91878298+come-nc@users.noreply.github.com>2022-08-30 14:47:05 +0200
committerGitHub <noreply@github.com>2022-08-30 14:47:05 +0200
commitf56ecf92426026c913497bea9f7ca99e8d3ac631 (patch)
tree4e3f02de1eae3ff03e5f23e15b12195b4aee4255 /core
parent66648011c6bc278ace57230db44fd6d63d67b864 (diff)
parent0b9a878250d79101756d881d15d22acda2dbeddc (diff)
downloadnextcloud-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.php72
-rw-r--r--core/Command/Upgrade.php137
-rw-r--r--core/ajax/update.php121
-rw-r--r--core/register_command.php4
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()
));