Skip to content

Commit b9d1af6

Browse files
committed
feat: backport cleanup command
Signed-off-by: Kent Delante <kent.delante@proton.me>
1 parent 21134b1 commit b9d1af6

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed

core/Command/Preview/Cleanup.php

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OC\Core\Command\Preview;
11+
12+
use OC\Core\Command\Base;
13+
use OCP\Files\Folder;
14+
use OCP\Files\IRootFolder;
15+
use OCP\Files\Node;
16+
use OCP\Files\NotFoundException;
17+
use OCP\Files\NotPermittedException;
18+
use Psr\Log\LoggerInterface;
19+
use Symfony\Component\Console\Input\InputInterface;
20+
use Symfony\Component\Console\Output\OutputInterface;
21+
22+
class Cleanup extends Base {
23+
24+
public function __construct(
25+
private IRootFolder $rootFolder,
26+
private LoggerInterface $logger,
27+
) {
28+
parent::__construct();
29+
}
30+
31+
protected function configure(): void {
32+
$this
33+
->setName('preview:cleanup')
34+
->setDescription('Removes existing preview files');
35+
}
36+
37+
protected function execute(InputInterface $input, OutputInterface $output): int {
38+
try {
39+
$rootFolderFilteredContents = array_filter($this->rootFolder->getDirectoryListing(), function(Node $file) {
40+
$appDataPosition = strpos($file->getName(), 'appdata');
41+
42+
return $appDataPosition !== false && $appDataPosition >= 0;
43+
});
44+
45+
if (count($rootFolderFilteredContents) === 0) {
46+
$this->logger->error("Previews can't be removed: appdata folder does not exist");
47+
$output->writeln("Previews can't be removed: appdata folder does not exist");
48+
return 1;
49+
}
50+
51+
$appDataFolder = $rootFolderFilteredContents[0];
52+
53+
if (!$appDataFolder instanceof Folder) {
54+
$this->logger->error("Previews can't be removed: appdata is not a folder");
55+
$output->writeln("Previews can't be removed: appdata is not a folder");
56+
return 1;
57+
}
58+
59+
/** @var Folder $previewFolder */
60+
$previewFolder = $appDataFolder->get('preview');
61+
} catch (NotFoundException $e) {
62+
$this->logger->error("Previews can't be removed: appdata folder can't be found", ['exception' => $e]);
63+
$output->writeln("Previews can't be removed: preview folder isn't deletable");
64+
return 1;
65+
}
66+
67+
if (!$previewFolder->isDeletable()) {
68+
$this->logger->error("Previews can't be removed: preview folder isn't deletable");
69+
$output->writeln("Previews can't be removed: preview folder isn't deletable");
70+
return 1;
71+
}
72+
73+
try {
74+
$previewFolder->delete();
75+
$this->logger->debug('Preview folder deleted');
76+
$output->writeln('Preview folder deleted', OutputInterface::VERBOSITY_VERBOSE);
77+
} catch (NotFoundException $e) {
78+
$output->writeln("Previews weren't deleted: preview folder was not found while deleting it");
79+
$this->logger->error("Previews weren't deleted: preview folder was not found while deleting it", ['exception' => $e]);
80+
return 1;
81+
} catch (NotPermittedException $e) {
82+
$output->writeln("Previews weren't deleted: you don't have the permission to delete preview folder");
83+
$this->logger->error("Previews weren't deleted: you don't have the permission to delete preview folder", ['exception' => $e]);
84+
return 1;
85+
}
86+
87+
try {
88+
$createdFolder = $appDataFolder->newFolder('preview');
89+
$this->logger->error('newly created appdata folder', ['folder' => $createdFolder->getPath()]);
90+
$this->logger->debug('Preview folder recreated');
91+
$output->writeln('Preview folder recreated', OutputInterface::VERBOSITY_VERBOSE);
92+
} catch (NotPermittedException $e) {
93+
$output->writeln("Preview folder was deleted, but you don't have the permission to create preview folder");
94+
$this->logger->error("Preview folder was deleted, but you don't have the permission to create preview folder", ['exception' => $e]);
95+
return 1;
96+
}
97+
98+
$output->writeln('Previews removed');
99+
return 0;
100+
}
101+
}

core/register_command.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@
144144
$application->add(Server::get(Command\Maintenance\Repair::class));
145145
$application->add(Server::get(Command\Maintenance\RepairShareOwnership::class));
146146

147+
$application->add(Server::get(Command\Preview\Cleanup::class));
147148
$application->add(Server::get(Command\Preview\Generate::class));
148149
$application->add(Server::get(Command\Preview\Repair::class));
149150
$application->add(Server::get(Command\Preview\ResetRenderedTexts::class));

lib/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,7 @@
11271127
'OC\\Core\\Command\\Maintenance\\RepairShareOwnership' => $baseDir . '/core/Command/Maintenance/RepairShareOwnership.php',
11281128
'OC\\Core\\Command\\Maintenance\\UpdateHtaccess' => $baseDir . '/core/Command/Maintenance/UpdateHtaccess.php',
11291129
'OC\\Core\\Command\\Maintenance\\UpdateTheme' => $baseDir . '/core/Command/Maintenance/UpdateTheme.php',
1130+
'OC\\Core\\Command\\Preview\\Cleanup' => $baseDir . '/core/Command/Preview/Cleanup.php',
11301131
'OC\\Core\\Command\\Preview\\Generate' => $baseDir . '/core/Command/Preview/Generate.php',
11311132
'OC\\Core\\Command\\Preview\\Repair' => $baseDir . '/core/Command/Preview/Repair.php',
11321133
'OC\\Core\\Command\\Preview\\ResetRenderedTexts' => $baseDir . '/core/Command/Preview/ResetRenderedTexts.php',

lib/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,6 +1160,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
11601160
'OC\\Core\\Command\\Maintenance\\RepairShareOwnership' => __DIR__ . '/../../..' . '/core/Command/Maintenance/RepairShareOwnership.php',
11611161
'OC\\Core\\Command\\Maintenance\\UpdateHtaccess' => __DIR__ . '/../../..' . '/core/Command/Maintenance/UpdateHtaccess.php',
11621162
'OC\\Core\\Command\\Maintenance\\UpdateTheme' => __DIR__ . '/../../..' . '/core/Command/Maintenance/UpdateTheme.php',
1163+
'OC\\Core\\Command\\Preview\\Cleanup' => __DIR__ . '/../../..' . '/core/Command/Preview/Cleanup.php',
11631164
'OC\\Core\\Command\\Preview\\Generate' => __DIR__ . '/../../..' . '/core/Command/Preview/Generate.php',
11641165
'OC\\Core\\Command\\Preview\\Repair' => __DIR__ . '/../../..' . '/core/Command/Preview/Repair.php',
11651166
'OC\\Core\\Command\\Preview\\ResetRenderedTexts' => __DIR__ . '/../../..' . '/core/Command/Preview/ResetRenderedTexts.php',

0 commit comments

Comments
 (0)