From 929ae965ce3ab01a39369e99d7ff15cc22567b61 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Thu, 15 Apr 2021 13:55:23 +0200 Subject: [PATCH 1/2] prevent progress bar to appear after a download is finished with CfApi when using Cloud Filter API with enabled VFS on Windows, a progress bar stays visible for some time after hydration is completed. Not updating a last time the progress bar prevents that. Signed-off-by: Matthieu Gallien --- src/libsync/vfs/cfapi/cfapiwrapper.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/libsync/vfs/cfapi/cfapiwrapper.cpp b/src/libsync/vfs/cfapi/cfapiwrapper.cpp index 904d6344bf..e44ec5e6d5 100644 --- a/src/libsync/vfs/cfapi/cfapiwrapper.cpp +++ b/src/libsync/vfs/cfapi/cfapiwrapper.cpp @@ -59,6 +59,11 @@ void cfApiSendTransferInfo(const CF_CONNECTION_KEY &connectionKey, const CF_TRAN qCCritical(lcCfApiWrapper) << "Couldn't send transfer info" << QString::number(transferKey.QuadPart, 16) << ":" << cfExecuteresult << QString::fromWCharArray(_com_error(cfExecuteresult).ErrorMessage()); } + const auto isDownloadFinished = ((offset + currentBlockLength) == totalLength); + if (isDownloadFinished) { + return; + } + // refresh Windows Copy Dialog progress LARGE_INTEGER progressTotal; progressTotal.QuadPart = totalLength; From 419bd93dea208470647569e960a0b2ca95d7d6f5 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Mon, 19 Apr 2021 15:06:40 +0200 Subject: [PATCH 2/2] when files get hydrated indirectly through pinning, sets correct state files that get downloaded not through an hydration request need to be converted to placeholder sets the expected state when converting them to placeholder files #3082 Signed-off-by: Matthieu Gallien --- src/libsync/vfs/cfapi/cfapiwrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsync/vfs/cfapi/cfapiwrapper.cpp b/src/libsync/vfs/cfapi/cfapiwrapper.cpp index e44ec5e6d5..6c890cc4a7 100644 --- a/src/libsync/vfs/cfapi/cfapiwrapper.cpp +++ b/src/libsync/vfs/cfapi/cfapiwrapper.cpp @@ -703,7 +703,7 @@ OCC::Result OCC::CfApiWrapper::convertToPlaceholder(const FileHan const auto fileIdentity = QString::fromUtf8(fileId).toStdWString(); const auto fileIdentitySize = (fileIdentity.length() + 1) * sizeof(wchar_t); - const qint64 result = CfConvertToPlaceholder(handle.get(), fileIdentity.data(), sizeToDWORD(fileIdentitySize), CF_CONVERT_FLAG_NONE, nullptr, nullptr); + const qint64 result = CfConvertToPlaceholder(handle.get(), fileIdentity.data(), sizeToDWORD(fileIdentitySize), CF_CONVERT_FLAG_MARK_IN_SYNC, nullptr, nullptr); Q_ASSERT(result == S_OK); if (result != S_OK) { qCCritical(lcCfApiWrapper) << "Couldn't convert to placeholder" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();