diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 919a74ae8..06efaf90b 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -117,6 +117,8 @@ void SelectiveSyncWidget::refreshFolders() job->setProperties(props); connect(job, &LsColJob::directoryListingSubfolders, this, &SelectiveSyncWidget::slotUpdateDirectories); + connect(job, &LsColJob::directoryListingSubfolders, + this, &SelectiveSyncWidget::slotUpdateRootFolderFilesSize); connect(job, &LsColJob::finishedWithError, this, &SelectiveSyncWidget::slotLscolFinishedWithError); connect(job, &LsColJob::directoryListingIterated, @@ -288,6 +290,24 @@ void SelectiveSyncWidget::slotUpdateDirectories(QStringList list) root->setExpanded(true); } +void SelectiveSyncWidget::slotUpdateRootFolderFilesSize(const QStringList &subfolders) +{ + const auto job = qobject_cast(sender()); + + if (!job) { + qWarning() << "slotUpdateRootFolderFilesSize must have a valid sender"; + return; + } + + _rootFilesSize = 0; + + for (auto it = std::cbegin(job->_folderInfos); it != std::cend(job->_folderInfos); ++it) { + if (!subfolders.contains(it.key())) { + _rootFilesSize += it.value().size; + } + } +} + void SelectiveSyncWidget::slotLscolFinishedWithError(QNetworkReply *r) { if (r->error() == QNetworkReply::ContentNotFoundError) { @@ -454,7 +474,7 @@ qint64 SelectiveSyncWidget::estimatedSize(QTreeWidgetItem *root) // We did not load from the server so we have no idea how much we will sync from this branch return -1; } - return result; + return result + _rootFilesSize; } diff --git a/src/gui/selectivesyncdialog.h b/src/gui/selectivesyncdialog.h index 44e2c1ea6..d4ecd07e8 100644 --- a/src/gui/selectivesyncdialog.h +++ b/src/gui/selectivesyncdialog.h @@ -56,6 +56,7 @@ public: private slots: void slotUpdateDirectories(QStringList); + void slotUpdateRootFolderFilesSize(const QStringList &subfolders); void slotItemExpanded(QTreeWidgetItem *); void slotItemChanged(QTreeWidgetItem *, int); void slotLscolFinishedWithError(QNetworkReply *); @@ -81,6 +82,8 @@ private: ExcludedFiles _excludedFiles; QStringList _encryptedPaths; + + qint64 _rootFilesSize = 0; }; /**