diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml index 0374037d2d4..8fef23fb89a 100644 --- a/apps/theming/appinfo/info.xml +++ b/apps/theming/appinfo/info.xml @@ -29,11 +29,11 @@ + OCA\Theming\Migration\MigrateAdminConfig OCA\Theming\Migration\MigrateUserConfig OCA\Theming\Migration\InitBackgroundImagesMigration - OCA\Theming\Migration\CleanupOldCache diff --git a/apps/theming/lib/Migration/CleanupOldCache.php b/apps/theming/lib/Migration/CleanupOldCache.php deleted file mode 100644 index 2c3a3d8c94c..00000000000 --- a/apps/theming/lib/Migration/CleanupOldCache.php +++ /dev/null @@ -1,76 +0,0 @@ - - * - * @author Christopher Ng - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * 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 - * along with this program. If not, see . - * - */ - -namespace OCA\Theming\Migration; - -use OCP\Files\IAppData; -use OCP\Files\SimpleFS\ISimpleFolder; -use OCP\IL10N; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; -use Throwable; - -class CleanupOldCache implements IRepairStep { - private const CACHE_FOLDERS = [ - 'global', - 'users', - ]; - - private IAppData $appData; - private IL10N $l10n; - - public function __construct( - IAppData $appData, - IL10N $l10n - ) { - $this->appData = $appData; - $this->l10n = $l10n; - } - - public function getName(): string { - return $this->l10n->t('Cleanup old theming cache'); - } - - public function run(IOutput $output): void { - $folders = array_filter( - $this->appData->getDirectoryListing(), - fn (ISimpleFolder $folder): bool => !in_array($folder->getName(), static::CACHE_FOLDERS, true), - ); - - $output->startProgress(count($folders)); - - foreach ($folders as $folder) { - try { - $folder->delete(); - } catch (Throwable $e) { - $output->warning($this->l10n->t('Failed to delete folder: "%1$s", error: %2$s', [$folder->getName(), $e->getMessage()])); - } - $output->advance(); - } - - $output->finishProgress(); - } -} diff --git a/apps/theming/lib/Migration/MigrateAdminConfig.php b/apps/theming/lib/Migration/MigrateAdminConfig.php new file mode 100644 index 00000000000..392b014474e --- /dev/null +++ b/apps/theming/lib/Migration/MigrateAdminConfig.php @@ -0,0 +1,101 @@ + + * + * @author Christopher Ng + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see . + * + */ + +namespace OCA\Theming\Migration; + +use OCP\Files\IAppData; +use OCP\Files\NotFoundException; +use OCP\Files\SimpleFS\ISimpleFolder; +use OCP\IL10N; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; +use Throwable; + +class MigrateAdminConfig implements IRepairStep { + private IAppData $appData; + private IL10N $l10n; + + public function __construct( + IAppData $appData, + IL10N $l10n + ) { + $this->appData = $appData; + $this->l10n = $l10n; + } + + public function getName(): string { + return $this->l10n->t('Failed to clean up the old admin theming images folder'); + } + + public function run(IOutput $output): void { + $output->info('Migrating admin images'); + $this->migrateAdminImages($output); + $this->cleanupAdminImages($output); + } + + private function migrateAdminImages(IOutput $output): void { + try { + $images = $this->appData->getFolder('images'); + $output->info('Migrating admin images'); + + // get or init the global folder if any + try { + $global = $this->appData->getFolder('global'); + } catch (NotFoundException $e) { + $global = $this->appData->newFolder('global'); + } + + // get or init the new images folder if any + try { + $newImages = $global->getFolder('images'); + } catch (NotFoundException $e) { + $newImages = $global->newFolder('images'); + } + + $files = $images->getDirectoryListing(); + $output->startProgress(count($files)); + foreach($files as $file) { + $newImages->newFile($file->getName(), $file->getContent()); + $output->advance(); + } + + $output->finishProgress(); + } catch(NotFoundException $e) { + $output->info('No admin images to migrate'); + } + } + + + private function cleanupAdminImages(IOutput $output): void { + try { + $images = $this->appData->getFolder('images'); + $images->delete(); + } catch (NotFoundException $e) { + } catch (Throwable $e) { + $output->warning($this->l10n->t('Failed to cleanup the old admin image folder', [$e->getMessage()])); + } + } +}