diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-03-27 11:50:25 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-03-27 11:50:25 +0200 |
commit | 99293aec6986cd2a6e6022c5882a8f9de0335621 (patch) | |
tree | f4aafd9f9391e974c612a6fa67fa7f957a605c2f | |
parent | 5a5a8c11ed1b1a90452c4f7ed36650be36fbaa2c (diff) | |
download | kube-99293aec6986cd2a6e6022c5882a8f9de0335621.tar.gz kube-99293aec6986cd2a6e6022c5882a8f9de0335621.zip |
Show folder sync status
-rw-r--r-- | components/package/contents/ui/FolderListView.qml | 35 | ||||
-rw-r--r-- | framework/domain/folderlistmodel.cpp | 25 | ||||
-rw-r--r-- | 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 { | |||
148 | } | 148 | } |
149 | } | 149 | } |
150 | 150 | ||
151 | Text { | 151 | Row { |
152 | anchors { | 152 | anchors { |
153 | verticalCenter: parent.verticalCenter | 153 | verticalCenter: parent.verticalCenter |
154 | left: parent.left | 154 | left: parent.left |
155 | leftMargin: Kirigami.Units.smallSpacing | ||
156 | } | 155 | } |
156 | Text { | ||
157 | anchors { | ||
158 | verticalCenter: parent.verticalCenter | ||
159 | leftMargin: Kirigami.Units.smallSpacing | ||
160 | } | ||
157 | 161 | ||
158 | text: styleData.value | 162 | text: styleData.value |
159 | 163 | ||
160 | color: Kirigami.Theme.viewBackgroundColor | 164 | color: Kirigami.Theme.viewBackgroundColor |
165 | } | ||
166 | ToolButton { | ||
167 | id: statusIcon | ||
168 | visible: false | ||
169 | iconName: "" | ||
170 | enabled: false | ||
171 | states: [ | ||
172 | State { | ||
173 | name: "busy"; when: model.status == KubeFramework.FolderListModel.InProgressStatus | ||
174 | PropertyChanges { target: statusIcon; iconName: "view-refresh"; visible: styleData.selected } | ||
175 | }, | ||
176 | State { | ||
177 | name: "error"; when: model.status == KubeFramework.FolderListModel.ErrorStatus | ||
178 | //The error status should only be visible for a moment, otherwise we'll eventually always show errors everywhere. | ||
179 | PropertyChanges { target: statusIcon; iconName: "emblem-error"; visible: styleData.selected } | ||
180 | }, | ||
181 | State { | ||
182 | name: "checkmark"; when: model.status == KubeFramework.FolderListModel.SuccessStatus | ||
183 | //The success status should only be visible for a moment, otherwise we'll eventually always show checkmarks everywhere. | ||
184 | PropertyChanges { target: statusIcon; iconName: "checkmark"; visible: styleData.selected } | ||
185 | } | ||
186 | ] | ||
187 | } | ||
161 | } | 188 | } |
162 | } | 189 | } |
163 | 190 | ||
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() | |||
32 | sort(0, Qt::AscendingOrder); | 32 | sort(0, Qt::AscendingOrder); |
33 | 33 | ||
34 | Query query; | 34 | Query query; |
35 | query.setFlags(Sink::Query::LiveQuery); | 35 | query.setFlags(Sink::Query::LiveQuery | Sink::Query::UpdateStatus); |
36 | query.request<Folder::Name>().request<Folder::Icon>().request<Folder::Parent>().request<Folder::SpecialPurpose>(); | 36 | query.request<Folder::Name>().request<Folder::Icon>().request<Folder::Parent>().request<Folder::SpecialPurpose>(); |
37 | query.requestTree<Folder::Parent>(); | 37 | query.requestTree<Folder::Parent>(); |
38 | query.setId("foldertree"); | 38 | query.setId("foldertree"); |
@@ -52,6 +52,7 @@ QHash< int, QByteArray > FolderListModel::roleNames() const | |||
52 | roles[Icon] = "icon"; | 52 | roles[Icon] = "icon"; |
53 | roles[Id] = "id"; | 53 | roles[Id] = "id"; |
54 | roles[DomainObject] = "domainObject"; | 54 | roles[DomainObject] = "domainObject"; |
55 | roles[Status] = "status"; | ||
55 | 56 | ||
56 | return roles; | 57 | return roles; |
57 | } | 58 | } |
@@ -59,15 +60,27 @@ QHash< int, QByteArray > FolderListModel::roleNames() const | |||
59 | QVariant FolderListModel::data(const QModelIndex &idx, int role) const | 60 | QVariant FolderListModel::data(const QModelIndex &idx, int role) const |
60 | { | 61 | { |
61 | auto srcIdx = mapToSource(idx); | 62 | auto srcIdx = mapToSource(idx); |
63 | auto folder = srcIdx.data(Sink::Store::DomainObjectRole).value<Sink::ApplicationDomain::Folder::Ptr>(); | ||
62 | switch (role) { | 64 | switch (role) { |
63 | case Name: | 65 | case Name: |
64 | return srcIdx.sibling(srcIdx.row(), 0).data(Qt::DisplayRole).toString(); | 66 | return folder->getName(); |
65 | case Icon: | 67 | case Icon: |
66 | return srcIdx.sibling(srcIdx.row(), 1).data(Qt::DisplayRole).toString(); | 68 | return folder->getIcon(); |
67 | case Id: | 69 | case Id: |
68 | return srcIdx.data(Store::DomainObjectBaseRole).value<ApplicationDomainType::Ptr>()->identifier(); | 70 | return folder->identifier(); |
69 | case DomainObject: | 71 | case DomainObject: |
70 | return srcIdx.data(Store::DomainObjectRole); | 72 | return QVariant::fromValue(folder); |
73 | case Status: { | ||
74 | switch (srcIdx.data(Sink::Store::StatusRole).toInt()) { | ||
75 | case Sink::ApplicationDomain::SyncStatus::SyncInProgress: | ||
76 | return InProgressStatus; | ||
77 | case Sink::ApplicationDomain::SyncStatus::SyncError: | ||
78 | return ErrorStatus; | ||
79 | case Sink::ApplicationDomain::SyncStatus::SyncSuccess: | ||
80 | return SuccessStatus; | ||
81 | } | ||
82 | return NoStatus; | ||
83 | } | ||
71 | } | 84 | } |
72 | return QSortFilterProxyModel::data(idx, role); | 85 | return QSortFilterProxyModel::data(idx, role); |
73 | } | 86 | } |
@@ -85,7 +98,7 @@ void FolderListModel::setAccountId(const QVariant &accountId) | |||
85 | //Get all folders of an account | 98 | //Get all folders of an account |
86 | auto query = Query(); | 99 | auto query = Query(); |
87 | query.resourceFilter<SinkResource::Account>(account); | 100 | query.resourceFilter<SinkResource::Account>(account); |
88 | query.setFlags(Sink::Query::LiveQuery); | 101 | query.setFlags(Sink::Query::LiveQuery | Sink::Query::UpdateStatus); |
89 | query.requestTree<Folder::Parent>(); | 102 | query.requestTree<Folder::Parent>(); |
90 | query.request<Folder::Name>() | 103 | query.request<Folder::Name>() |
91 | .request<Folder::Icon>() | 104 | .request<Folder::Icon>() |
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 | |||
36 | Q_PROPERTY (QVariant accountId READ accountId WRITE setAccountId) | 36 | Q_PROPERTY (QVariant accountId READ accountId WRITE setAccountId) |
37 | 37 | ||
38 | public: | 38 | public: |
39 | enum Status { | ||
40 | NoStatus, | ||
41 | InProgressStatus, | ||
42 | ErrorStatus, | ||
43 | SuccessStatus, | ||
44 | }; | ||
45 | Q_ENUMS(Status) | ||
46 | |||
39 | FolderListModel(QObject *parent = Q_NULLPTR); | 47 | FolderListModel(QObject *parent = Q_NULLPTR); |
40 | ~FolderListModel(); | 48 | ~FolderListModel(); |
41 | 49 | ||
@@ -45,7 +53,8 @@ public: | |||
45 | Name = Qt::UserRole + 1, | 53 | Name = Qt::UserRole + 1, |
46 | Icon, | 54 | Icon, |
47 | Id, | 55 | Id, |
48 | DomainObject | 56 | DomainObject, |
57 | Status | ||
49 | }; | 58 | }; |
50 | Q_ENUMS(Roles) | 59 | Q_ENUMS(Roles) |
51 | 60 | ||