diff --git a/src/libsync/bulkpropagatordownloadjob.cpp b/src/libsync/bulkpropagatordownloadjob.cpp index 3d7e3009ad..35896f8e2c 100644 --- a/src/libsync/bulkpropagatordownloadjob.cpp +++ b/src/libsync/bulkpropagatordownloadjob.cpp @@ -183,7 +183,7 @@ bool BulkPropagatorDownloadJob::start() checkPropagationIsDone(); - return !_filesToDownload.empty(); + return false; } bool BulkPropagatorDownloadJob::updateMetadata(const SyncFileItemPtr &item) diff --git a/src/libsync/vfs/cfapi/cfapiwrapper.cpp b/src/libsync/vfs/cfapi/cfapiwrapper.cpp index ad3e7359b1..59dbbfb874 100644 --- a/src/libsync/vfs/cfapi/cfapiwrapper.cpp +++ b/src/libsync/vfs/cfapi/cfapiwrapper.cpp @@ -908,16 +908,23 @@ OCC::Result OCC::CfApiWrapper::createPlaceholderInfo(const QStrin OCC::Result OCC::CfApiWrapper::createPlaceholdersInfo(const QString &localBasePath, const QList &itemsInfo) { - const auto stdWStringBasePath = localBasePath.toStdWString(); - auto cloudEntry = std::make_unique(itemsInfo.size()); + auto filteredItemsInfo = QList{}; + filteredItemsInfo.reserve(itemsInfo.size()); - for(auto itemIndice = 0; itemIndice < itemsInfo.size(); ++itemIndice) { - const auto &placeholderInfo = itemsInfo[itemIndice]; - - if (placeholderInfo.modtime <= 0) { - return {QString{"Could not update metadata due to invalid modification time for %1: %2"}.arg(placeholderInfo.relativePath).arg(placeholderInfo.modtime)}; + std::copy_if(itemsInfo.begin(), itemsInfo.end(), std::back_inserter(filteredItemsInfo), [] (const auto &onePlaceholderInfo) -> bool { + if (onePlaceholderInfo.modtime <= 0) { + qCWarning(lcCfApiWrapper()) << "Skip invalid modtime file: " << onePlaceholderInfo.relativePath << "modtime:" << onePlaceholderInfo.modtime; + return false; } + return true; + }); + const auto stdWStringBasePath = localBasePath.toStdWString(); + auto cloudEntry = std::make_unique(filteredItemsInfo.size()); + + for(auto itemIndice = 0; itemIndice < filteredItemsInfo.size(); ++itemIndice) { + const auto &placeholderInfo = filteredItemsInfo[itemIndice]; + cloudEntry[itemIndice].FileIdentity = placeholderInfo.fileId.data(); cloudEntry[itemIndice].FileIdentityLength = static_cast(placeholderInfo.fileId.length()); @@ -935,29 +942,26 @@ OCC::Result OCC::CfApiWrapper::createPlaceholdersInfo(const QStri cloudEntry[itemIndice].FsMetadata.BasicInfo.FileAttributes = FILE_ATTRIBUTE_DIRECTORY; cloudEntry[itemIndice].FsMetadata.FileSize.QuadPart = 0; } - - qCDebug(lcCfApiWrapper) << "CfCreatePlaceholders" << stdWStringBasePath << placeholderInfo.platformNativeRelativePath << placeholderInfo.modtime << placeholderInfo.size; - qCDebug(lcCfApiWrapper) << QString::fromStdWString(cloudEntry[itemIndice].RelativeFileName); } auto numberOfCreatedPlaceholders = 0ul; - const qint64 result = CfCreatePlaceholders(stdWStringBasePath.data(), cloudEntry.get(), itemsInfo.size(), CF_CREATE_FLAG_NONE, &numberOfCreatedPlaceholders); + const qint64 result = CfCreatePlaceholders(stdWStringBasePath.data(), cloudEntry.get(), filteredItemsInfo.size(), CF_CREATE_FLAG_NONE, &numberOfCreatedPlaceholders); if (result != S_OK) { qCWarning(lcCfApiWrapper) << "Couldn't create placeholders info" << ":" << QString::fromWCharArray(_com_error(result).ErrorMessage()) << "number of placeholders created:" << numberOfCreatedPlaceholders; - for(auto itemIndice = 0; itemIndice < itemsInfo.size(); ++itemIndice) { + for(auto itemIndice = 0; itemIndice < filteredItemsInfo.size(); ++itemIndice) { qCDebug(lcCfApiWrapper) << QString::fromStdWString(cloudEntry[itemIndice].RelativeFileName) << QString::fromWCharArray(_com_error(cloudEntry[itemIndice].Result).ErrorMessage()); } return { "Couldn't create placeholder info" }; } - for(auto itemIndice = 0; itemIndice < itemsInfo.size(); ++itemIndice) { - const auto &placeholderInfo = itemsInfo[itemIndice]; - const auto parentInfo = findPlaceholderInfo(QDir::toNativeSeparators(QFileInfo(localBasePath + placeholderInfo.relativePath).absolutePath())); + for(auto itemIndice = 0; itemIndice < filteredItemsInfo.size(); ++itemIndice) { + const auto &placeholderInfo = filteredItemsInfo[itemIndice]; + const auto parentInfo = findPlaceholderInfo(QDir::toNativeSeparators(QFileInfo(localBasePath + QDir::separator() + placeholderInfo.relativePath).absolutePath())); const auto state = parentInfo && parentInfo->PinState == CF_PIN_STATE_UNPINNED ? CF_PIN_STATE_UNPINNED : CF_PIN_STATE_INHERIT; - if (!setPinState(placeholderInfo.relativePath, cfPinStateToPinState(state), NoRecurse)) { + if (!setPinState(QDir::toNativeSeparators(QFileInfo(localBasePath + QDir::separator() + placeholderInfo.relativePath).absoluteFilePath()), cfPinStateToPinState(state), NoRecurse)) { return { "Couldn't set the default inherit pin state" }; } }