From 4b1798f0cdf87361869e7cf2b341acacd056c410 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 5 Apr 2017 15:04:00 +0200 Subject: Moved cpp code into src directory --- framework/src/domain/identitiesmodel.cpp | 99 ++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 framework/src/domain/identitiesmodel.cpp (limited to 'framework/src/domain/identitiesmodel.cpp') diff --git a/framework/src/domain/identitiesmodel.cpp b/framework/src/domain/identitiesmodel.cpp new file mode 100644 index 00000000..0d97fc6a --- /dev/null +++ b/framework/src/domain/identitiesmodel.cpp @@ -0,0 +1,99 @@ +/* + Copyright (c) 2016 Christian Mollekopf + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. +*/ +#include "identitiesmodel.h" +#include +#include + +using namespace Sink; + +IdentitiesModel::IdentitiesModel(QObject *parent) : QIdentityProxyModel() +{ + Sink::Query query; + query.setFlags(Sink::Query::LiveQuery); + query.request() + .request() + .request(); + runQuery(query); +} + +IdentitiesModel::~IdentitiesModel() +{ + +} + +QHash< int, QByteArray > IdentitiesModel::roleNames() const +{ + QHash roles; + + roles[Name] = "name"; + roles[Username] = "username"; + roles[Address] = "address"; + roles[IdentityId] = "identityId"; + roles[AccountId] = "accountId"; + roles[AccountName] = "accountName"; + roles[AccountIcon] = "accountIcon"; + roles[DisplayName] = "displayName"; + + return roles; +} + +QVariant IdentitiesModel::data(const QModelIndex &idx, int role) const +{ + auto srcIdx = mapToSource(idx); + switch (role) { + case Name: + return srcIdx.data(Sink::Store::DomainObjectRole).value()->getName(); + case Username: + return srcIdx.data(Sink::Store::DomainObjectRole).value()->getName(); + case Address: + return srcIdx.data(Sink::Store::DomainObjectRole).value()->getAddress(); + case IdentityId: + return srcIdx.data(Sink::Store::DomainObjectRole).value()->identifier(); + case AccountId: + return srcIdx.data(Sink::Store::DomainObjectRole).value()->getAccount(); + case AccountName: { + const auto accountId = srcIdx.data(Sink::Store::DomainObjectRole).value()->getAccount(); + return mAccountNames.value(accountId); + } + case AccountIcon: { + const auto accountId = srcIdx.data(Sink::Store::DomainObjectRole).value()->getAccount(); + return mAccountIcons.value(accountId); + } + case DisplayName: { + return data(idx, AccountName).toString() + ": " + data(idx, Username).toString() + ", " + data(idx, Address).toString(); + } + } + return QIdentityProxyModel::data(idx, role); +} + +void IdentitiesModel::runQuery(const Sink::Query &query) +{ + using namespace Sink::ApplicationDomain; + mModel = Sink::Store::loadModel(query); + setSourceModel(mModel.data()); + + Sink::Store::fetchAll(Sink::Query{}.request().request()) + .then([this](const QList &accounts) { + for (const auto &account : accounts) { + mAccountNames.insert(account->identifier(), account->getName()); + mAccountIcons.insert(account->identifier(), account->getIcon()); + } + emit layoutChanged(); + }).exec(); +} -- cgit v1.2.3