Skip to content

Commit 123d85f

Browse files
committed
Migrate Repair events to OCP\EventDispatcher\Event
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
1 parent e763df7 commit 123d85f

20 files changed

+506
-266
lines changed

core/Command/Maintenance/Repair.php

+34-38
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,31 @@
3030

3131
use Exception;
3232
use OCP\App\IAppManager;
33+
use OCP\EventDispatcher\Event;
34+
use OCP\EventDispatcher\IEventDispatcher;
3335
use OCP\IConfig;
36+
use OC\Repair\Events\RepairAdvanceEvent;
37+
use OC\Repair\Events\RepairErrorEvent;
38+
use OC\Repair\Events\RepairFinishEvent;
39+
use OC\Repair\Events\RepairInfoEvent;
40+
use OC\Repair\Events\RepairStartEvent;
41+
use OC\Repair\Events\RepairStepEvent;
42+
use OC\Repair\Events\RepairWarningEvent;
3443
use Symfony\Component\Console\Command\Command;
3544
use Symfony\Component\Console\Helper\ProgressBar;
3645
use Symfony\Component\Console\Input\InputInterface;
3746
use Symfony\Component\Console\Input\InputOption;
3847
use Symfony\Component\Console\Output\OutputInterface;
39-
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
40-
use Symfony\Component\EventDispatcher\GenericEvent;
4148

4249
class Repair extends Command {
4350
protected \OC\Repair $repair;
4451
protected IConfig $config;
45-
private EventDispatcherInterface $dispatcher;
52+
private IEventDispatcher $dispatcher;
4653
private ProgressBar $progress;
4754
private OutputInterface $output;
4855
private IAppManager $appManager;
4956

50-
public function __construct(\OC\Repair $repair, IConfig $config, EventDispatcherInterface $dispatcher, IAppManager $appManager) {
57+
public function __construct(\OC\Repair $repair, IConfig $config, IEventDispatcher $dispatcher, IAppManager $appManager) {
5158
$this->repair = $repair;
5259
$this->config = $config;
5360
$this->dispatcher = $dispatcher;
@@ -102,47 +109,36 @@ protected function execute(InputInterface $input, OutputInterface $output): int
102109

103110
$this->progress = new ProgressBar($output);
104111
$this->output = $output;
105-
$this->dispatcher->addListener('\OC\Repair::startProgress', [$this, 'handleRepairFeedBack']);
106-
$this->dispatcher->addListener('\OC\Repair::advance', [$this, 'handleRepairFeedBack']);
107-
$this->dispatcher->addListener('\OC\Repair::finishProgress', [$this, 'handleRepairFeedBack']);
108-
$this->dispatcher->addListener('\OC\Repair::step', [$this, 'handleRepairFeedBack']);
109-
$this->dispatcher->addListener('\OC\Repair::info', [$this, 'handleRepairFeedBack']);
110-
$this->dispatcher->addListener('\OC\Repair::warning', [$this, 'handleRepairFeedBack']);
111-
$this->dispatcher->addListener('\OC\Repair::error', [$this, 'handleRepairFeedBack']);
112+
$this->dispatcher->addListener(RepairStartEvent::class, [$this, 'handleRepairFeedBack']);
113+
$this->dispatcher->addListener(RepairAdvanceEvent::class, [$this, 'handleRepairFeedBack']);
114+
$this->dispatcher->addListener(RepairFinishEvent::class, [$this, 'handleRepairFeedBack']);
115+
$this->dispatcher->addListener(RepairStepEvent::class, [$this, 'handleRepairFeedBack']);
116+
$this->dispatcher->addListener(RepairInfoEvent::class, [$this, 'handleRepairFeedBack']);
117+
$this->dispatcher->addListener(RepairWarningEvent::class, [$this, 'handleRepairFeedBack']);
118+
$this->dispatcher->addListener(RepairErrorEvent::class, [$this, 'handleRepairFeedBack']);
112119

113120
$this->repair->run();
114121

115122
$this->config->setSystemValue('maintenance', $maintenanceMode);
116123
return 0;
117124
}
118125

119-
public function handleRepairFeedBack($event) {
120-
if (!$event instanceof GenericEvent) {
121-
return;
122-
}
123-
switch ($event->getSubject()) {
124-
case '\OC\Repair::startProgress':
125-
$this->progress->start($event->getArgument('max'));
126-
break;
127-
case '\OC\Repair::advance':
128-
$this->progress->advance($event->getArgument('step'));
129-
break;
130-
case '\OC\Repair::finishProgress':
131-
$this->progress->finish();
132-
$this->output->writeln('');
133-
break;
134-
case '\OC\Repair::step':
135-
$this->output->writeln(' - ' . $event->getArgument('step'));
136-
break;
137-
case '\OC\Repair::info':
138-
$this->output->writeln(' - ' . $event->getArgument('message'));
139-
break;
140-
case '\OC\Repair::warning':
141-
$this->output->writeln(' - WARNING: ' . $event->getArgument('message'));
142-
break;
143-
case '\OC\Repair::error':
144-
$this->output->writeln('<error> - ERROR: ' . $event->getArgument('message') . '</error>');
145-
break;
126+
public function handleRepairFeedBack(Event $event): void {
127+
if ($event instanceof RepairStartEvent) {
128+
$this->progress->start($event->getMaxStep());
129+
} elseif ($event instanceof RepairAdvanceEvent) {
130+
$this->progress->advance($event->getCurrentStep());
131+
} elseif ($event instanceof RepairFinishEvent) {
132+
$this->progress->finish();
133+
$this->output->writeln('');
134+
} elseif ($event instanceof RepairStepEvent) {
135+
$this->output->writeln(' - ' . $event->getStepName());
136+
} elseif ($event instanceof RepairInfoEvent) {
137+
$this->output->writeln(' - ' . $event->getMessage());
138+
} elseif ($event instanceof RepairWarningEvent) {
139+
$this->output->writeln(' - WARNING: ' . $event->getMessage());
140+
} elseif ($event instanceof RepairErrorEvent) {
141+
$this->output->writeln('<error> - ERROR: ' . $event->getMessage() . '</error>');
146142
}
147143
}
148144
}

core/Command/Upgrade.php

+46-52
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,26 @@
3333
*/
3434
namespace OC\Core\Command;
3535

36+
use OCP\EventDispatcher\Event;
3637
use OCP\EventDispatcher\IEventDispatcher;
3738
use OCP\IConfig;
3839
use OCP\Util;
3940
use OC\Console\TimestampFormatter;
4041
use OC\DB\MigratorExecuteSqlEvent;
4142
use OC\Installer;
43+
use OC\Repair\Events\RepairAdvanceEvent;
44+
use OC\Repair\Events\RepairErrorEvent;
45+
use OC\Repair\Events\RepairFinishEvent;
46+
use OC\Repair\Events\RepairInfoEvent;
47+
use OC\Repair\Events\RepairStartEvent;
48+
use OC\Repair\Events\RepairStepEvent;
49+
use OC\Repair\Events\RepairWarningEvent;
4250
use OC\Updater;
4351
use Psr\Log\LoggerInterface;
4452
use Symfony\Component\Console\Command\Command;
4553
use Symfony\Component\Console\Helper\ProgressBar;
4654
use Symfony\Component\Console\Input\InputInterface;
4755
use Symfony\Component\Console\Output\OutputInterface;
48-
use Symfony\Component\EventDispatcher\GenericEvent;
4956

5057
class Upgrade extends Command {
5158
public const ERROR_SUCCESS = 0;
@@ -94,9 +101,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int
94101
$this->installer
95102
);
96103

97-
$dispatcher = \OC::$server->getEventDispatcher();
98-
/** @var IEventDispatcher $newDispatcher */
99-
$newDispatcher = \OC::$server->get(IEventDispatcher::class);
104+
/** @var IEventDispatcher $dispatcher */
105+
$dispatcher = \OC::$server->get(IEventDispatcher::class);
100106
$progress = new ProgressBar($output);
101107
$progress->setFormat(" %message%\n %current%/%max% [%bar%] %percent:3s%%");
102108
$listener = function (MigratorExecuteSqlEvent $event) use ($progress, $output) {
@@ -120,57 +126,45 @@ protected function execute(InputInterface $input, OutputInterface $output): int
120126
}
121127
}
122128
};
123-
$repairListener = function ($event) use ($progress, $output) {
124-
if (!$event instanceof GenericEvent) {
125-
return;
126-
}
127-
switch ($event->getSubject()) {
128-
case '\OC\Repair::startProgress':
129-
$progress->setMessage('Starting ...');
130-
$output->writeln($event->getArgument('step'));
131-
$output->writeln('');
132-
$progress->start($event->getArgument('max'));
133-
break;
134-
case '\OC\Repair::advance':
135-
$desc = $event->getArgument('desc');
136-
if (!empty($desc)) {
137-
$progress->setMessage($desc);
138-
}
139-
$progress->advance($event->getArgument('step'));
140-
141-
break;
142-
case '\OC\Repair::finishProgress':
143-
$progress->setMessage('Done');
144-
$progress->finish();
145-
$output->writeln('');
146-
break;
147-
case '\OC\Repair::step':
148-
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
149-
$output->writeln('<info>Repair step: ' . $event->getArgument('step') . '</info>');
150-
}
151-
break;
152-
case '\OC\Repair::info':
153-
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
154-
$output->writeln('<info>Repair info: ' . $event->getArgument('message') . '</info>');
155-
}
156-
break;
157-
case '\OC\Repair::warning':
158-
$output->writeln('<error>Repair warning: ' . $event->getArgument('message') . '</error>');
159-
break;
160-
case '\OC\Repair::error':
161-
$output->writeln('<error>Repair error: ' . $event->getArgument('message') . '</error>');
162-
break;
129+
$repairListener = function (Event $event) use ($progress, $output) {
130+
if ($event instanceof RepairStartEvent) {
131+
$progress->setMessage('Starting ...');
132+
$output->writeln($event->getCurrentStepName());
133+
$output->writeln('');
134+
$progress->start($event->getMaxStep());
135+
} elseif ($event instanceof RepairAdvanceEvent) {
136+
$desc = $event->getDescription();
137+
if (!empty($desc)) {
138+
$progress->setMessage($desc);
139+
}
140+
$progress->advance($event->getCurrentStep());
141+
} elseif ($event instanceof RepairFinishEvent) {
142+
$progress->setMessage('Done');
143+
$progress->finish();
144+
$output->writeln('');
145+
} elseif ($event instanceof RepairStepEvent) {
146+
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
147+
$output->writeln('<info>Repair step: ' . $event->getStepName() . '</info>');
148+
}
149+
} elseif ($event instanceof RepairInfoEvent) {
150+
if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) {
151+
$output->writeln('<info>Repair info: ' . $event->getMessage() . '</info>');
152+
}
153+
} elseif ($event instanceof RepairWarningEvent) {
154+
$output->writeln('<error>Repair warning: ' . $event->getMessage() . '</error>');
155+
} elseif ($event instanceof RepairErrorEvent) {
156+
$output->writeln('<error>Repair error: ' . $event->getMessage() . '</error>');
163157
}
164158
};
165159

166-
$newDispatcher->addListener(MigratorExecuteSqlEvent::class, $listener);
167-
$dispatcher->addListener('\OC\Repair::startProgress', $repairListener);
168-
$dispatcher->addListener('\OC\Repair::advance', $repairListener);
169-
$dispatcher->addListener('\OC\Repair::finishProgress', $repairListener);
170-
$dispatcher->addListener('\OC\Repair::step', $repairListener);
171-
$dispatcher->addListener('\OC\Repair::info', $repairListener);
172-
$dispatcher->addListener('\OC\Repair::warning', $repairListener);
173-
$dispatcher->addListener('\OC\Repair::error', $repairListener);
160+
$dispatcher->addListener(MigratorExecuteSqlEvent::class, $listener);
161+
$dispatcher->addListener(RepairStartEvent::class, $repairListener);
162+
$dispatcher->addListener(RepairAdvanceEvent::class, $repairListener);
163+
$dispatcher->addListener(RepairFinishEvent::class, $repairListener);
164+
$dispatcher->addListener(RepairStepEvent::class, $repairListener);
165+
$dispatcher->addListener(RepairInfoEvent::class, $repairListener);
166+
$dispatcher->addListener(RepairWarningEvent::class, $repairListener);
167+
$dispatcher->addListener(RepairErrorEvent::class, $repairListener);
174168

175169

176170
$updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($output) {

core/ajax/update.php

+41-47
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,19 @@
3030
* along with this program. If not, see <http://www.gnu.org/licenses/>
3131
*
3232
*/
33+
use OCP\EventDispatcher\Event;
3334
use OCP\EventDispatcher\IEventDispatcher;
3435
use OCP\IEventSource;
3536
use OCP\IL10N;
3637
use OCP\ILogger;
3738
use OC\DB\MigratorExecuteSqlEvent;
38-
use Symfony\Component\EventDispatcher\GenericEvent;
39+
use OC\Repair\Events\RepairAdvanceEvent;
40+
use OC\Repair\Events\RepairErrorEvent;
41+
use OC\Repair\Events\RepairFinishEvent;
42+
use OC\Repair\Events\RepairInfoEvent;
43+
use OC\Repair\Events\RepairStartEvent;
44+
use OC\Repair\Events\RepairStepEvent;
45+
use OC\Repair\Events\RepairWarningEvent;
3946

4047
if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
4148
@set_time_limit(0);
@@ -63,41 +70,29 @@ public function __construct(IEventSource $eventSource, IL10N $l10n) {
6370
$this->l10n = $l10n;
6471
}
6572

66-
public function handleRepairFeedback($event): void {
67-
if (!$event instanceof GenericEvent) {
68-
return;
69-
}
70-
71-
switch ($event->getSubject()) {
72-
case '\OC\Repair::startProgress':
73-
$this->progressStateMax = $event->getArgument('max');
74-
$this->progressStateStep = 0;
75-
$this->currentStep = (string)$event->getArgument('step');
76-
break;
77-
case '\OC\Repair::advance':
78-
$this->progressStateStep += $event->getArgument('step');
79-
$desc = $event->getArgument('desc');
80-
if (empty($desc)) {
81-
$desc = $this->currentStep;
82-
}
83-
$this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $desc]));
84-
break;
85-
case '\OC\Repair::finishProgress':
86-
$this->progressStateMax = $this->progressStateStep;
87-
$this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $this->currentStep]));
88-
break;
89-
case '\OC\Repair::step':
90-
$this->eventSource->send('success', $this->l10n->t('Repair step:') . ' ' . $event->getArgument('step'));
91-
break;
92-
case '\OC\Repair::info':
93-
$this->eventSource->send('success', $this->l10n->t('Repair info:') . ' ' . $event->getArgument('message'));
94-
break;
95-
case '\OC\Repair::warning':
96-
$this->eventSource->send('notice', $this->l10n->t('Repair warning:') . ' ' . $event->getArgument('message'));
97-
break;
98-
case '\OC\Repair::error':
99-
$this->eventSource->send('notice', $this->l10n->t('Repair error:') . ' ' . $event->getArgument('message'));
100-
break;
73+
public function handleRepairFeedback(Event $event): void {
74+
if ($event instanceof RepairStartEvent) {
75+
$this->progressStateMax = $event->getMaxStep();
76+
$this->progressStateStep = 0;
77+
$this->currentStep = $event->getCurrentStepName();
78+
} elseif ($event instanceof RepairAdvanceEvent) {
79+
$this->progressStateStep += $event->getCurrentStep();
80+
$desc = $event->getDescription();
81+
if (empty($desc)) {
82+
$desc = $this->currentStep;
83+
}
84+
$this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $desc]));
85+
} elseif ($event instanceof RepairFinishEvent) {
86+
$this->progressStateMax = $this->progressStateStep;
87+
$this->eventSource->send('success', $this->l10n->t('[%d / %d]: %s', [$this->progressStateStep, $this->progressStateMax, $this->currentStep]));
88+
} elseif ($event instanceof RepairStepEvent) {
89+
$this->eventSource->send('success', $this->l10n->t('Repair step:') . ' ' . $event->getStepName());
90+
} elseif ($event instanceof RepairInfoEvent) {
91+
$this->eventSource->send('success', $this->l10n->t('Repair info:') . ' ' . $event->getMessage());
92+
} elseif ($event instanceof RepairWarningEvent) {
93+
$this->eventSource->send('notice', $this->l10n->t('Repair warning:') . ' ' . $event->getMessage());
94+
} elseif ($event instanceof RepairErrorEvent) {
95+
$this->eventSource->send('notice', $this->l10n->t('Repair error:') . ' ' . $event->getMessage());
10196
}
10297
}
10398
}
@@ -124,20 +119,19 @@ public function handleRepairFeedback($event): void {
124119
);
125120
$incompatibleApps = [];
126121

127-
$dispatcher = \OC::$server->getEventDispatcher();
128-
/** @var IEventDispatcher $newDispatcher */
129-
$newDispatcher = \OC::$server->get(IEventDispatcher::class);
130-
$newDispatcher->addListener(MigratorExecuteSqlEvent::class, function (MigratorExecuteSqlEvent $event) use ($eventSource, $l) {
122+
/** @var IEventDispatcher $dispatcher */
123+
$dispatcher = \OC::$server->get(IEventDispatcher::class);
124+
$dispatcher->addListener(MigratorExecuteSqlEvent::class, function (MigratorExecuteSqlEvent $event) use ($eventSource, $l) {
131125
$eventSource->send('success', $l->t('[%d / %d]: %s', [$event->getCurrentStep(), $event->getMaxStep(), $event->getSql()]));
132126
});
133127
$feedBack = new FeedBackHandler($eventSource, $l);
134-
$dispatcher->addListener('\OC\Repair::startProgress', [$feedBack, 'handleRepairFeedback']);
135-
$dispatcher->addListener('\OC\Repair::advance', [$feedBack, 'handleRepairFeedback']);
136-
$dispatcher->addListener('\OC\Repair::finishProgress', [$feedBack, 'handleRepairFeedback']);
137-
$dispatcher->addListener('\OC\Repair::step', [$feedBack, 'handleRepairFeedback']);
138-
$dispatcher->addListener('\OC\Repair::info', [$feedBack, 'handleRepairFeedback']);
139-
$dispatcher->addListener('\OC\Repair::warning', [$feedBack, 'handleRepairFeedback']);
140-
$dispatcher->addListener('\OC\Repair::error', [$feedBack, 'handleRepairFeedback']);
128+
$dispatcher->addListener(RepairStartEvent::class, [$feedBack, 'handleRepairFeedback']);
129+
$dispatcher->addListener(RepairAdvanceEvent::class, [$feedBack, 'handleRepairFeedback']);
130+
$dispatcher->addListener(RepairFinishEvent::class, [$feedBack, 'handleRepairFeedback']);
131+
$dispatcher->addListener(RepairStepEvent::class, [$feedBack, 'handleRepairFeedback']);
132+
$dispatcher->addListener(RepairInfoEvent::class, [$feedBack, 'handleRepairFeedback']);
133+
$dispatcher->addListener(RepairWarningEvent::class, [$feedBack, 'handleRepairFeedback']);
134+
$dispatcher->addListener(RepairErrorEvent::class, [$feedBack, 'handleRepairFeedback']);
141135

142136
$updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($eventSource, $l) {
143137
$eventSource->send('success', $l->t('Turned on maintenance mode'));

core/register_command.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,9 @@
168168

169169
$application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig(), \OC::$server->get(LoggerInterface::class), \OC::$server->query(\OC\Installer::class)));
170170
$application->add(new OC\Core\Command\Maintenance\Repair(
171-
new \OC\Repair([], \OC::$server->getEventDispatcher(), \OC::$server->get(LoggerInterface::class)),
171+
new \OC\Repair([], \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class), \OC::$server->get(LoggerInterface::class)),
172172
\OC::$server->getConfig(),
173-
\OC::$server->getEventDispatcher(),
173+
\OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class),
174174
\OC::$server->getAppManager()
175175
));
176176

lib/composer/composer/autoload_classmap.php

+7
Original file line numberDiff line numberDiff line change
@@ -1415,6 +1415,13 @@
14151415
'OC\\Repair\\ClearFrontendCaches' => $baseDir . '/lib/private/Repair/ClearFrontendCaches.php',
14161416
'OC\\Repair\\ClearGeneratedAvatarCache' => $baseDir . '/lib/private/Repair/ClearGeneratedAvatarCache.php',
14171417
'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php',
1418+
'OC\\Repair\\Events\\RepairAdvanceEvent' => $baseDir . '/lib/private/Repair/Events/RepairAdvanceEvent.php',
1419+
'OC\\Repair\\Events\\RepairErrorEvent' => $baseDir . '/lib/private/Repair/Events/RepairErrorEvent.php',
1420+
'OC\\Repair\\Events\\RepairFinishEvent' => $baseDir . '/lib/private/Repair/Events/RepairFinishEvent.php',
1421+
'OC\\Repair\\Events\\RepairInfoEvent' => $baseDir . '/lib/private/Repair/Events/RepairInfoEvent.php',
1422+
'OC\\Repair\\Events\\RepairStartEvent' => $baseDir . '/lib/private/Repair/Events/RepairStartEvent.php',
1423+
'OC\\Repair\\Events\\RepairStepEvent' => $baseDir . '/lib/private/Repair/Events/RepairStepEvent.php',
1424+
'OC\\Repair\\Events\\RepairWarningEvent' => $baseDir . '/lib/private/Repair/Events/RepairWarningEvent.php',
14181425
'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php',
14191426
'OC\\Repair\\NC11\\FixMountStorages' => $baseDir . '/lib/private/Repair/NC11/FixMountStorages.php',
14201427
'OC\\Repair\\NC13\\AddLogRotateJob' => $baseDir . '/lib/private/Repair/NC13/AddLogRotateJob.php',

0 commit comments

Comments
 (0)