mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-27 23:17:13 +03:00
folderman: checkPathValidityForNewFolder - correct file path comparison
It now checks based on the correct case sensitivity and also using the new method for filename comparison.
This commit is contained in:
parent
27d23edacc
commit
3bef42db6b
1 changed files with 14 additions and 9 deletions
|
@ -1193,6 +1193,10 @@ QString FolderMan::checkPathValidityForNewFolder(const QString& path, const QUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if the local directory isn't used yet in another ownCloud sync
|
// check if the local directory isn't used yet in another ownCloud sync
|
||||||
|
Qt::CaseSensitivity cs = Qt::CaseSensitive;
|
||||||
|
if( Utility::fsCasePreserving() ) {
|
||||||
|
cs = Qt::CaseInsensitive;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto i = _folderMap.constBegin(); i != _folderMap.constEnd(); ++i ) {
|
for (auto i = _folderMap.constBegin(); i != _folderMap.constEnd(); ++i ) {
|
||||||
Folder *f = static_cast<Folder*>(i.value());
|
Folder *f = static_cast<Folder*>(i.value());
|
||||||
|
@ -1200,13 +1204,13 @@ QString FolderMan::checkPathValidityForNewFolder(const QString& path, const QUrl
|
||||||
if( folderDir.isEmpty() ) {
|
if( folderDir.isEmpty() ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if( ! folderDir.endsWith(QLatin1Char('/')) ) folderDir.append(QLatin1Char('/'));
|
if( ! folderDir.endsWith(QLatin1Char('/'), cs) ) folderDir.append(QLatin1Char('/'));
|
||||||
|
|
||||||
const QString folderDirClean = QDir::cleanPath(folderDir)+'/';
|
const QString folderDirClean = QDir::cleanPath(folderDir)+'/';
|
||||||
const QString userDirClean = QDir::cleanPath(path)+'/';
|
const QString userDirClean = QDir::cleanPath(path)+'/';
|
||||||
bool differentPathes = QDir::cleanPath(folderDir) != QDir::cleanPath(path);
|
bool differentPathes = !Utility::fileNamesEqual(QDir::cleanPath(folderDir), QDir::cleanPath(path));
|
||||||
|
|
||||||
if (!forNewDirectory && differentPathes && folderDirClean.startsWith(userDirClean)) {
|
if (!forNewDirectory && differentPathes && folderDirClean.startsWith(userDirClean,cs)) {
|
||||||
return tr("The local folder %1 already contains a folder used in a folder sync connection. "
|
return tr("The local folder %1 already contains a folder used in a folder sync connection. "
|
||||||
"Please pick another one!")
|
"Please pick another one!")
|
||||||
.arg(QDir::toNativeSeparators(path));
|
.arg(QDir::toNativeSeparators(path));
|
||||||
|
@ -1214,22 +1218,23 @@ QString FolderMan::checkPathValidityForNewFolder(const QString& path, const QUrl
|
||||||
|
|
||||||
QString absCleanUserFolder = QDir::cleanPath(QDir(path).canonicalPath())+'/';
|
QString absCleanUserFolder = QDir::cleanPath(QDir(path).canonicalPath())+'/';
|
||||||
|
|
||||||
if ( (forNewDirectory || differentPathes) && userDirClean.startsWith( folderDirClean )) {
|
if ( (forNewDirectory || differentPathes) && userDirClean.startsWith( folderDirClean, cs )) {
|
||||||
return tr("The local folder %1 is already contained in a folder used in a folder sync connection. "
|
return tr("The local folder %1 is already contained in a folder used in a folder sync connection. "
|
||||||
"Please pick another one!")
|
"Please pick another one!")
|
||||||
.arg(QDir::toNativeSeparators(path));
|
.arg(QDir::toNativeSeparators(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (differentPathes && absCleanUserFolder.startsWith( folderDirClean ) &&
|
bool cleanUserEqualsCleanFolder = Utility::fileNamesEqual(absCleanUserFolder, folderDirClean );
|
||||||
absCleanUserFolder != folderDirClean ) {
|
if (differentPathes && absCleanUserFolder.startsWith( folderDirClean, cs ) &&
|
||||||
|
! cleanUserEqualsCleanFolder ) {
|
||||||
return tr("The local folder %1 is a symbolic link. "
|
return tr("The local folder %1 is a symbolic link. "
|
||||||
"The link target is already contained in a folder used in a folder sync connection. "
|
"The link target is already contained in a folder used in a folder sync connection. "
|
||||||
"Please pick another one!")
|
"Please pick another one!")
|
||||||
.arg(QDir::toNativeSeparators(path));
|
.arg(QDir::toNativeSeparators(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (differentPathes && folderDirClean.startsWith(absCleanUserFolder) &&
|
if (differentPathes && folderDirClean.startsWith(absCleanUserFolder, cs) &&
|
||||||
absCleanUserFolder != folderDirClean && !forNewDirectory ) {
|
!cleanUserEqualsCleanFolder && !forNewDirectory ) {
|
||||||
return tr("The local folder %1 contains a symbolic link. "
|
return tr("The local folder %1 contains a symbolic link. "
|
||||||
"The link target contains an already synced folder "
|
"The link target contains an already synced folder "
|
||||||
"Please pick another one!")
|
"Please pick another one!")
|
||||||
|
@ -1237,7 +1242,7 @@ QString FolderMan::checkPathValidityForNewFolder(const QString& path, const QUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if( serverUrl.isValid() && absCleanUserFolder == folderDir ) {
|
if( serverUrl.isValid() && Utility::fileNamesEqual(absCleanUserFolder,folderDir ) ) {
|
||||||
QUrl folderUrl = f->accountState()->account()->url();
|
QUrl folderUrl = f->accountState()->account()->url();
|
||||||
QString user = f->accountState()->account()->credentials()->user();
|
QString user = f->accountState()->account()->credentials()->user();
|
||||||
folderUrl.setUserName(user);
|
folderUrl.setUserName(user);
|
||||||
|
|
Loading…
Reference in a new issue