Skip to content

Commit

Permalink
handle errors when automated renaming for name rules is failing
Browse files Browse the repository at this point in the history
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
  • Loading branch information
mgallien committed Feb 19, 2025
1 parent 7f908be commit 24c9944
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
25 changes: 18 additions & 7 deletions src/libsync/discovery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -425,17 +425,23 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &ent
case CSYNC_FILE_EXCLUDE_TRAILING_SPACE:
item->_errorString = tr("Filename contains trailing spaces.");
item->_status = SyncFileItem::FileNameInvalid;
maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded);
if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) {
item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded."));
}
break;
case CSYNC_FILE_EXCLUDE_LEADING_SPACE:
item->_errorString = tr("Filename contains leading spaces.");
item->_status = SyncFileItem::FileNameInvalid;
maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded);
if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) {
item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded."));
}
break;
case CSYNC_FILE_EXCLUDE_LEADING_AND_TRAILING_SPACE:
item->_errorString = tr("Filename contains leading and trailing spaces.");
item->_status = SyncFileItem::FileNameInvalid;
maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded);
if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) {
item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded."));
}
break;
case CSYNC_FILE_EXCLUDE_LONG_FILENAME:
item->_errorString = tr("Filename is too long.");
Expand Down Expand Up @@ -475,7 +481,9 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &ent
}
item->_errorString = reasonString.isEmpty() ? errorString : QStringLiteral("%1 %2").arg(errorString, reasonString);
item->_status = SyncFileItem::FileNameInvalidOnServer;
maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded);
if (!maybeRenameForWindowsCompatibility(_discoveryData->_localDir + item->_file, excluded)) {
item->_errorString += QStringLiteral(" %1").arg(tr("Cannot be renamed or uploaded."));
}
break;
}
}
Expand Down Expand Up @@ -2283,12 +2291,14 @@ void ProcessDirectoryJob::setupDbPinStateActions(SyncJournalFileRecord &record)
}
}

void ProcessDirectoryJob::maybeRenameForWindowsCompatibility(const QString &absoluteFileName,
bool ProcessDirectoryJob::maybeRenameForWindowsCompatibility(const QString &absoluteFileName,
CSYNC_EXCLUDE_TYPE excludeReason)
{
auto result = true;

const auto leadingAndTrailingSpacesFilesAllowed = !_discoveryData->_shouldEnforceWindowsFileNameCompatibility || _discoveryData->_leadingAndTrailingSpacesFilesAllowed.contains(absoluteFileName);
if (leadingAndTrailingSpacesFilesAllowed) {
return;
return result;
}

const auto fileInfo = QFileInfo{absoluteFileName};
Expand All @@ -2312,10 +2322,11 @@ void ProcessDirectoryJob::maybeRenameForWindowsCompatibility(const QString &abso
case CSYNC_FILE_EXCLUDE_TRAILING_SPACE:
{
const auto renameTarget = QString{fileInfo.absolutePath() + QStringLiteral("/") + fileInfo.fileName().trimmed()};
FileSystem::rename(absoluteFileName, renameTarget);
result = FileSystem::rename(absoluteFileName, renameTarget);
break;
}
}
return result;
}

}
2 changes: 1 addition & 1 deletion src/libsync/discovery.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ class ProcessDirectoryJob : public QObject
*/
void setupDbPinStateActions(SyncJournalFileRecord &record);

void maybeRenameForWindowsCompatibility(const QString &absoluteFileName,
bool maybeRenameForWindowsCompatibility(const QString &absoluteFileName,
CSYNC_EXCLUDE_TYPE excludeReason);

qint64 _lastSyncTimestamp = 0;
Expand Down

0 comments on commit 24c9944

Please sign in to comment.