From a2fda0ad4fc013e4f9dd7d68ce2ec5385c1717ce Mon Sep 17 00:00:00 2001 From: Michael Bohlender Date: Thu, 5 Jan 2017 15:17:04 +0100 Subject: move accounts related files to seperate folder --- framework/accounts/accountfactory.cpp | 65 +++++++++++++++++++++++++++ framework/accounts/accountfactory.h | 51 ++++++++++++++++++++++ framework/accounts/accountsmodel.cpp | 82 +++++++++++++++++++++++++++++++++++ framework/accounts/accountsmodel.h | 56 ++++++++++++++++++++++++ 4 files changed, 254 insertions(+) create mode 100644 framework/accounts/accountfactory.cpp create mode 100644 framework/accounts/accountfactory.h create mode 100644 framework/accounts/accountsmodel.cpp create mode 100644 framework/accounts/accountsmodel.h (limited to 'framework/accounts') diff --git a/framework/accounts/accountfactory.cpp b/framework/accounts/accountfactory.cpp new file mode 100644 index 00000000..182a0a1d --- /dev/null +++ b/framework/accounts/accountfactory.cpp @@ -0,0 +1,65 @@ +/* + 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 "accountfactory.h" + +#include + +#include +#include +#include + +#include "settings/settings.h" +#include + +AccountFactory::AccountFactory(QObject *parent) + : QObject(parent) +{ +} + +QString AccountFactory::name() const +{ + if (mName.isEmpty()) { + return tr("Account"); + } + return mName; +} + +void AccountFactory::setAccountId(const QString &accountId) +{ + mAccountId = accountId; + Sink::Store::fetchOne(Sink::Query().filter(accountId.toUtf8())) + .syncThen([this](const Sink::ApplicationDomain::SinkAccount &account) { + mAccountType = account.getProperty("type").toByteArray(); + loadPackage(); + }).exec(); +} + +void AccountFactory::loadPackage() +{ + auto package = KPackage::PackageLoader::self()->loadPackage("KPackage/GenericQML", "org.kube.accounts." + mAccountType); + if (!package.isValid()) { + qWarning() << "Failed to load account package: " << "org.kube.accounts." + mAccountType; + return; + } + Q_ASSERT(package.isValid()); + mUiPath = package.filePath("mainscript"); + mName = package.metadata().name(); + mIcon = package.metadata().iconName(); + emit accountLoaded(); +} diff --git a/framework/accounts/accountfactory.h b/framework/accounts/accountfactory.h new file mode 100644 index 00000000..047454ae --- /dev/null +++ b/framework/accounts/accountfactory.h @@ -0,0 +1,51 @@ +/* + 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. +*/ + +#pragma once + +#include +#include + +/** + * A factory to instantiate accountp plugins. + */ +class AccountFactory : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString accountId MEMBER mAccountId WRITE setAccountId); + Q_PROPERTY(QString name MEMBER mName READ name NOTIFY accountLoaded); + Q_PROPERTY(QString icon MEMBER mIcon NOTIFY accountLoaded); + Q_PROPERTY(QString uiPath MEMBER mUiPath NOTIFY accountLoaded); +public: + explicit AccountFactory(QObject *parent = Q_NULLPTR); + + void setAccountId(const QString &); + QString name() const; + +signals: + void accountLoaded(); + +private: + void loadPackage(); + QString mAccountId; + QString mName; + QString mIcon; + QString mUiPath; + QByteArray mAccountType; +}; diff --git a/framework/accounts/accountsmodel.cpp b/framework/accounts/accountsmodel.cpp new file mode 100644 index 00000000..ea37784b --- /dev/null +++ b/framework/accounts/accountsmodel.cpp @@ -0,0 +1,82 @@ +/* + 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 "accountsmodel.h" +#include + +AccountsModel::AccountsModel(QObject *parent) : QIdentityProxyModel() +{ + Sink::Query query; + query.setFlags(Sink::Query::LiveQuery); + query.request(); + query.request(); + query.request(); + runQuery(query); +} + +AccountsModel::~AccountsModel() +{ + +} + +QHash< int, QByteArray > AccountsModel::roleNames() const +{ + QHash roles; + + roles[Name] = "name"; + roles[Icon] = "icon"; + roles[AccountId] = "accountId"; + roles[Status] = "status"; + roles[StatusIcon] = "statusIcon"; + roles[ShowStatus] = "showStatus"; + + return roles; +} + +QVariant AccountsModel::data(const QModelIndex &idx, int role) const +{ + auto srcIdx = mapToSource(idx); + auto account = srcIdx.data(Sink::Store::DomainObjectRole).value(); + switch (role) { + case Name: + return account->getName(); + case Icon: + return account->getIcon(); + case AccountId: + return account->identifier(); + case Status: + return account->getStatus(); + case StatusIcon: + if (account->getStatus() == Sink::ApplicationDomain::ErrorStatus) { + return "emblem-error"; + } else if (account->getStatus() == Sink::ApplicationDomain::BusyStatus) { + return "view-refresh"; + } else if (account->getStatus() == Sink::ApplicationDomain::ConnectedStatus) { + return "checkmark"; + } + case ShowStatus: + return (account->getStatus() != Sink::ApplicationDomain::OfflineStatus); + } + return QIdentityProxyModel::data(idx, role); +} + +void AccountsModel::runQuery(const Sink::Query &query) +{ + mModel = Sink::Store::loadModel(query); + setSourceModel(mModel.data()); +} diff --git a/framework/accounts/accountsmodel.h b/framework/accounts/accountsmodel.h new file mode 100644 index 00000000..e3c08cd4 --- /dev/null +++ b/framework/accounts/accountsmodel.h @@ -0,0 +1,56 @@ +/* + 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. +*/ + +#pragma once + +#include +#include +#include +#include + +namespace Sink { + class Query; +} + +class AccountsModel : public QIdentityProxyModel +{ + Q_OBJECT + +public: + AccountsModel(QObject *parent = Q_NULLPTR); + ~AccountsModel(); + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + + enum Roles { + Name = Qt::UserRole + 1, + Icon, + AccountId, + Status, + StatusIcon, + ShowStatus + }; + Q_ENUMS(Roles) + + QHash roleNames() const; + +private: + void runQuery(const Sink::Query &query); + QSharedPointer mModel; +}; -- cgit v1.2.3