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:
Klaas Freitag 2016-10-12 14:50:10 +02:00
parent 27d23edacc
commit 3bef42db6b

View file

@ -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);