mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Fix dehydration
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com> Signed-off-by: Hannah von Reth <h.vonreth@opencloud.eu>
This commit is contained in:
parent
a2fed5b08a
commit
b24ea4acf9
@ -179,7 +179,7 @@ public:
|
||||
* If the remote metadata changes, the local placeholder's metadata should possibly
|
||||
* change as well.
|
||||
*/
|
||||
[[nodiscard]] virtual Result<void, QString> updateMetadata(const QString &filePath, time_t modtime, qint64 size, const QByteArray &fileId) = 0;
|
||||
[[nodiscard]] virtual OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> updateMetadata(const SyncFileItem &syncItem, const QString &filePath, const QString &replacesFile) = 0;
|
||||
|
||||
[[nodiscard]] virtual Result<Vfs::ConvertToPlaceholderResult, QString> updatePlaceholderMarkInSync(const QString &filePath, const QByteArray &fileId) = 0;
|
||||
|
||||
@ -320,7 +320,7 @@ public:
|
||||
[[nodiscard]] bool socketApiPinStateActionsShown() const override { return false; }
|
||||
[[nodiscard]] bool isHydrating() const override { return false; }
|
||||
|
||||
Result<void, QString> updateMetadata(const QString &, time_t, qint64, const QByteArray &) override { return {}; }
|
||||
OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> updateMetadata(const SyncFileItem &, const QString &, const QString &) override { return {OCC::Vfs::ConvertToPlaceholderResult::Ok}; }
|
||||
Result<Vfs::ConvertToPlaceholderResult, QString> updatePlaceholderMarkInSync(const QString &filePath, const QByteArray &fileId) override {Q_UNUSED(filePath) Q_UNUSED(fileId) return {QString{}};}
|
||||
[[nodiscard]] bool isPlaceHolderInSync(const QString &filePath) const override { Q_UNUSED(filePath) return true; }
|
||||
Result<void, QString> createPlaceholder(const SyncFileItem &) override { return {}; }
|
||||
|
||||
@ -396,7 +396,7 @@ void OCC::SyncEngine::slotItemDiscovered(const OCC::SyncFileItemPtr &item)
|
||||
|
||||
// Update on-disk virtual file metadata
|
||||
if (modificationHappened && item->_type == ItemTypeVirtualFile) {
|
||||
auto r = _syncOptions._vfs->updateMetadata(filePath, item->_modtime, item->_size, item->_fileId);
|
||||
auto r = _syncOptions._vfs->updateMetadata(*item, filePath, {});
|
||||
if (!r) {
|
||||
item->_status = SyncFileItem::Status::NormalError;
|
||||
item->_instruction = CSYNC_INSTRUCTION_ERROR;
|
||||
|
||||
@ -327,7 +327,6 @@ OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> updatePlaceholderStat
|
||||
OCC::Utility::UnixTimeToLargeIntegerFiletime(modtime, &metadata.BasicInfo.LastAccessTime);
|
||||
OCC::Utility::UnixTimeToLargeIntegerFiletime(modtime, &metadata.BasicInfo.ChangeTime);
|
||||
|
||||
OCC::CfApiWrapper::setPinState(path, OCC::PinState::Unspecified, OCC::CfApiWrapper::SetPinRecurseMode::NoRecurse);
|
||||
|
||||
qCInfo(lcCfApiWrapper) << "updatePlaceholderState" << path << modtime;
|
||||
const qint64 result =
|
||||
|
||||
@ -177,19 +177,19 @@ bool VfsCfApi::isHydrating() const
|
||||
return !d->hydrationJobs.isEmpty();
|
||||
}
|
||||
|
||||
Result<void, QString> VfsCfApi::updateMetadata(const QString &filePath, time_t modtime, qint64 size, const QByteArray &fileId)
|
||||
OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> VfsCfApi::updateMetadata(const SyncFileItem &syncItem, const QString &filePath, const QString &replacesFile)
|
||||
{
|
||||
const auto localPath = QDir::toNativeSeparators(filePath);
|
||||
if (cfapi::handleForPath(localPath)) {
|
||||
auto result = cfapi::updatePlaceholderInfo(localPath, modtime, size, fileId);
|
||||
if (result) {
|
||||
return {};
|
||||
} else {
|
||||
return result.error();
|
||||
}
|
||||
const auto replacesPath = QDir::toNativeSeparators(replacesFile);
|
||||
|
||||
if (syncItem._type == ItemTypeVirtualFileDehydration) {
|
||||
return cfapi::dehydratePlaceholder(localPath, syncItem._modtime, syncItem._size, syncItem._fileId);
|
||||
} else {
|
||||
qCWarning(lcCfApi) << "Couldn't update metadata for non existing file" << localPath;
|
||||
return {QStringLiteral("Couldn't update metadata")};
|
||||
if (cfapi::findPlaceholderInfo(localPath)) {
|
||||
return cfapi::updatePlaceholderInfo(localPath, syncItem._modtime, syncItem._size, syncItem._fileId, replacesPath);
|
||||
} else {
|
||||
return cfapi::convertToPlaceholder(localPath, syncItem._modtime, syncItem._size, syncItem._fileId, replacesPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ public:
|
||||
bool socketApiPinStateActionsShown() const override;
|
||||
bool isHydrating() const override;
|
||||
|
||||
Result<void, QString> updateMetadata(const QString &filePath, time_t modtime, qint64 size, const QByteArray &fileId) override;
|
||||
OCC::Result<ConvertToPlaceholderResult, QString> updateMetadata(const SyncFileItem &syncItem, const QString &filePath, const QString &replacesFile) override;
|
||||
|
||||
Result<Vfs::ConvertToPlaceholderResult, QString> updatePlaceholderMarkInSync(const QString &filePath, const QByteArray &fileId) override;
|
||||
|
||||
|
||||
@ -66,15 +66,17 @@ bool VfsSuffix::isHydrating() const
|
||||
return false;
|
||||
}
|
||||
|
||||
Result<void, QString> VfsSuffix::updateMetadata(const QString &filePath, time_t modtime, qint64, const QByteArray &)
|
||||
OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> VfsSuffix::updateMetadata(const SyncFileItem &syncItem, const QString &filePath, const QString &replacesFile)
|
||||
{
|
||||
if (modtime <= 0) {
|
||||
Q_UNUSED(replacesFile)
|
||||
|
||||
if (syncItem._modtime <= 0) {
|
||||
return {tr("Error updating metadata due to invalid modification time")};
|
||||
}
|
||||
|
||||
qCDebug(lcVfsSuffix()) << "setModTime" << filePath << modtime;
|
||||
FileSystem::setModTime(filePath, modtime);
|
||||
return {};
|
||||
qCDebug(lcVfsSuffix()) << "setModTime" << filePath << syncItem._modtime;
|
||||
FileSystem::setModTime(filePath, syncItem._modtime);
|
||||
return {OCC::Vfs::ConvertToPlaceholderResult::Ok};
|
||||
}
|
||||
|
||||
Result<void, QString> VfsSuffix::createPlaceholder(const SyncFileItem &item)
|
||||
|
||||
@ -30,7 +30,7 @@ public:
|
||||
[[nodiscard]] bool socketApiPinStateActionsShown() const override { return true; }
|
||||
[[nodiscard]] bool isHydrating() const override;
|
||||
|
||||
Result<void, QString> updateMetadata(const QString &filePath, time_t modtime, qint64 size, const QByteArray &fileId) override;
|
||||
OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> updateMetadata(const SyncFileItem &syncItem, const QString &filePath, const QString &replacesFile) override;
|
||||
Result<Vfs::ConvertToPlaceholderResult, QString> updatePlaceholderMarkInSync(const QString &filePath, const QByteArray &fileId) override {Q_UNUSED(filePath) Q_UNUSED(fileId) return {QString{}};}
|
||||
[[nodiscard]] bool isPlaceHolderInSync(const QString &filePath) const override { Q_UNUSED(filePath) return true; }
|
||||
|
||||
|
||||
@ -60,15 +60,17 @@ bool VfsXAttr::isHydrating() const
|
||||
return false;
|
||||
}
|
||||
|
||||
Result<void, QString> VfsXAttr::updateMetadata(const QString &filePath, time_t modtime, qint64, const QByteArray &)
|
||||
OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> VfsXAttr::updateMetadata(const SyncFileItem &syncItem, const QString &filePath, const QString &replacesFile)
|
||||
{
|
||||
if (modtime <= 0) {
|
||||
Q_UNUSED(replacesFile)
|
||||
|
||||
if (syncItem._modtime <= 0) {
|
||||
return {tr("Error updating metadata due to invalid modification time")};
|
||||
}
|
||||
|
||||
qCDebug(lcVfsXAttr()) << "setModTime" << filePath << modtime;
|
||||
FileSystem::setModTime(filePath, modtime);
|
||||
return {};
|
||||
qCDebug(lcVfsXAttr()) << "setModTime" << filePath << syncItem._modtime;
|
||||
FileSystem::setModTime(filePath, syncItem._modtime);
|
||||
return {OCC::Vfs::ConvertToPlaceholderResult::Ok};
|
||||
}
|
||||
|
||||
Result<void, QString> VfsXAttr::createPlaceholder(const SyncFileItem &item)
|
||||
|
||||
@ -29,7 +29,7 @@ public:
|
||||
[[nodiscard]] bool socketApiPinStateActionsShown() const override;
|
||||
[[nodiscard]] bool isHydrating() const override;
|
||||
|
||||
Result<void, QString> updateMetadata(const QString &filePath, time_t modtime, qint64 size, const QByteArray &fileId) override;
|
||||
OCC::Result<OCC::Vfs::ConvertToPlaceholderResult, QString> updateMetadata(const SyncFileItem &syncItem, const QString &filePath, const QString &replacesFile) override;
|
||||
Result<Vfs::ConvertToPlaceholderResult, QString> updatePlaceholderMarkInSync(const QString &filePath, const QByteArray &fileId) override {Q_UNUSED(filePath) Q_UNUSED(fileId) return {QString{}};}
|
||||
[[nodiscard]] bool isPlaceHolderInSync(const QString &filePath) const override { Q_UNUSED(filePath) return true; }
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user