diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index 5a7495d21d..839d2ca92b 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -1280,6 +1280,8 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo( item->_size = localEntry.size; item->_modtime = localEntry.modtime; item->_type = localEntry.isDirectory ? ItemTypeDirectory : ItemTypeFile; + item->_quotaUsed = localEntry.isDirectory ? localEntry.quotaUsed : 0; + item->_quotaAvailable = localEntry.isDirectory ? localEntry.quotaAailable : 0; _childModified = true; } else if (dbEntry._modtime > 0 && (localEntry.modtime <= 0 || localEntry.modtime >= 0xFFFFFFFF) && dbEntry._fileSize == localEntry.size) { item->_instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; @@ -1288,6 +1290,8 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo( item->_modtime = dbEntry._modtime; item->_previousModtime = dbEntry._modtime; item->_type = localEntry.isDirectory ? ItemTypeDirectory : ItemTypeFile; + item->_quotaUsed = localEntry.isDirectory ? localEntry.quotaUsed : 0; + item->_quotaAvailable = localEntry.isDirectory ? localEntry.quotaAailable : 0; qCDebug(lcDisco) << "CSYNC_INSTRUCTION_SYNC: File" << item->_file << "if (dbEntry._modtime > 0 && localEntry.modtime <= 0)" << "dbEntry._modtime:" << dbEntry._modtime << "localEntry.modtime:" << localEntry.modtime; diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index 8c0a108188..89bc1d693a 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -409,6 +409,8 @@ void DiscoverySingleDirectoryJob::start() << "getlastmodified" << "getcontentlength" << "getetag" + << "quota-available-bytes" + << "quota-used-bytes" << "http://owncloud.org/ns:size" << "http://owncloud.org/ns:id" << "http://owncloud.org/ns:fileid" @@ -581,6 +583,14 @@ static void propertyMapToRemoteInfo(const QMap &map, RemotePer if (result.isDirectory && map.contains("size")) { result.sizeOfFolder = map.value("size").toInt(); } + + if (result.isDirectory && map.contains("quota-used-bytes")) { + result.quotaUsed = map.value("quota-used-bytes").toLongLong(); + } + + if (result.isDirectory && map.contains("quota-available-bytes")) { + result.quotaAvailable = map.value("quota-available-bytes").toLongLong(); + } } void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(const QString &file, const QMap &map) @@ -615,11 +625,23 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(const QString &fi if (map.contains("size")) { _size = map.value("size").toInt(); } + if (map.contains("quota-used-bytes")) { + _quotaUsed = map.value("quota-used-bytes").toLongLong(); + } + if (map.contains("quota-available-bytes")) { + _quotaAvailable = map.value("quota-available-bytes").toLongLong(); + } } else { RemoteInfo result; int slash = file.lastIndexOf('/'); result.name = file.mid(slash + 1); result.size = -1; + if (map.contains("quota-used-bytes")) { + result.quotaUsed = map.value("quota-used-bytes").toInt(); + } + if (map.contains("quota-available-bytes")) { + result.quotaAvailable = map.value("quota-available-bytes").toInt(); + } propertyMapToRemoteInfo(map, _account->serverHasMountRootProperty() ? RemotePermissions::MountedPermissionAlgorithm::UseMountRootProperty : RemotePermissions::MountedPermissionAlgorithm::WildGuessMountedSubProperty, result); diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h index a29937d1f0..af97539083 100644 --- a/src/libsync/discoveryphase.h +++ b/src/libsync/discoveryphase.h @@ -83,6 +83,9 @@ struct RemoteInfo bool isLivePhoto = false; QString livePhotoFile; + + int64_t quotaUsed = 0; + int64_t quotaAvailable = 0; }; struct LocalInfo @@ -101,6 +104,8 @@ struct LocalInfo bool isMetadataMissing = false; bool isPermissionsInvalid = false; [[nodiscard]] bool isValid() const { return !name.isNull(); } + int64_t quotaUsed = 0; + int64_t quotaAailable = 0; }; /** @@ -206,6 +211,9 @@ private: // store top level E2EE folder paths as they are used later when discovering nested folders QSet _topLevelE2eeFolderPaths; + int64_t _quotaUsed = 0; + int64_t _quotaAvailable = 0; + public: QByteArray _dataFingerprint; };