|
33 | 33 | */ |
34 | 34 | namespace OC\Core\Command; |
35 | 35 |
|
| 36 | +use OCP\EventDispatcher\Event; |
| 37 | +use OCP\EventDispatcher\IEventDispatcher; |
| 38 | +use OCP\IConfig; |
| 39 | +use OCP\Util; |
36 | 40 | use OC\Console\TimestampFormatter; |
| 41 | +use OC\DB\MigratorExecuteSqlEvent; |
37 | 42 | 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; |
38 | 50 | use OC\Updater; |
39 | | -use OCP\IConfig; |
40 | | -use OCP\Util; |
41 | 51 | use Psr\Log\LoggerInterface; |
42 | 52 | use Symfony\Component\Console\Command\Command; |
43 | 53 | use Symfony\Component\Console\Helper\ProgressBar; |
44 | 54 | use Symfony\Component\Console\Input\InputInterface; |
45 | 55 | use Symfony\Component\Console\Output\OutputInterface; |
46 | | -use Symfony\Component\EventDispatcher\GenericEvent; |
47 | 56 |
|
48 | 57 | class Upgrade extends Command { |
49 | 58 | public const ERROR_SUCCESS = 0; |
@@ -92,84 +101,70 @@ protected function execute(InputInterface $input, OutputInterface $output): int |
92 | 101 | $this->installer |
93 | 102 | ); |
94 | 103 |
|
95 | | - $dispatcher = \OC::$server->getEventDispatcher(); |
| 104 | + /** @var IEventDispatcher $dispatcher */ |
| 105 | + $dispatcher = \OC::$server->get(IEventDispatcher::class); |
96 | 106 | $progress = new ProgressBar($output); |
97 | 107 | $progress->setFormat(" %message%\n %current%/%max% [%bar%] %percent:3s%%"); |
98 | | - $listener = function ($event) use ($progress, $output) { |
99 | | - if ($event instanceof GenericEvent) { |
100 | | - $message = $event->getSubject(); |
101 | | - if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { |
102 | | - $output->writeln(' Checking table ' . $message); |
103 | | - } else { |
104 | | - if (strlen($message) > 60) { |
105 | | - $message = substr($message, 0, 57) . '...'; |
106 | | - } |
107 | | - $progress->setMessage($message); |
108 | | - if ($event[0] === 1) { |
109 | | - $output->writeln(''); |
110 | | - $progress->start($event[1]); |
111 | | - } |
112 | | - $progress->setProgress($event[0]); |
113 | | - if ($event[0] === $event[1]) { |
114 | | - $progress->setMessage('Done'); |
115 | | - $progress->finish(); |
116 | | - $output->writeln(''); |
117 | | - } |
| 108 | + $listener = function (MigratorExecuteSqlEvent $event) use ($progress, $output): void { |
| 109 | + $message = $event->getSql(); |
| 110 | + if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { |
| 111 | + $output->writeln(' Executing SQL ' . $message); |
| 112 | + } else { |
| 113 | + if (strlen($message) > 60) { |
| 114 | + $message = substr($message, 0, 57) . '...'; |
118 | 115 | } |
119 | | - } |
120 | | - }; |
121 | | - $repairListener = function ($event) use ($progress, $output) { |
122 | | - if (!$event instanceof GenericEvent) { |
123 | | - return; |
124 | | - } |
125 | | - switch ($event->getSubject()) { |
126 | | - case '\OC\Repair::startProgress': |
127 | | - $progress->setMessage('Starting ...'); |
128 | | - $output->writeln($event->getArgument(1)); |
| 116 | + $progress->setMessage($message); |
| 117 | + if ($event->getCurrentStep() === 1) { |
129 | 118 | $output->writeln(''); |
130 | | - $progress->start($event->getArgument(0)); |
131 | | - break; |
132 | | - case '\OC\Repair::advance': |
133 | | - $desc = $event->getArgument(1); |
134 | | - if (!empty($desc)) { |
135 | | - $progress->setMessage($desc); |
136 | | - } |
137 | | - $progress->advance($event->getArgument(0)); |
138 | | - |
139 | | - break; |
140 | | - case '\OC\Repair::finishProgress': |
| 119 | + $progress->start($event->getMaxStep()); |
| 120 | + } |
| 121 | + $progress->setProgress($event->getCurrentStep()); |
| 122 | + if ($event->getCurrentStep() === $event->getMaxStep()) { |
141 | 123 | $progress->setMessage('Done'); |
142 | 124 | $progress->finish(); |
143 | 125 | $output->writeln(''); |
144 | | - break; |
145 | | - case '\OC\Repair::step': |
146 | | - if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { |
147 | | - $output->writeln('<info>Repair step: ' . $event->getArgument(0) . '</info>'); |
148 | | - } |
149 | | - break; |
150 | | - case '\OC\Repair::info': |
151 | | - if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { |
152 | | - $output->writeln('<info>Repair info: ' . $event->getArgument(0) . '</info>'); |
153 | | - } |
154 | | - break; |
155 | | - case '\OC\Repair::warning': |
156 | | - $output->writeln('<error>Repair warning: ' . $event->getArgument(0) . '</error>'); |
157 | | - break; |
158 | | - case '\OC\Repair::error': |
159 | | - $output->writeln('<error>Repair error: ' . $event->getArgument(0) . '</error>'); |
160 | | - break; |
| 126 | + } |
| 127 | + } |
| 128 | + }; |
| 129 | + $repairListener = function (Event $event) use ($progress, $output): void { |
| 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->getIncrement()); |
| 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>'); |
161 | 157 | } |
162 | 158 | }; |
163 | 159 |
|
164 | | - $dispatcher->addListener('\OC\DB\Migrator::executeSql', $listener); |
165 | | - $dispatcher->addListener('\OC\DB\Migrator::checkTable', $listener); |
166 | | - $dispatcher->addListener('\OC\Repair::startProgress', $repairListener); |
167 | | - $dispatcher->addListener('\OC\Repair::advance', $repairListener); |
168 | | - $dispatcher->addListener('\OC\Repair::finishProgress', $repairListener); |
169 | | - $dispatcher->addListener('\OC\Repair::step', $repairListener); |
170 | | - $dispatcher->addListener('\OC\Repair::info', $repairListener); |
171 | | - $dispatcher->addListener('\OC\Repair::warning', $repairListener); |
172 | | - $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); |
173 | 168 |
|
174 | 169 |
|
175 | 170 | $updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($output) { |
|
0 commit comments