mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 08:16:43 -04:00
Move storage encoding compatibility warning logic
The encoding check for file names is now happening the Scanner, and an event will be emitted only if the storage doesn't contain the encoding compatibility wrapper. The event is listened to by the occ scan command to be able to display a warning in case of file name mismatches when they have NFD encoding. Signed-off-by: Vincent Petry <vincent@nextcloud.com>
This commit is contained in:
parent
787d7956cb
commit
2b4badf768
4 changed files with 15 additions and 32 deletions
|
|
@ -105,15 +105,6 @@ class Scan extends Base {
|
|||
);
|
||||
}
|
||||
|
||||
public function checkScanWarning($fullPath, OutputInterface $output) {
|
||||
$normalizedPath = basename(\OC\Files\Filesystem::normalizePath($fullPath));
|
||||
$path = basename($fullPath);
|
||||
|
||||
if ($normalizedPath !== $path) {
|
||||
$output->writeln("\t<error>Entry \"" . $fullPath . '" will not be accessible due to incompatible encoding</error>');
|
||||
}
|
||||
}
|
||||
|
||||
protected function scanFiles($user, $path, OutputInterface $output, $backgroundScan = false, $recursive = true, $homeOnly = false) {
|
||||
$connection = $this->reconnectToDatabase($output);
|
||||
$scanner = new \OC\Files\Utils\Scanner(
|
||||
|
|
@ -141,12 +132,8 @@ class Scan extends Base {
|
|||
$output->writeln('Error while scanning, storage not available (' . $e->getMessage() . ')', OutputInterface::VERBOSITY_VERBOSE);
|
||||
});
|
||||
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
|
||||
$this->checkScanWarning($path, $output);
|
||||
});
|
||||
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
|
||||
$this->checkScanWarning($path, $output);
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'normalizedNameMismatch', function ($fullPath) use ($output) {
|
||||
$output->writeln("\t<error>Entry \"" . $fullPath . '" will not be accessible due to incompatible encoding</error>');
|
||||
});
|
||||
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -73,15 +73,6 @@ class ScanAppData extends Base {
|
|||
$this->addArgument('folder', InputArgument::OPTIONAL, 'The appdata subfolder to scan', '');
|
||||
}
|
||||
|
||||
public function checkScanWarning($fullPath, OutputInterface $output) {
|
||||
$normalizedPath = basename(\OC\Files\Filesystem::normalizePath($fullPath));
|
||||
$path = basename($fullPath);
|
||||
|
||||
if ($normalizedPath !== $path) {
|
||||
$output->writeln("\t<error>Entry \"" . $fullPath . '" will not be accessible due to incompatible encoding</error>');
|
||||
}
|
||||
}
|
||||
|
||||
protected function scanFiles(OutputInterface $output, string $folder): int {
|
||||
try {
|
||||
$appData = $this->getAppDataFolder();
|
||||
|
|
@ -124,12 +115,8 @@ class ScanAppData extends Base {
|
|||
$output->writeln('Error while scanning, storage not available (' . $e->getMessage() . ')', OutputInterface::VERBOSITY_VERBOSE);
|
||||
});
|
||||
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
|
||||
$this->checkScanWarning($path, $output);
|
||||
});
|
||||
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
|
||||
$this->checkScanWarning($path, $output);
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'normalizedNameMismatch', function ($fullPath) use ($output) {
|
||||
$output->writeln("\t<error>Entry \"" . $fullPath . '" will not be accessible due to incompatible encoding</error>');
|
||||
});
|
||||
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ namespace OC\Files\Cache;
|
|||
|
||||
use Doctrine\DBAL\Exception;
|
||||
use OC\Files\Filesystem;
|
||||
use OC\Files\Storage\Wrapper\Encoding;
|
||||
use OC\Hooks\BasicEmitter;
|
||||
use OCP\Files\Cache\IScanner;
|
||||
use OCP\Files\ForbiddenException;
|
||||
|
|
@ -419,8 +420,13 @@ class Scanner extends BasicEmitter implements IScanner {
|
|||
if ($permissions === 0) {
|
||||
continue;
|
||||
}
|
||||
$file = $fileMeta['name'];
|
||||
$file = trim(\OC\Files\Filesystem::normalizePath($file), '/');
|
||||
$originalFile = $fileMeta['name'];
|
||||
$file = trim(\OC\Files\Filesystem::normalizePath($originalFile), '/');
|
||||
if (trim($originalFile, '/') !== $file && !$this->storage->instanceOfStorage(Encoding::class)) {
|
||||
// encoding mismatch, might require compatibility wrapper
|
||||
$this->emit('\OC\Files\Cache\Scanner', 'normalizedNameMismatch', [$path ? $path . '/' . $originalFile : $originalFile]);
|
||||
}
|
||||
|
||||
$newChildNames[] = $file;
|
||||
$child = $path ? $path . '/' . $file : $file;
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -145,6 +145,9 @@ class Scanner extends PublicEmitter {
|
|||
$this->emit('\OC\Files\Utils\Scanner', 'postScanFolder', [$mount->getMountPoint() . $path]);
|
||||
$this->dispatcher->dispatchTyped(new FolderScannedEvent($mount->getMountPoint() . $path));
|
||||
});
|
||||
$scanner->listen('\OC\Files\Cache\Scanner', 'normalizedNameMismatch', function ($path) use ($mount) {
|
||||
$this->emit('\OC\Files\Utils\Scanner', 'normalizedNameMismatch', [$path]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue