summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-03-27 11:50:25 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-03-27 11:50:25 +0200
commit99293aec6986cd2a6e6022c5882a8f9de0335621 (patch)
treef4aafd9f9391e974c612a6fa67fa7f957a605c2f
parent5a5a8c11ed1b1a90452c4f7ed36650be36fbaa2c (diff)
downloadkube-99293aec6986cd2a6e6022c5882a8f9de0335621.tar.gz
kube-99293aec6986cd2a6e6022c5882a8f9de0335621.zip
Show folder sync status
-rw-r--r--components/package/contents/ui/FolderListView.qml35
-rw-r--r--framework/domain/folderlistmodel.cpp25
-rw-r--r--framework/domain/folderlistmodel.h11
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
59QVariant FolderListModel::data(const QModelIndex &idx, int role) const 60QVariant 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
38public: 38public:
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