From 99293aec6986cd2a6e6022c5882a8f9de0335621 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 27 Mar 2017 11:50:25 +0200 Subject: Show folder sync status --- components/package/contents/ui/FolderListView.qml | 35 ++++++++++++++++++++--- framework/domain/folderlistmodel.cpp | 25 ++++++++++++---- framework/domain/folderlistmodel.h | 11 ++++++- 3 files changed, 60 insertions(+), 11 deletions(-) diff --git a/components/package/contents/ui/FolderListView.qml b/components/package/contents/ui/FolderListView.qml index a4d25e02..19fda843 100644 --- a/components/package/contents/ui/FolderListView.qml +++ b/components/package/contents/ui/FolderListView.qml @@ -148,16 +148,43 @@ Rectangle { } } - Text { + Row { anchors { verticalCenter: parent.verticalCenter left: parent.left - leftMargin: Kirigami.Units.smallSpacing } + Text { + anchors { + verticalCenter: parent.verticalCenter + leftMargin: Kirigami.Units.smallSpacing + } - text: styleData.value + text: styleData.value - color: Kirigami.Theme.viewBackgroundColor + color: Kirigami.Theme.viewBackgroundColor + } + ToolButton { + id: statusIcon + visible: false + iconName: "" + enabled: false + states: [ + State { + name: "busy"; when: model.status == KubeFramework.FolderListModel.InProgressStatus + PropertyChanges { target: statusIcon; iconName: "view-refresh"; visible: styleData.selected } + }, + State { + name: "error"; when: model.status == KubeFramework.FolderListModel.ErrorStatus + //The error status should only be visible for a moment, otherwise we'll eventually always show errors everywhere. + PropertyChanges { target: statusIcon; iconName: "emblem-error"; visible: styleData.selected } + }, + State { + name: "checkmark"; when: model.status == KubeFramework.FolderListModel.SuccessStatus + //The success status should only be visible for a moment, otherwise we'll eventually always show checkmarks everywhere. + PropertyChanges { target: statusIcon; iconName: "checkmark"; visible: styleData.selected } + } + ] + } } } diff --git a/framework/domain/folderlistmodel.cpp b/framework/domain/folderlistmodel.cpp index 3ce2cea3..14405beb 100644 --- a/framework/domain/folderlistmodel.cpp +++ b/framework/domain/folderlistmodel.cpp @@ -32,7 +32,7 @@ FolderListModel::FolderListModel(QObject *parent) : QSortFilterProxyModel() sort(0, Qt::AscendingOrder); Query query; - query.setFlags(Sink::Query::LiveQuery); + query.setFlags(Sink::Query::LiveQuery | Sink::Query::UpdateStatus); query.request().request().request().request(); query.requestTree(); query.setId("foldertree"); @@ -52,6 +52,7 @@ QHash< int, QByteArray > FolderListModel::roleNames() const roles[Icon] = "icon"; roles[Id] = "id"; roles[DomainObject] = "domainObject"; + roles[Status] = "status"; return roles; } @@ -59,15 +60,27 @@ QHash< int, QByteArray > FolderListModel::roleNames() const QVariant FolderListModel::data(const QModelIndex &idx, int role) const { auto srcIdx = mapToSource(idx); + auto folder = srcIdx.data(Sink::Store::DomainObjectRole).value(); switch (role) { case Name: - return srcIdx.sibling(srcIdx.row(), 0).data(Qt::DisplayRole).toString(); + return folder->getName(); case Icon: - return srcIdx.sibling(srcIdx.row(), 1).data(Qt::DisplayRole).toString(); + return folder->getIcon(); case Id: - return srcIdx.data(Store::DomainObjectBaseRole).value()->identifier(); + return folder->identifier(); case DomainObject: - return srcIdx.data(Store::DomainObjectRole); + return QVariant::fromValue(folder); + case Status: { + switch (srcIdx.data(Sink::Store::StatusRole).toInt()) { + case Sink::ApplicationDomain::SyncStatus::SyncInProgress: + return InProgressStatus; + case Sink::ApplicationDomain::SyncStatus::SyncError: + return ErrorStatus; + case Sink::ApplicationDomain::SyncStatus::SyncSuccess: + return SuccessStatus; + } + return NoStatus; + } } return QSortFilterProxyModel::data(idx, role); } @@ -85,7 +98,7 @@ void FolderListModel::setAccountId(const QVariant &accountId) //Get all folders of an account auto query = Query(); query.resourceFilter(account); - query.setFlags(Sink::Query::LiveQuery); + query.setFlags(Sink::Query::LiveQuery | Sink::Query::UpdateStatus); query.requestTree(); query.request() .request() diff --git a/framework/domain/folderlistmodel.h b/framework/domain/folderlistmodel.h index a2adc9a9..17645bb5 100644 --- a/framework/domain/folderlistmodel.h +++ b/framework/domain/folderlistmodel.h @@ -36,6 +36,14 @@ class FolderListModel : public QSortFilterProxyModel Q_PROPERTY (QVariant accountId READ accountId WRITE setAccountId) public: + enum Status { + NoStatus, + InProgressStatus, + ErrorStatus, + SuccessStatus, + }; + Q_ENUMS(Status) + FolderListModel(QObject *parent = Q_NULLPTR); ~FolderListModel(); @@ -45,7 +53,8 @@ public: Name = Qt::UserRole + 1, Icon, Id, - DomainObject + DomainObject, + Status }; Q_ENUMS(Roles) -- cgit v1.2.3