diff options
author | Côme Chilliet <come.chilliet@nextcloud.com> | 2022-08-22 17:59:26 +0200 |
---|---|---|
committer | Côme Chilliet <come.chilliet@nextcloud.com> | 2022-08-25 16:15:48 +0200 |
commit | a2a7150d6d87a499e6745651edb27c9795939d0c (patch) | |
tree | 43c24a93b22268ec324ec30b2ef026ea09df1b4b /lib | |
parent | a83a8f0dde07bff67e0ceb7008cc26b3fad32516 (diff) | |
download | nextcloud-server-a2a7150d6d87a499e6745651edb27c9795939d0c.tar.gz nextcloud-server-a2a7150d6d87a499e6745651edb27c9795939d0c.zip |
Migrate Repair events to OCP\EventDispatcher\Event
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/composer/composer/autoload_classmap.php | 7 | ||||
-rw-r--r-- | lib/composer/composer/autoload_static.php | 7 | ||||
-rw-r--r-- | lib/private/DB/Connection.php | 2 | ||||
-rw-r--r-- | lib/private/DB/MigratorExecuteSqlEvent.php | 2 | ||||
-rw-r--r-- | lib/private/Migration/BackgroundRepair.php | 12 | ||||
-rw-r--r-- | lib/private/Repair.php | 66 | ||||
-rw-r--r-- | lib/private/Repair/Events/RepairAdvanceEvent.php | 46 | ||||
-rw-r--r-- | lib/private/Repair/Events/RepairErrorEvent.php | 38 | ||||
-rw-r--r-- | lib/private/Repair/Events/RepairFinishEvent.php | 27 | ||||
-rw-r--r-- | lib/private/Repair/Events/RepairInfoEvent.php | 38 | ||||
-rw-r--r-- | lib/private/Repair/Events/RepairStartEvent.php | 45 | ||||
-rw-r--r-- | lib/private/Repair/Events/RepairStepEvent.php | 38 | ||||
-rw-r--r-- | lib/private/Repair/Events/RepairWarningEvent.php | 38 | ||||
-rw-r--r-- | lib/private/Updater.php | 124 | ||||
-rw-r--r-- | lib/private/legacy/OC_App.php | 17 | ||||
-rw-r--r-- | lib/public/Migration/IOutput.php | 6 |
16 files changed, 385 insertions, 128 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 9aaffee3fba..4e0d07ab6bc 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -1416,6 +1416,13 @@ return array( 'OC\\Repair\\ClearFrontendCaches' => $baseDir . '/lib/private/Repair/ClearFrontendCaches.php', 'OC\\Repair\\ClearGeneratedAvatarCache' => $baseDir . '/lib/private/Repair/ClearGeneratedAvatarCache.php', 'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php', + 'OC\\Repair\\Events\\RepairAdvanceEvent' => $baseDir . '/lib/private/Repair/Events/RepairAdvanceEvent.php', + 'OC\\Repair\\Events\\RepairErrorEvent' => $baseDir . '/lib/private/Repair/Events/RepairErrorEvent.php', + 'OC\\Repair\\Events\\RepairFinishEvent' => $baseDir . '/lib/private/Repair/Events/RepairFinishEvent.php', + 'OC\\Repair\\Events\\RepairInfoEvent' => $baseDir . '/lib/private/Repair/Events/RepairInfoEvent.php', + 'OC\\Repair\\Events\\RepairStartEvent' => $baseDir . '/lib/private/Repair/Events/RepairStartEvent.php', + 'OC\\Repair\\Events\\RepairStepEvent' => $baseDir . '/lib/private/Repair/Events/RepairStepEvent.php', + 'OC\\Repair\\Events\\RepairWarningEvent' => $baseDir . '/lib/private/Repair/Events/RepairWarningEvent.php', 'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php', 'OC\\Repair\\NC11\\FixMountStorages' => $baseDir . '/lib/private/Repair/NC11/FixMountStorages.php', 'OC\\Repair\\NC13\\AddLogRotateJob' => $baseDir . '/lib/private/Repair/NC13/AddLogRotateJob.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 2b73c398e33..68b5838f0d5 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -1449,6 +1449,13 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OC\\Repair\\ClearFrontendCaches' => __DIR__ . '/../../..' . '/lib/private/Repair/ClearFrontendCaches.php', 'OC\\Repair\\ClearGeneratedAvatarCache' => __DIR__ . '/../../..' . '/lib/private/Repair/ClearGeneratedAvatarCache.php', 'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php', + 'OC\\Repair\\Events\\RepairAdvanceEvent' => __DIR__ . '/../../..' . '/lib/private/Repair/Events/RepairAdvanceEvent.php', + 'OC\\Repair\\Events\\RepairErrorEvent' => __DIR__ . '/../../..' . '/lib/private/Repair/Events/RepairErrorEvent.php', + 'OC\\Repair\\Events\\RepairFinishEvent' => __DIR__ . '/../../..' . '/lib/private/Repair/Events/RepairFinishEvent.php', + 'OC\\Repair\\Events\\RepairInfoEvent' => __DIR__ . '/../../..' . '/lib/private/Repair/Events/RepairInfoEvent.php', + 'OC\\Repair\\Events\\RepairStartEvent' => __DIR__ . '/../../..' . '/lib/private/Repair/Events/RepairStartEvent.php', + 'OC\\Repair\\Events\\RepairStepEvent' => __DIR__ . '/../../..' . '/lib/private/Repair/Events/RepairStepEvent.php', + 'OC\\Repair\\Events\\RepairWarningEvent' => __DIR__ . '/../../..' . '/lib/private/Repair/Events/RepairWarningEvent.php', 'OC\\Repair\\MoveUpdaterStepFile' => __DIR__ . '/../../..' . '/lib/private/Repair/MoveUpdaterStepFile.php', 'OC\\Repair\\NC11\\FixMountStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/FixMountStorages.php', 'OC\\Repair\\NC13\\AddLogRotateJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC13/AddLogRotateJob.php', diff --git a/lib/private/DB/Connection.php b/lib/private/DB/Connection.php index 22c2bbbb793..73e0f4b4ac2 100644 --- a/lib/private/DB/Connection.php +++ b/lib/private/DB/Connection.php @@ -588,7 +588,7 @@ class Connection extends \Doctrine\DBAL\Connection { $random = \OC::$server->getSecureRandom(); $platform = $this->getDatabasePlatform(); $config = \OC::$server->getConfig(); - $dispatcher = \OC::$server->getEventDispatcher(); + $dispatcher = \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class); if ($platform instanceof SqlitePlatform) { return new SQLiteMigrator($this, $config, $dispatcher); } elseif ($platform instanceof OraclePlatform) { diff --git a/lib/private/DB/MigratorExecuteSqlEvent.php b/lib/private/DB/MigratorExecuteSqlEvent.php index d8a0e2ac3ad..9c67587fc1c 100644 --- a/lib/private/DB/MigratorExecuteSqlEvent.php +++ b/lib/private/DB/MigratorExecuteSqlEvent.php @@ -31,7 +31,7 @@ class MigratorExecuteSqlEvent extends Event { public function __construct( string $sql, int $current, - int $max, + int $max ) { $this->sql = $sql; $this->current = $current; diff --git a/lib/private/Migration/BackgroundRepair.php b/lib/private/Migration/BackgroundRepair.php index f3ae8f4bdcf..579ba494e58 100644 --- a/lib/private/Migration/BackgroundRepair.php +++ b/lib/private/Migration/BackgroundRepair.php @@ -26,14 +26,14 @@ */ namespace OC\Migration; -use OC\NeedsUpdateException; -use OC\Repair; -use OC_App; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\IJobList; use OCP\BackgroundJob\TimedJob; +use OCP\EventDispatcher\IEventDispatcher; +use OC\NeedsUpdateException; +use OC\Repair; +use OC_App; use Psr\Log\LoggerInterface; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** * Class BackgroundRepair @@ -43,9 +43,9 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; class BackgroundRepair extends TimedJob { private IJobList $jobList; private LoggerInterface $logger; - private EventDispatcherInterface $dispatcher; + private IEventDispatcher $dispatcher; - public function __construct(EventDispatcherInterface $dispatcher, ITimeFactory $time, LoggerInterface $logger, IJobList $jobList) { + public function __construct(IEventDispatcher $dispatcher, ITimeFactory $time, LoggerInterface $logger, IJobList $jobList) { parent::__construct($time); $this->dispatcher = $dispatcher; $this->logger = $logger; diff --git a/lib/private/Repair.php b/lib/private/Repair.php index 496e9b15e2e..97a72707d03 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -34,6 +34,12 @@ */ namespace OC; +use OCP\AppFramework\QueryException; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Collaboration\Resources\IManager; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; use OC\App\AppStore\Bundles\BundleFetcher; use OC\Avatar\AvatarManager; use OC\DB\Connection; @@ -44,15 +50,15 @@ use OC\Repair\CleanTags; use OC\Repair\ClearFrontendCaches; use OC\Repair\ClearGeneratedAvatarCache; use OC\Repair\Collation; +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\Repair\MoveUpdaterStepFile; -use OC\Repair\NC22\LookupServerSendCheck; -use OC\Repair\NC24\AddTokenCleanupJob; -use OC\Repair\Owncloud\CleanPreviews; -use OC\Repair\Owncloud\MigrateOauthTables; use OC\Repair\NC11\FixMountStorages; -use OC\Repair\Owncloud\MoveAvatars; -use OC\Repair\Owncloud\InstallCoreBundle; -use OC\Repair\Owncloud\UpdateLanguageCodes; use OC\Repair\NC13\AddLogRotateJob; use OC\Repair\NC14\AddPreviewBackgroundCleanupJob; use OC\Repair\NC16\AddClenupLoginFlowV2BackgroundJob; @@ -64,23 +70,23 @@ use OC\Repair\NC20\EncryptionMigration; use OC\Repair\NC20\ShippedDashboardEnable; use OC\Repair\NC21\AddCheckForUserCertificatesJob; use OC\Repair\NC21\ValidatePhoneNumber; +use OC\Repair\NC22\LookupServerSendCheck; +use OC\Repair\NC24\AddTokenCleanupJob; use OC\Repair\OldGroupMembershipShares; +use OC\Repair\Owncloud\CleanPreviews; use OC\Repair\Owncloud\DropAccountTermsTable; +use OC\Repair\Owncloud\InstallCoreBundle; +use OC\Repair\Owncloud\MigrateOauthTables; +use OC\Repair\Owncloud\MoveAvatars; use OC\Repair\Owncloud\SaveAccountsTableData; +use OC\Repair\Owncloud\UpdateLanguageCodes; use OC\Repair\RemoveLinkShares; use OC\Repair\RepairDavShares; use OC\Repair\RepairInvalidShares; use OC\Repair\RepairMimeTypes; use OC\Repair\SqliteAutoincrement; use OC\Template\JSCombiner; -use OCP\AppFramework\QueryException; -use OCP\AppFramework\Utility\ITimeFactory; -use OCP\Collaboration\Resources\IManager; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; use Psr\Log\LoggerInterface; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\EventDispatcher\GenericEvent; use Throwable; class Repair implements IOutput { @@ -88,8 +94,7 @@ class Repair implements IOutput { /** @var IRepairStep[] */ private $repairSteps; - /** @var EventDispatcherInterface */ - private $dispatcher; + private IEventDispatcher $dispatcher; /** @var string */ private $currentStep; @@ -101,7 +106,7 @@ class Repair implements IOutput { * * @param IRepairStep[] $repairSteps array of RepairStep instances */ - public function __construct(array $repairSteps, EventDispatcherInterface $dispatcher, LoggerInterface $logger) { + public function __construct(array $repairSteps, IEventDispatcher $dispatcher, LoggerInterface $logger) { $this->repairSteps = $repairSteps; $this->dispatcher = $dispatcher; $this->logger = $logger; @@ -112,19 +117,19 @@ class Repair implements IOutput { */ public function run() { if (count($this->repairSteps) === 0) { - $this->emit('\OC\Repair', 'info', ['message' => 'No repair steps available']); + $this->dispatcher->dispatchTyped(new RepairInfoEvent('No repair steps available')); return; } // run each repair step foreach ($this->repairSteps as $step) { $this->currentStep = $step->getName(); - $this->emit('\OC\Repair', 'step', ['step' => $this->currentStep]); + $this->dispatcher->dispatchTyped(new RepairStepEvent($this->currentStep)); try { $step->run($this); } catch (\Exception $e) { $this->logger->error("Exception while executing repair step " . $step->getName(), ['exception' => $e]); - $this->emit('\OC\Repair', 'error', ['message' => $e->getMessage()]); + $this->dispatcher->dispatchTyped(new RepairErrorEvent($e->getMessage())); } } } @@ -138,7 +143,7 @@ class Repair implements IOutput { public function addStep($repairStep) { if (is_string($repairStep)) { try { - $s = \OC::$server->query($repairStep); + $s = \OC::$server->get($repairStep); } catch (QueryException $e) { if (class_exists($repairStep)) { try { @@ -250,16 +255,11 @@ class Repair implements IOutput { } /** - * @param array<string, mixed> $arguments + * @param string $message */ - public function emit(string $scope, string $method, array $arguments = []): void { - $this->dispatcher->dispatch("$scope::$method", - new GenericEvent("$scope::$method", $arguments)); - } - - public function info($string) { + public function info($message) { // for now just emit as we did in the past - $this->emit('\OC\Repair', 'info', ['message' => $string]); + $this->dispatcher->dispatchTyped(new RepairInfoEvent($message)); } /** @@ -267,7 +267,7 @@ class Repair implements IOutput { */ public function warning($message) { // for now just emit as we did in the past - $this->emit('\OC\Repair', 'warning', ['message' => $message]); + $this->dispatcher->dispatchTyped(new RepairWarningEvent($message)); } /** @@ -275,7 +275,7 @@ class Repair implements IOutput { */ public function startProgress($max = 0) { // for now just emit as we did in the past - $this->emit('\OC\Repair', 'startProgress', ['max' => $max, 'step' => $this->currentStep]); + $this->dispatcher->dispatchTyped(new RepairStartEvent($max, $this->currentStep)); } /** @@ -284,7 +284,7 @@ class Repair implements IOutput { */ public function advance($step = 1, $description = '') { // for now just emit as we did in the past - $this->emit('\OC\Repair', 'advance', ['step' => $step, 'desc' => $description]); + $this->dispatcher->dispatchTyped(new RepairAdvanceEvent($step, $description)); } /** @@ -292,6 +292,6 @@ class Repair implements IOutput { */ public function finishProgress() { // for now just emit as we did in the past - $this->emit('\OC\Repair', 'finishProgress', []); + $this->dispatcher->dispatchTyped(new RepairFinishEvent()); } } diff --git a/lib/private/Repair/Events/RepairAdvanceEvent.php b/lib/private/Repair/Events/RepairAdvanceEvent.php new file mode 100644 index 00000000000..c82c61c186c --- /dev/null +++ b/lib/private/Repair/Events/RepairAdvanceEvent.php @@ -0,0 +1,46 @@ +<?php +/** + * @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Repair\Events; + +use OCP\EventDispatcher\Event; + +class RepairAdvanceEvent extends Event { + // TODO Is that current step or step increment? + private int $current; + private string $description; + + public function __construct( + int $current, + string $description + ) { + $this->current = $current; + $this->description = $description; + } + + public function getCurrentStep(): int { + return $this->current; + } + + public function getDescription(): string { + return $this->description; + } +} diff --git a/lib/private/Repair/Events/RepairErrorEvent.php b/lib/private/Repair/Events/RepairErrorEvent.php new file mode 100644 index 00000000000..c1380143216 --- /dev/null +++ b/lib/private/Repair/Events/RepairErrorEvent.php @@ -0,0 +1,38 @@ +<?php +/** + * @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Repair\Events; + +use OCP\EventDispatcher\Event; + +class RepairErrorEvent extends Event { + private string $message; + + public function __construct( + string $message + ) { + $this->message = $message; + } + + public function getMessage(): string { + return $this->message; + } +} diff --git a/lib/private/Repair/Events/RepairFinishEvent.php b/lib/private/Repair/Events/RepairFinishEvent.php new file mode 100644 index 00000000000..2d3027c23bc --- /dev/null +++ b/lib/private/Repair/Events/RepairFinishEvent.php @@ -0,0 +1,27 @@ +<?php +/** + * @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Repair\Events; + +use OCP\EventDispatcher\Event; + +class RepairFinishEvent extends Event { +} diff --git a/lib/private/Repair/Events/RepairInfoEvent.php b/lib/private/Repair/Events/RepairInfoEvent.php new file mode 100644 index 00000000000..7acf71b2d90 --- /dev/null +++ b/lib/private/Repair/Events/RepairInfoEvent.php @@ -0,0 +1,38 @@ +<?php +/** + * @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Repair\Events; + +use OCP\EventDispatcher\Event; + +class RepairInfoEvent extends Event { + private string $message; + + public function __construct( + string $message + ) { + $this->message = $message; + } + + public function getMessage(): string { + return $this->message; + } +} diff --git a/lib/private/Repair/Events/RepairStartEvent.php b/lib/private/Repair/Events/RepairStartEvent.php new file mode 100644 index 00000000000..115e145f69f --- /dev/null +++ b/lib/private/Repair/Events/RepairStartEvent.php @@ -0,0 +1,45 @@ +<?php +/** + * @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Repair\Events; + +use OCP\EventDispatcher\Event; + +class RepairStartEvent extends Event { + private int $max; + private string $current; + + public function __construct( + int $max, + string $current + ) { + $this->max = $max; + $this->current = $current; + } + + public function getMaxStep(): int { + return $this->max; + } + + public function getCurrentStepName(): string { + return $this->current; + } +} diff --git a/lib/private/Repair/Events/RepairStepEvent.php b/lib/private/Repair/Events/RepairStepEvent.php new file mode 100644 index 00000000000..03f0c492920 --- /dev/null +++ b/lib/private/Repair/Events/RepairStepEvent.php @@ -0,0 +1,38 @@ +<?php +/** + * @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Repair\Events; + +use OCP\EventDispatcher\Event; + +class RepairStepEvent extends Event { + private string $stepName; + + public function __construct( + string $stepName + ) { + $this->stepName = $stepName; + } + + public function getStepName(): string { + return $this->stepName; + } +} diff --git a/lib/private/Repair/Events/RepairWarningEvent.php b/lib/private/Repair/Events/RepairWarningEvent.php new file mode 100644 index 00000000000..f42478873d2 --- /dev/null +++ b/lib/private/Repair/Events/RepairWarningEvent.php @@ -0,0 +1,38 @@ +<?php +/** + * @copyright Copyright (c) 2022 Côme Chilliet <come.chilliet@nextcloud.com> + * + * @author Côme Chilliet <come.chilliet@nextcloud.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Repair\Events; + +use OCP\EventDispatcher\Event; + +class RepairWarningEvent extends Event { + private string $message; + + public function __construct( + string $message + ) { + $this->message = $message; + } + + public function getMessage(): string { + return $this->message; + } +} diff --git a/lib/private/Updater.php b/lib/private/Updater.php index e63c158f7a2..889b54eec51 100644 --- a/lib/private/Updater.php +++ b/lib/private/Updater.php @@ -40,19 +40,28 @@ declare(strict_types=1); */ namespace OC; +use OCP\App\IAppManager; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\HintException; +use OCP\IConfig; +use OCP\ILogger; +use OCP\Util; use OC\App\AppManager; use OC\DB\Connection; use OC\DB\MigrationService; +use OC\DB\MigratorExecuteSqlEvent; use OC\Hooks\BasicEmitter; use OC\IntegrityCheck\Checker; +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_App; -use OCP\App\IAppManager; -use OCP\HintException; -use OCP\IConfig; -use OCP\ILogger; -use OCP\Util; use Psr\Log\LoggerInterface; -use Symfony\Component\EventDispatcher\GenericEvent; /** * Class that handles autoupdating of ownCloud @@ -102,7 +111,6 @@ class Updater extends BasicEmitter { * @return bool true if the operation succeeded, false otherwise */ public function upgrade(): bool { - $this->emitRepairEvents(); $this->logAllEvents(); $logLevel = $this->config->getSystemValue('loglevel', ILogger::WARN); @@ -248,7 +256,7 @@ class Updater extends BasicEmitter { file_put_contents($this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/.ocdata', ''); // pre-upgrade repairs - $repair = new Repair(Repair::getBeforeUpgradeRepairSteps(), \OC::$server->getEventDispatcher(), \OC::$server->get(LoggerInterface::class)); + $repair = new Repair(Repair::getBeforeUpgradeRepairSteps(), \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class), \OC::$server->get(LoggerInterface::class)); $repair->run(); $this->doCoreUpgrade(); @@ -289,7 +297,7 @@ class Updater extends BasicEmitter { } // post-upgrade repairs - $repair = new Repair(Repair::getRepairSteps(), \OC::$server->getEventDispatcher(), \OC::$server->get(LoggerInterface::class)); + $repair = new Repair(Repair::getRepairSteps(), \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class), \OC::$server->get(LoggerInterface::class)); $repair->run(); //Invalidate update feed @@ -432,87 +440,47 @@ class Updater extends BasicEmitter { } } - /** - * Forward messages emitted by the repair routine - */ - private function emitRepairEvents(): void { - $dispatcher = \OC::$server->getEventDispatcher(); - $dispatcher->addListener('\OC\Repair::warning', function ($event) { - if ($event instanceof GenericEvent) { - $this->emit('\OC\Updater', 'repairWarning', $event->getArguments()); - } - }); - $dispatcher->addListener('\OC\Repair::error', function ($event) { - if ($event instanceof GenericEvent) { - $this->emit('\OC\Updater', 'repairError', $event->getArguments()); - } - }); - $dispatcher->addListener('\OC\Repair::info', function ($event) { - if ($event instanceof GenericEvent) { - $this->emit('\OC\Updater', 'repairInfo', $event->getArguments()); - } - }); - $dispatcher->addListener('\OC\Repair::step', function ($event) { - if ($event instanceof GenericEvent) { - $this->emit('\OC\Updater', 'repairStep', $event->getArguments()); - } - }); - } - private function logAllEvents(): void { $log = $this->log; - $dispatcher = \OC::$server->getEventDispatcher(); - /** @var IEventDispatcher $newDispatcher */ - $newDispatcher = \OC::$server->get(IEventDispatcher::class); - $newDispatcher->addListener( + /** @var IEventDispatcher $dispatcher */ + $dispatcher = \OC::$server->get(IEventDispatcher::class); + $dispatcher->addListener( MigratorExecuteSqlEvent::class, function (MigratorExecuteSqlEvent $event) use ($log) { $log->info(get_class($event).': ' . $event->getSql() . ' (' . $event->getCurrentStep() . ' of ' . $event->getMaxStep() . ')', ['app' => 'updater']); } ); - $repairListener = function ($event) use ($log) { - if (!$event instanceof GenericEvent) { - return; - } - switch ($event->getSubject()) { - case '\OC\Repair::startProgress': - $log->info('\OC\Repair::startProgress: Starting ... ' . $event->getArgument('max') . ' (' . $event->getArgument('step') . ')', ['app' => 'updater']); - break; - case '\OC\Repair::advance': - $desc = $event->getArgument('desc'); - if (empty($desc)) { - $desc = ''; - } - $log->info('\OC\Repair::advance: ' . $desc . ' (' . $event->getArgument('step') . ')', ['app' => 'updater']); - - break; - case '\OC\Repair::finishProgress': - $log->info('\OC\Repair::finishProgress', ['app' => 'updater']); - break; - case '\OC\Repair::step': - $log->info('\OC\Repair::step: Repair step: ' . $event->getArgument('step'), ['app' => 'updater']); - break; - case '\OC\Repair::info': - $log->info('\OC\Repair::info: Repair info: ' . $event->getArgument('message'), ['app' => 'updater']); - break; - case '\OC\Repair::warning': - $log->warning('\OC\Repair::warning: Repair warning: ' . $event->getArgument('message'), ['app' => 'updater']); - break; - case '\OC\Repair::error': - $log->error('\OC\Repair::error: Repair error: ' . $event->getArgument('message'), ['app' => 'updater']); - break; + $repairListener = function (Event $event) use ($log) { + if ($event instanceof RepairStartEvent) { + $log->info(get_class($event).': Starting ... ' . $event->getMaxStep() . ' (' . $event->getCurrentStepName() . ')', ['app' => 'updater']); + } elseif ($event instanceof RepairAdvanceEvent) { + $desc = $event->getDescription(); + if (empty($desc)) { + $desc = ''; + } + $log->info(get_class($event).': ' . $desc . ' (' . $event->getCurrentStep() . ')', ['app' => 'updater']); + } elseif ($event instanceof RepairFinishEvent) { + $log->info(get_class($event), ['app' => 'updater']); + } elseif ($event instanceof RepairStepEvent) { + $log->info(get_class($event).': Repair step: ' . $event->getStepName(), ['app' => 'updater']); + } elseif ($event instanceof RepairInfoEvent) { + $log->info(get_class($event).': Repair info: ' . $event->getMessage(), ['app' => 'updater']); + } elseif ($event instanceof RepairWarningEvent) { + $log->warning(get_class($event).': Repair warning: ' . $event->getMessage(), ['app' => 'updater']); + } elseif ($event instanceof RepairErrorEvent) { + $log->error(get_class($event).': Repair error: ' . $event->getMessage(), ['app' => 'updater']); } }; - $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(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); $this->listen('\OC\Updater', 'maintenanceEnabled', function () use ($log) { diff --git a/lib/private/legacy/OC_App.php b/lib/private/legacy/OC_App.php index cd53dc0afc4..a5eb26d0d4b 100644 --- a/lib/private/legacy/OC_App.php +++ b/lib/private/legacy/OC_App.php @@ -50,18 +50,19 @@ declare(strict_types=1); * along with this program. If not, see <http://www.gnu.org/licenses/> * */ +use OCP\AppFramework\QueryException; +use OCP\App\ManagerEvent; +use OCP\Authentication\IAlternativeLogin; +use OCP\ILogger; +use OCP\Settings\IManager as ISettingsManager; +use OC\AppFramework\Bootstrap\Coordinator; use OC\App\DependencyAnalyzer; use OC\App\Platform; -use OC\AppFramework\Bootstrap\Coordinator; use OC\DB\MigrationService; use OC\Installer; use OC\Repair; +use OC\Repair\Events\RepairErrorEvent; use OC\ServerNotAvailableException; -use OCP\App\ManagerEvent; -use OCP\AppFramework\QueryException; -use OCP\Authentication\IAlternativeLogin; -use OCP\ILogger; -use OCP\Settings\IManager as ISettingsManager; use Psr\Log\LoggerInterface; /** @@ -1047,7 +1048,7 @@ class OC_App { // load the app self::loadApp($appId); - $dispatcher = OC::$server->getEventDispatcher(); + $dispatcher = \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class); // load the steps $r = new Repair([], $dispatcher, \OC::$server->get(LoggerInterface::class)); @@ -1055,7 +1056,7 @@ class OC_App { try { $r->addStep($step); } catch (Exception $ex) { - $r->emit('\OC\Repair', 'error', ['message' => $ex->getMessage()]); + $dispatcher->dispatchTyped(new RepairErrorEvent($ex->getMessage())); \OC::$server->getLogger()->logException($ex); } } diff --git a/lib/public/Migration/IOutput.php b/lib/public/Migration/IOutput.php index 2dba50ab2c6..212b5d927f8 100644 --- a/lib/public/Migration/IOutput.php +++ b/lib/public/Migration/IOutput.php @@ -32,18 +32,21 @@ interface IOutput { /** * @param string $message + * @return void * @since 9.1.0 */ public function info($message); /** * @param string $message + * @return void * @since 9.1.0 */ public function warning($message); /** * @param int $max + * @return void * @since 9.1.0 */ public function startProgress($max = 0); @@ -51,12 +54,13 @@ interface IOutput { /** * @param int $step * @param string $description + * @return void * @since 9.1.0 */ public function advance($step = 1, $description = ''); /** - * @param int $max + * @return void * @since 9.1.0 */ public function finishProgress(); |