From e1f94cea4f727e358e2c0bcba9b8a6c2315c7635 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 2 Jun 2015 20:15:16 +0200 Subject: [PATCH] FolderStatusModel: handle network error in the LSCol --- src/gui/folderstatusmodel.cpp | 23 +++++++++++++++++++++-- src/gui/folderstatusmodel.h | 2 ++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index 3cb2ac3e78..69aecf5cbb 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -352,14 +352,18 @@ bool FolderStatusModel::canFetchMore(const QModelIndex& parent) const void FolderStatusModel::fetchMore(const QModelIndex& parent) { auto info = infoForIndex(parent); + if (!info || info->_fetched || info->_fetching) return; info->_fetching = true; LsColJob *job = new LsColJob(_account, info->_folder->remotePath() + "/" + info->_path, this); job->setProperties(QList() << "resourcetype" << "quota-used-bytes"); + job->setTimeout(5 * 1000); connect(job, SIGNAL(directoryListingSubfolders(QStringList)), SLOT(slotUpdateDirectories(QStringList))); + connect(job, SIGNAL(finishedWithError(QNetworkReply*)), + this, SLOT(slotLscolFinishedWithError(QNetworkReply*))); job->start(); job->setProperty(propertyParentIndexC , QVariant::fromValue(parent)); } @@ -421,15 +425,30 @@ void FolderStatusModel::slotUpdateDirectories(const QStringList &list_) endInsertRows(); } -/*void SelectiveSyncTreeView::slotLscolFinishedWithError(QNetworkReply *r) +void FolderStatusModel::slotLscolFinishedWithError(QNetworkReply* r) { +/* if (r->error() == QNetworkReply::ContentNotFoundError) { _loading->setText(tr("No subfolders currently on the server.")); } else { _loading->setText(tr("An error occured while loading the list of sub folders.")); } _loading->resize(_loading->sizeHint()); // because it's not in a layout -}*/ +*/ + auto job = qobject_cast(sender()); + Q_ASSERT(job); + QModelIndex idx = qvariant_cast(job->property(propertyParentIndexC)); + if (!idx.isValid()) { + return; + } + auto parentInfo = infoForIndex(idx); + if (parentInfo) { + parentInfo->_fetching = false; + if (r->error() == QNetworkReply::ContentNotFoundError) { + parentInfo->_fetched = true; + } + } +} QStringList FolderStatusModel::createBlackList(FolderStatusModel::SubFolderInfo *root, const QStringList &oldBlackList) const diff --git a/src/gui/folderstatusmodel.h b/src/gui/folderstatusmodel.h index 2d8f713c42..8989fc93fd 100644 --- a/src/gui/folderstatusmodel.h +++ b/src/gui/folderstatusmodel.h @@ -19,6 +19,7 @@ #include #include +class QNetworkReply; namespace OCC { class Folder; @@ -85,6 +86,7 @@ private slots: void slotUpdateDirectories(const QStringList &); void slotHideProgress(); void slotFolderSyncStateChange(); + void slotLscolFinishedWithError(QNetworkReply *r); private: QStringList createBlackList(OCC::FolderStatusModel::SubFolderInfo* root,