Fix name collision while importing vaults or files

This commit is contained in:
brufdev
2025-01-21 02:14:01 +00:00
parent 47c89c256a
commit 52749ce4e5
2 changed files with 35 additions and 12 deletions

View File

@@ -27,15 +27,28 @@ class ProcessImportedFile
}
// Find new filename if it already exists
$node = $vault->nodes()
$nodeExists = $vault->nodes()
->where('parent_id', $parent->id)
->where('is_file', true)
->where('name', 'like', "$name%")
->where('name', 'like', "$name")
->where('extension', 'md')
->orderByDesc('name')
->first();
if (preg_match('/-(\d+)$/', $node->name, $matches) === 1) {
$name .= '-' . ((int) $matches[1] + 1);
->exists();
if ($nodeExists) {
$nodes = array_column(
$vault->nodes()
->select('name')
->where('parent_id', $parent->id)
->where('is_file', true)
->where('name', 'like', "$name-%")
->where('extension', 'md')
->get()
->toArray(),
'name',
);
natcasesort($nodes);
$name .= count($nodes) && preg_match('/-(\d+)$/', end($nodes), $matches) === 1 ?
'-' . ((int) $matches[1] + 1) :
'-1';
}
$node = $vault->nodes()->createQuietly([

View File

@@ -18,13 +18,23 @@ class ProcessImportedVault
$vaultName = pathinfo($fileName, PATHINFO_FILENAME);
// Find new vault name if it already exists
$vault = auth()->user()
$vaultExists = auth()
->user()
->vaults()
->where('name', 'like', "$vaultName%")
->orderByDesc('name')
->first();
if ($vault) {
$vaultName .= preg_match('/-(\d+)$/', $vault->name, $matches) === 1 ?
->where('name', 'like', "$vaultName")
->exists();
if ($vaultExists) {
$vaults = array_column(
auth()->user()
->vaults()
->select('name')
->where('name', 'like', "$vaultName-%")
->get()
->toArray(),
'name',
);
natcasesort($vaults);
$vaultName .= count($vaults) && preg_match('/-(\d+)$/', end($vaults), $matches) === 1 ?
'-' . ((int) $matches[1] + 1) :
'-1';
}