From dbe54083b583f9e72fb48c0d1b6e05641aa47d27 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Thu, 13 Apr 2023 13:39:22 -0100 Subject: [PATCH] convert old copies format Signed-off-by: Maxence Lange --- appinfo/info.xml | 6 ++ lib/Db/CacheDocumentsRequest.php | 37 ++++++++++ lib/Migration/RenameDocumentLocalCopy.php | 83 +++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 lib/Migration/RenameDocumentLocalCopy.php diff --git a/appinfo/info.xml b/appinfo/info.xml index 89e805dc..3254fd3d 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -43,6 +43,12 @@ OCA\Social\Cron\Queue + + + OCA\Social\Migration\RenameDocumentLocalCopy + + + OCA\Social\Command\AccountCreate OCA\Social\Command\AccountDelete diff --git a/lib/Db/CacheDocumentsRequest.php b/lib/Db/CacheDocumentsRequest.php index b16a3217..66449f2a 100644 --- a/lib/Db/CacheDocumentsRequest.php +++ b/lib/Db/CacheDocumentsRequest.php @@ -289,4 +289,41 @@ class CacheDocumentsRequest extends CacheDocumentsRequestBuilder { $qb->executeStatement(); } + + /** + * @return Document[] + * @deprecated in 0.7.x + */ + public function getOldFormatCopies(): array { + $qb = $this->getCacheDocumentsSelectSql(); + + $expr = $qb->expr(); + $qb->andWhere( + $expr->orX( + $expr->iLike('local_copy', $qb->createNamedParameter('%/%')), + $expr->iLike('resized_copy', $qb->createNamedParameter('%/%')) + ) + ); + + $documents = []; + $cursor = $qb->execute(); + while ($data = $cursor->fetch()) { + $documents[] = $this->parseCacheDocumentsSelectSql($data); + } + $cursor->closeCursor(); + + return $documents; + } + + /** + * @deprecated in 0.7.x + */ + public function updateCopies(Document $document): void { + $qb = $this->getCacheDocumentsUpdateSql(); + $qb->set('local_copy', $qb->createNamedParameter($document->getLocalCopy())) + ->set('resized_copy', $qb->createNamedParameter($document->getResizedCopy())); + + $qb->limitToIdPrim($qb->prim($document->getId())); + $qb->executeStatement(); + } } diff --git a/lib/Migration/RenameDocumentLocalCopy.php b/lib/Migration/RenameDocumentLocalCopy.php new file mode 100644 index 00000000..dd6150f6 --- /dev/null +++ b/lib/Migration/RenameDocumentLocalCopy.php @@ -0,0 +1,83 @@ + + * @copyright 2023, Maxence Lange + * @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\Social\Migration; + +use OCA\Social\Db\CacheDocumentsRequest; +use OCA\Social\Service\ConfigService; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +/** + * @deprecated in 0.7.x + */ +class RenameDocumentLocalCopy implements IRepairStep { + private ConfigService $configService; + private CacheDocumentsRequest $cacheDocumentsRequest; + + public function __construct( + ConfigService $configService, + CacheDocumentsRequest $cacheDocumentsRequest + ) { + $this->configService = $configService; + $this->cacheDocumentsRequest = $cacheDocumentsRequest; + } + + public function getName(): string { + return 'Rename document local/resized copies'; + } + + public function run(IOutput $output): void { + if ($this->configService->getAppValueInt('migration_rename_document_copy') === 1) { + return; + } + + $oldCopies = $this->cacheDocumentsRequest->getOldFormatCopies(); + + $output->startProgress(count($oldCopies)); + foreach ($oldCopies as $copy) { + $copy->setLocalCopy($this->reformat($copy->getLocalCopy())); + $copy->setResizedCopy($this->reformat($copy->getResizedCopy())); + $this->cacheDocumentsRequest->updateCopies($copy); + $output->advance(); + } + $output->finishProgress(); + + $this->configService->setAppValue('migration_rename_document_copy', '1'); + } + + private function reformat(string $old): string { + $pos = strrpos($old, '/'); + if (!$pos) { + return $old; + } + + return substr($old, $pos + 1); + } +}