summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2023-04-13 13:39:22 -0100
committerMaxence Lange <maxence@artificial-owl.com>2023-04-13 13:39:37 -0100
commitdbe54083b583f9e72fb48c0d1b6e05641aa47d27 (patch)
tree9c8a3f708b2f88f95bbe9c61f04016c6be0fd821
parent5533ddeec9246426477a0ee6f7b6ab77ba99b14f (diff)
convert old copies format
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
-rw-r--r--appinfo/info.xml6
-rw-r--r--lib/Db/CacheDocumentsRequest.php37
-rw-r--r--lib/Migration/RenameDocumentLocalCopy.php83
3 files changed, 126 insertions, 0 deletions
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 @@
<job>OCA\Social\Cron\Queue</job>
</background-jobs>
+ <repair-steps>
+ <post-migration>
+ <step>OCA\Social\Migration\RenameDocumentLocalCopy</step>
+ </post-migration>
+ </repair-steps>
+
<commands>
<command>OCA\Social\Command\AccountCreate</command>
<command>OCA\Social\Command\AccountDelete</command>
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 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * Nextcloud - Social Support
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2023, Maxence Lange <maxence@artificial-owl.com>
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+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);
+ }
+}