diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,8 +51,8 @@ endif() find_package(Qt5 5.6 REQUIRED - COMPONENTS Core DBus Widgets Svg Sql Xml Test PrintSupport - OPTIONAL_COMPONENTS Concurrent QuickWidgets) + COMPONENTS Core DBus Widgets Svg Xml Test PrintSupport + OPTIONAL_COMPONENTS Sql Concurrent QuickWidgets) find_package(KF5 5.2 REQUIRED COMPONENTS Archive CoreAddons Config ConfigWidgets I18n Completion KCMUtils ItemModels ItemViews Service Wallet IconThemes XmlGui TextWidgets Notifications KIO @@ -141,6 +141,11 @@ add_feature_info("SQL Storage" ENABLE_SQLSTORAGE "It allows storing your financial data in SQL database (note: no encryption yet supported).") +cmake_dependent_option(ENABLE_IBANBICDATA "Enable IBAN/BIC data support." OFF + "Qt5Sql_FOUND" OFF) + +add_feature_info("IBAN/BIC data" ENABLE_IBANBICDATA "Adds predefined IBAN/BIC numbers to KMyMoney (note: doesn't work yet).") + # check for optional QWebEngine option(ENABLE_WEBENGINE "Enable QWebEngine" OFF) if(ENABLE_WEBENGINE) diff --git a/kmymoney/kmymoney.cpp b/kmymoney/kmymoney.cpp --- a/kmymoney/kmymoney.cpp +++ b/kmymoney/kmymoney.cpp @@ -151,6 +151,7 @@ #include "plugins/interfaceloader.h" #include "plugins/onlinepluginextended.h" #include "pluginloader.h" +#include "kmymoneyplugin.h" #include "tasks/credittransfer.h" @@ -269,11 +270,6 @@ /** the configuration object of the application */ KSharedConfigPtr m_config; - /** - * @brief Structure of plugins objects by their interfaces - */ - KMyMoneyPlugin::Container m_plugins; - /** * The following variable represents the state while crafting a backup. * It can have the following values @@ -833,7 +829,7 @@ m_fileType = KMyMoneyApp::KmmXML; } else if (gncexp.indexIn(txt) != -1) { - for (const auto& plugin : m_plugins.storage) { + for (const auto& plugin : pPlugins.storage) { if (plugin->formatName().compare(QLatin1String("GNC")) == 0) { pReader = plugin->reader(); break; @@ -900,7 +896,7 @@ auto rc = false; auto pluginFound = false; - for (const auto& plugin : m_plugins.storage) { + for (const auto& plugin : pPlugins.storage) { if (plugin->formatName().compare(QLatin1String("SQL")) == 0) { rc = plugin->open(pStorage, url); pluginFound = true; @@ -978,7 +974,7 @@ if (url.scheme() == QLatin1String("sql")) { rc = false; auto pluginFound = false; - for (const auto& plugin : m_plugins.storage) { + for (const auto& plugin : pPlugins.storage) { if (plugin->formatName().compare(QLatin1String("SQL")) == 0) { rc = plugin->save(url); pluginFound = true; @@ -1700,10 +1696,10 @@ // now initialize the plugin structure createInterfaces(); - KMyMoneyPlugin::pluginHandling(KMyMoneyPlugin::Action::Load, d->m_plugins, this, guiFactory()); - onlineJobAdministration::instance()->setOnlinePlugins(d->m_plugins.extended); - d->m_myMoneyView->setOnlinePlugins(d->m_plugins.online); - d->m_myMoneyView->setStoragePlugins(d->m_plugins.storage); + KMyMoneyPlugin::pluginHandling(KMyMoneyPlugin::Action::Load, pPlugins, this, guiFactory()); + onlineJobAdministration::instance()->setOnlinePlugins(pPlugins.extended); + d->m_myMoneyView->setOnlinePlugins(pPlugins.online); + d->m_myMoneyView->setStoragePlugins(pPlugins.storage); setCentralWidget(frame); @@ -1750,7 +1746,7 @@ onlineJobAdministration::instance()->clearCaches(); // we need to unload all plugins before we destroy anything else - KMyMoneyPlugin::pluginHandling(KMyMoneyPlugin::Action::Unload, d->m_plugins, this, guiFactory()); + KMyMoneyPlugin::pluginHandling(KMyMoneyPlugin::Action::Unload, pPlugins, this, guiFactory()); d->removeStorage(); #ifdef KF5Holidays_FOUND @@ -2519,7 +2515,7 @@ fileExtensions.append(i18n("KMyMoney files (*.kmy *.xml)")); fileExtensions.append(QLatin1String(";;")); - for (const auto& plugin : d->m_plugins.storage) { + for (const auto& plugin : pPlugins.storage) { const auto fileExtension = plugin->fileExtension(); if (!fileExtension.isEmpty()) { fileExtensions.append(fileExtension); @@ -2543,8 +2539,8 @@ bool result = false; // Iterate through the plugins and see if there's a loaded plugin who can handle it - QMap::const_iterator it_plugin = d->m_plugins.importer.constBegin(); - while (it_plugin != d->m_plugins.importer.constEnd()) { + QMap::const_iterator it_plugin = pPlugins.importer.constBegin(); + while (it_plugin != pPlugins.importer.constEnd()) { if ((*it_plugin)->isMyFormat(url.path())) { result = true; break; @@ -2555,7 +2551,7 @@ // If we did not find a match, try importing it as a KMM statement file, // which is really just for testing. the statement file is not exposed // to users. - if (it_plugin == d->m_plugins.importer.constEnd()) + if (it_plugin == pPlugins.importer.constEnd()) if (MyMoneyStatement::isStatementFile(url.path())) result = true; @@ -2658,7 +2654,7 @@ setEnabled(false); if (isDatabase()) { auto pluginFound = false; - for (const auto& plugin : d->m_plugins.storage) { + for (const auto& plugin : pPlugins.storage) { if (plugin->formatName().compare(QLatin1String("SQL")) == 0) { rc = plugin->save(d->m_fileName); pluginFound = true; @@ -3082,11 +3078,11 @@ void KMyMoneyApp::slotUpdateConfiguration(const QString &dialogName) { if(dialogName.compare(QLatin1String("Plugins")) == 0) { - KMyMoneyPlugin::pluginHandling(KMyMoneyPlugin::Action::Reorganize, d->m_plugins, this, guiFactory()); + KMyMoneyPlugin::pluginHandling(KMyMoneyPlugin::Action::Reorganize, pPlugins, this, guiFactory()); onlineJobAdministration::instance()->updateActions(); - onlineJobAdministration::instance()->setOnlinePlugins(d->m_plugins.extended); - d->m_myMoneyView->setOnlinePlugins(d->m_plugins.online); - d->m_myMoneyView->setStoragePlugins(d->m_plugins.storage); + onlineJobAdministration::instance()->setOnlinePlugins(pPlugins.extended); + d->m_myMoneyView->setOnlinePlugins(pPlugins.online); + d->m_myMoneyView->setStoragePlugins(pPlugins.storage); return; } MyMoneyTransactionFilter::setFiscalYearStart(KMyMoneySettings::firstFiscalMonth(), KMyMoneySettings::firstFiscalDay()); @@ -4103,8 +4099,8 @@ // remove the statement files d->unlinkStatementXML(); - QMap::const_iterator it_plugin = d->m_plugins.importer.constBegin(); - while (it_plugin != d->m_plugins.importer.constEnd()) { + QMap::const_iterator it_plugin = pPlugins.importer.constBegin(); + while (it_plugin != pPlugins.importer.constEnd()) { if ((*it_plugin)->isMyFormat(url)) { QList statements; if (!(*it_plugin)->import(url)) { @@ -4119,7 +4115,7 @@ // If we did not find a match, try importing it as a KMM statement file, // which is really just for testing. the statement file is not exposed // to users. - if (it_plugin == d->m_plugins.importer.constEnd()) + if (it_plugin == pPlugins.importer.constEnd()) if (MyMoneyStatement::isStatementFile(url)) MyMoneyStatementReader::importStatement(url, false, &progressCallback); diff --git a/kmymoney/mymoney/CMakeLists.txt b/kmymoney/mymoney/CMakeLists.txt --- a/kmymoney/mymoney/CMakeLists.txt +++ b/kmymoney/mymoney/CMakeLists.txt @@ -36,19 +36,29 @@ ./storage/mymoneystoragexml.cpp ./storage/mymoneystoragemgr.cpp ./storage/mymoneystorageanon.cpp - ./storage/kmymoneystorageplugin.cpp ./storage/mymoneystoragenames.cpp ) set(onlineTask_a_SOURCES ./onlinetasks/sepa/sepaonlinetransferimpl.cpp ./onlinetasks/sepa/sepaonlinetransfer.cpp + ./onlinetasks/unavailabletask/tasks/unavailabletask.cpp + ) + + # NOTE: this payeeIdentifier and its cmake file cannot be used as a template + # This payeeIdentifier must be linked with payeeIdentifierLoader because it + # is a fallback if something failed during loading of plugins (for xml files only) + set(payeeidentifier_a_SOURCES + ./payeeidentifier/ibanbic/ibanbic.cpp + ./payeeidentifier/nationalaccount/nationalaccount.cpp + ./payeeidentifier/unavailableplugin/unavailableplugin.cpp ) list(APPEND storage_a_SOURCES $<$,$,$>: ./storage/mymoneystoragedump.cpp>) list(APPEND kmm_mymoney_LIB_SRCS ${storage_a_SOURCES}) list(APPEND kmm_mymoney_LIB_SRCS ${onlineTask_a_SOURCES}) +list(APPEND kmm_mymoney_LIB_SRCS ${payeeidentifier_a_SOURCES}) set(mymoney_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/kmm_mymoney_export.h mymoneyobject.h mymoneyaccount.h mymoneycategory.h mymoneyexception.h @@ -81,18 +91,16 @@ Qt5::Xml Qt5::Core Qt5::Gui - Qt5::Sql KF5::Service KF5::I18n Alkimia::alkimia kmm_payeeidentifier_loader kmm_payeeidentifier - payeeidentifier_iban_bic - payeeidentifier_nationalAccount + kmm_plugin # TODO: fix this KF5::XmlGui PRIVATE - onlinetask_unavailabletask + onlinetask_interfaces ) if(KMM_ADDRESSBOOK_FOUND) diff --git a/kmymoney/mymoney/mymoneyaccount.cpp b/kmymoney/mymoney/mymoneyaccount.cpp --- a/kmymoney/mymoney/mymoneyaccount.cpp +++ b/kmymoney/mymoney/mymoneyaccount.cpp @@ -49,7 +49,7 @@ #include "mymoneyinstitution.h" #include "mymoneypayee.h" #include "payeeidentifier/payeeidentifiertyped.h" -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include "payeeidentifier/nationalaccount/nationalaccount.h" #include "mymoneystoragenames.h" #include "icons/icons.h" diff --git a/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp b/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp --- a/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp +++ b/kmymoney/mymoney/mymoneypayeeidentifiercontainer.cpp @@ -20,6 +20,10 @@ #include #include "payeeidentifier/payeeidentifierloader.h" +#include "payeeidentifier/ibanbic/ibanbic.h" +#include "payeeidentifier/nationalaccount/nationalaccount.h" +#include "payeeidentifier/unavailableplugin/unavailableplugin.h" +#include "payeeidentifier.h" MyMoneyPayeeIdentifierContainer::MyMoneyPayeeIdentifierContainer() : m_payeeIdentifiers(QList< ::payeeIdentifier >()) @@ -91,7 +95,23 @@ const uint identifierNodesLength = identifierNodes.length(); for (uint i = 0; i < identifierNodesLength; ++i) { const QDomElement element = identifierNodes.item(i).toElement(); - ::payeeIdentifier ident = payeeIdentifierLoader::instance()->createPayeeIdentifierFromXML(element); + + const auto payeeIdentifierId = element.attribute("type"); + payeeIdentifierData* identData; + if (payeeIdentifierId == payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()) { + auto creator = new payeeIdentifiers::ibanBic(); + identData = creator->createFromXml(element); + delete creator; + } else if (payeeIdentifierId == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid()) { + auto creator = new payeeIdentifiers::nationalAccount(); + identData = creator->createFromXml(element); + delete creator; + } else { + identData = new payeeIdentifiers::payeeIdentifierUnavailable(element); + } + ::payeeIdentifier ident(identData); + ident.m_id = element.attribute("id", 0).toUInt(); + if (ident.isNull()) { qWarning() << "Could not load payee identifier" << element.attribute("type", "*no pidid set*"); continue; diff --git a/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransfer.h b/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransfer.h --- a/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransfer.h +++ b/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransfer.h @@ -22,7 +22,7 @@ #include "onlinetasks/interfaces/tasks/onlinetask.h" #include "onlinetasks/interfaces/tasks/credittransfer.h" #include "onlinetasks/interfaces/tasks/ionlinetasksettings.h" -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" /** * @brief SEPA Credit Transfer diff --git a/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransferimpl.cpp b/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransferimpl.cpp --- a/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransferimpl.cpp +++ b/kmymoney/mymoney/onlinetasks/sepa/sepaonlinetransferimpl.cpp @@ -27,7 +27,7 @@ #include "mymoney/onlinejobadministration.h" #include "misc/validators.h" #include "payeeidentifiertyped.h" -#include "ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include "sepaonlinetransfer.h" static const unsigned short defaultTextKey = 51; diff --git a/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.h b/kmymoney/mymoney/onlinetasks/unavailabletask/tasks/unavailabletask.h rename from kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.h rename to kmymoney/mymoney/onlinetasks/unavailabletask/tasks/unavailabletask.h diff --git a/kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.cpp b/kmymoney/mymoney/onlinetasks/unavailabletask/tasks/unavailabletask.cpp rename from kmymoney/plugins/onlinetasks/unavailabletask/tasks/unavailabletask.cpp rename to kmymoney/mymoney/onlinetasks/unavailabletask/tasks/unavailabletask.cpp diff --git a/kmymoney/mymoney/payeeidentifier/CMakeLists.txt b/kmymoney/mymoney/payeeidentifier/CMakeLists.txt --- a/kmymoney/mymoney/payeeidentifier/CMakeLists.txt +++ b/kmymoney/mymoney/payeeidentifier/CMakeLists.txt @@ -17,7 +17,6 @@ generate_export_header( kmm_payeeidentifier ) target_link_libraries( kmm_payeeidentifier - Qt5::Sql Qt5::Core Qt5::Xml ) @@ -35,20 +34,23 @@ payeeidentifierloader.cpp ) -add_library( kmm_payeeidentifier_loader STATIC +add_library( kmm_payeeidentifier_loader SHARED ${PAYEEIDENTIFIER_LOADER_SCRS} ) +generate_export_header(kmm_payeeidentifier_loader BASE_NAME kmm_payeeidentifier_loader) + target_link_libraries( kmm_payeeidentifier_loader - kmm_payeeidentifier - payeeidentifier_iban_bic - payeeidentifier_nationalAccount - payeeidentifier_unavailable - KF5::I18n - Qt5::Widgets - Qt5::Core + PUBLIC + Qt5::Core + PRIVATE + Qt5::Widgets + KF5::Service ) +install(TARGETS kmm_payeeidentifier_loader + ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) + if(BUILD_TESTING) add_subdirectory(tests) endif() diff --git a/kmymoney/payeeidentifier/ibanandbic/ibanbic.h b/kmymoney/mymoney/payeeidentifier/ibanbic/ibanbic.h rename from kmymoney/payeeidentifier/ibanandbic/ibanbic.h rename to kmymoney/mymoney/payeeidentifier/ibanbic/ibanbic.h --- a/kmymoney/payeeidentifier/ibanandbic/ibanbic.h +++ b/kmymoney/mymoney/payeeidentifier/ibanbic/ibanbic.h @@ -28,6 +28,8 @@ class ibanBicData; +namespace KMyMoneyPlugin { class DataPlugin; } + namespace payeeIdentifiers { /** @@ -137,9 +139,7 @@ * * Uses any available information to return an institutionName */ - QString institutionName() const { - return institutionNameByBic(bic()); - } + QString institutionName() const; bool operator==(const payeeIdentifierData& other) const final override; bool operator==(const ibanBic& other) const; @@ -249,8 +249,7 @@ QString m_ownerName; - static ::ibanBicData* getIbanBicData(); - static ::ibanBicData* m_ibanBicData; + static KMyMoneyPlugin::DataPlugin *getIbanBicData(); static QString canonizeBic(const QString& bic); }; diff --git a/kmymoney/payeeidentifier/ibanandbic/ibanbic.cpp b/kmymoney/mymoney/payeeidentifier/ibanbic/ibanbic.cpp rename from kmymoney/payeeidentifier/ibanandbic/ibanbic.cpp rename to kmymoney/mymoney/payeeidentifier/ibanbic/ibanbic.cpp --- a/kmymoney/payeeidentifier/ibanandbic/ibanbic.cpp +++ b/kmymoney/mymoney/payeeidentifier/ibanbic/ibanbic.cpp @@ -16,21 +16,21 @@ * along with this program. If not, see . */ -#include "ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include #include #include #include -#include "ibanbicdata.h" +#include "kmymoneyplugin.h" #include "mymoney/mymoneyexception.h" +#include "plugins/ibanbicdata/ibanbicdataenums.h" namespace payeeIdentifiers { -ibanBicData* ibanBic::m_ibanBicData = 0; const int ibanBic::ibanMaxLength = 30; ibanBic::ibanBic() @@ -117,21 +117,29 @@ return m_bic; } +QString ibanBic::institutionName() const { + if (const auto &plugin = getIbanBicData()) + return plugin->requestData(bic(), eIBANBIC::DataType::bankNameByBic).toString(); + return QString(); +} + QString ibanBic::fullBic() const { - if (m_bic.isNull()) { - return getIbanBicData()->iban2Bic(m_iban); - } + if (m_bic.isNull()) + if (const auto &plugin = getIbanBicData()) + return plugin->requestData(m_iban, eIBANBIC::DataType::iban2Bic).toString(); return fullStoredBic(); } QString ibanBic::bic() const { if (m_bic.isNull()) { - const QString bic = getIbanBicData()->iban2Bic(m_iban); - if (bic.length() == 11 && bic.endsWith(QLatin1String("XXX"))) - return bic.left(8); - return bic; + if (const auto &plugin = getIbanBicData()) { + auto bic = plugin->requestData(m_iban, eIBANBIC::DataType::iban2Bic).toString(); + if (bic.length() == 11 && bic.endsWith(QLatin1String("XXX"))) + return bic.left(8); + return bic; + } } return m_bic; } @@ -256,27 +264,37 @@ return false; } -ibanBicData* ibanBic::getIbanBicData() +KMyMoneyPlugin::DataPlugin *ibanBic::getIbanBicData() { - if (m_ibanBicData == 0) - m_ibanBicData = new ibanBicData; - Q_CHECK_PTR(m_ibanBicData); - return m_ibanBicData; + return pPlugins.data.value(QString::fromLatin1("ibanbicdata"), nullptr); } int ibanBic::ibanLengthByCountry(const QString& countryCode) { - return (getIbanBicData()->bbanLength(countryCode) + 4); + if (const auto &plugin = getIbanBicData()) + return (plugin->requestData(countryCode, eIBANBIC::DataType::bbanLength).toInt() + 4); + return int(); } QString ibanBic::bicByIban(const QString& iban) { - return getIbanBicData()->iban2Bic(iban); + if (const auto &plugin = getIbanBicData()) + return (plugin->requestData(iban, eIBANBIC::DataType::iban2Bic).toString()); + return QString(); +} + +QString ibanBic::localBankCodeByIban(const QString& iban) +{ + if (const auto &plugin = getIbanBicData()) + return (plugin->requestData(iban, eIBANBIC::DataType::extractBankIdentifier).toString()); + return QString(); } QString ibanBic::institutionNameByBic(const QString& bic) { - return getIbanBicData()->bankNameByBic(bic); + if (const auto &plugin = getIbanBicData()) + return (plugin->requestData(bic, eIBANBIC::DataType::bankNameByBic).toString()); + return QString(); } QString ibanBic::bicToFullFormat(QString bic) @@ -291,10 +309,13 @@ { Q_ASSERT(bic == bicToFullFormat(bic)); - switch (getIbanBicData()->isBicAllocated(bic)) { - case ibanBicData::bicAllocated: return bicAllocated; - case ibanBicData::bicNotAllocated: return bicNotAllocated; - case ibanBicData::bicAllocationUncertain: return bicAllocationUncertain; + if (const auto &plugin = getIbanBicData()) { + auto status = static_cast(plugin->requestData(bic, eIBANBIC::DataType::isBicAllocated).toInt()); + switch (status) { + case eIBANBIC::bicAllocationStatus::bicAllocated: return bicAllocated; + case eIBANBIC::bicAllocationStatus::bicNotAllocated: return bicNotAllocated; + case eIBANBIC::bicAllocationStatus::bicAllocationUncertain: return bicAllocationUncertain; + } } return bicAllocationUncertain; } diff --git a/kmymoney/payeeidentifier/nationalaccount/nationalaccount.h b/kmymoney/mymoney/payeeidentifier/nationalaccount/nationalaccount.h rename from kmymoney/payeeidentifier/nationalaccount/nationalaccount.h rename to kmymoney/mymoney/payeeidentifier/nationalaccount/nationalaccount.h diff --git a/kmymoney/payeeidentifier/nationalaccount/nationalaccount.cpp b/kmymoney/mymoney/payeeidentifier/nationalaccount/nationalaccount.cpp rename from kmymoney/payeeidentifier/nationalaccount/nationalaccount.cpp rename to kmymoney/mymoney/payeeidentifier/nationalaccount/nationalaccount.cpp --- a/kmymoney/payeeidentifier/nationalaccount/nationalaccount.cpp +++ b/kmymoney/mymoney/payeeidentifier/nationalaccount/nationalaccount.cpp @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -#include "nationalaccount.h" +#include "payeeidentifier/nationalaccount/nationalaccount.h" #include diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h --- a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.h @@ -18,26 +18,23 @@ #ifndef PAYEEIDENTIFIERLOADER_H #define PAYEEIDENTIFIERLOADER_H -#include "payeeidentifier.h" - -#include -#include +#include "kmm_payeeidentifier_loader_export.h" class QAbstractItemDelegate; +class QString; +class QObject; +class QStringList; /** * * @todo Load delegates dynamically */ -class payeeIdentifierLoader +class KMM_PAYEEIDENTIFIER_LOADER_EXPORT payeeIdentifierLoader { public: payeeIdentifierLoader(); ~payeeIdentifierLoader(); - payeeIdentifier createPayeeIdentifier(const QString& payeeIdentifierId); - payeeIdentifier createPayeeIdentifierFromXML(const QDomElement& element); - /** * @brief Create a delegate to show/edit * @@ -61,20 +58,11 @@ */ QStringList availableDelegates(); - /** - * @brief Human readable name of a delegate for a given payeeIdentifierId - */ - QString translatedDelegateName(const QString& payeeIdentifierId); - - /** I take ownership */ - void addPayeeIdentifier(payeeIdentifierData *const identifier); - static payeeIdentifierLoader* instance() { return &m_self; } private: - QHash m_identifiers; static payeeIdentifierLoader m_self; }; diff --git a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp --- a/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp +++ b/kmymoney/mymoney/payeeidentifier/payeeidentifierloader.cpp @@ -17,63 +17,19 @@ #include "payeeidentifier/payeeidentifierloader.h" -#include "payeeidentifier/unavailableplugin/unavailableplugin.h" - -#include "payeeidentifier/ibanandbic/ibanbic.h" -#include "payeeidentifier/nationalaccount/nationalaccount.h" -#include "payeeidentifierdata.h" - #include #include -#include #include payeeIdentifierLoader payeeIdentifierLoader::m_self; payeeIdentifierLoader::payeeIdentifierLoader() - : m_identifiers(QHash()) { - addPayeeIdentifier(new payeeIdentifiers::ibanBic()); - addPayeeIdentifier(new payeeIdentifiers::nationalAccount()); } payeeIdentifierLoader::~payeeIdentifierLoader() { - qDeleteAll(m_identifiers); -} - -void payeeIdentifierLoader::addPayeeIdentifier(payeeIdentifierData* const identifier) -{ - Q_CHECK_PTR(identifier); - m_identifiers.insertMulti(identifier->payeeIdentifierId(), identifier); -} - -payeeIdentifier payeeIdentifierLoader::createPayeeIdentifier(const QString& payeeIdentifierId) -{ - const payeeIdentifierData* ident = m_identifiers.value(payeeIdentifierId); - if (ident != nullptr) { - return payeeIdentifier(ident->clone()); - } - - return payeeIdentifier(); -} - -payeeIdentifier payeeIdentifierLoader::createPayeeIdentifierFromXML(const QDomElement& element) -{ - const QString payeeIdentifierId = element.attribute("type"); - const payeeIdentifierData* identData = m_identifiers.value(payeeIdentifierId); - payeeIdentifier ident; - - if (identData != nullptr) { - payeeIdentifierData* newIdent = identData->createFromXml(element); - ident = payeeIdentifier(newIdent); - } else { - ident = payeeIdentifier(new payeeIdentifiers::payeeIdentifierUnavailable(element)); - } - - ident.m_id = element.attribute("id", 0).toUInt(); - return ident; } /** @@ -111,13 +67,3 @@ } return list; } - -QString payeeIdentifierLoader::translatedDelegateName(const QString& payeeIdentifierId) -{ - if (payeeIdentifierId == payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()) - return i18n("IBAN and BIC"); - else if (payeeIdentifierId == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid()) - return i18n("National Account Number"); - - return QString(); -} diff --git a/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt b/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt --- a/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt +++ b/kmymoney/mymoney/payeeidentifier/tests/CMakeLists.txt @@ -8,4 +8,5 @@ Qt5::Test kmm_payeeidentifier kmm_payeeidentifier_loader + kmm_mymoney ) diff --git a/kmymoney/mymoney/payeeidentifier/tests/payeeidentifier-test.cpp b/kmymoney/mymoney/payeeidentifier/tests/payeeidentifier-test.cpp --- a/kmymoney/mymoney/payeeidentifier/tests/payeeidentifier-test.cpp +++ b/kmymoney/mymoney/payeeidentifier/tests/payeeidentifier-test.cpp @@ -23,7 +23,7 @@ #include "mymoney/payeeidentifier/payeeidentifiertyped.h" #include "mymoney/payeeidentifier/payeeidentifierloader.h" -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" QTEST_GUILESS_MAIN(payeeidentifier_test); @@ -55,7 +55,7 @@ void payeeidentifier_test::copyIdent() { try { - const payeeIdentifier ident = payeeIdentifierLoader::instance()->createPayeeIdentifier(payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()); + const payeeIdentifier ident = payeeIdentifier(new payeeIdentifiers::ibanBic()); payeeIdentifier ident2 = ident; QVERIFY(!ident2.isNull()); QCOMPARE(ident2.iid(), payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()); @@ -67,7 +67,7 @@ void payeeidentifier_test::moveIdent() { try { - payeeIdentifier ident = payeeIdentifierLoader::instance()->createPayeeIdentifier(payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()); + payeeIdentifier ident = payeeIdentifier(new payeeIdentifiers::ibanBic()); payeeIdentifier ident2 = ident; } catch (...) { QFAIL("Unexpected exception"); @@ -77,7 +77,7 @@ void payeeidentifier_test::createTypedIdent() { try { - payeeIdentifier ident = payeeIdentifierLoader::instance()->createPayeeIdentifier(payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()); + payeeIdentifier ident = payeeIdentifier(new payeeIdentifiers::ibanBic()); payeeIdentifierTyped typedIdent{ident}; } catch (...) { QFAIL("Unexpected exception"); diff --git a/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.h b/kmymoney/mymoney/payeeidentifier/unavailableplugin/unavailableplugin.h rename from kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.h rename to kmymoney/mymoney/payeeidentifier/unavailableplugin/unavailableplugin.h diff --git a/kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp b/kmymoney/mymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp rename from kmymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp rename to kmymoney/mymoney/payeeidentifier/unavailableplugin/unavailableplugin.cpp diff --git a/kmymoney/mymoney/storage/CMakeLists.txt b/kmymoney/mymoney/storage/CMakeLists.txt --- a/kmymoney/mymoney/storage/CMakeLists.txt +++ b/kmymoney/mymoney/storage/CMakeLists.txt @@ -5,7 +5,6 @@ set(storage_HEADERS imymoneystorageformat.h mymoneystoragemgr.h - kmymoneystorageplugin.h ) ########### install files ############### diff --git a/kmymoney/mymoney/storage/tests/CMakeLists.txt b/kmymoney/mymoney/storage/tests/CMakeLists.txt --- a/kmymoney/mymoney/storage/tests/CMakeLists.txt +++ b/kmymoney/mymoney/storage/tests/CMakeLists.txt @@ -1,8 +1,3 @@ -# Alkimia::alkimia -# KF5::KIOWidgets -# Qt5::Gui -# Qt5::Sql - include(ECMAddTests) @@ -16,6 +11,6 @@ kmm_mymoney kmm_testutils reports_testcommon - onlinetask_unavailabletask kmm_utils_platformtools + onlinetask_interfaces ) diff --git a/kmymoney/mymoney/tests/CMakeLists.txt b/kmymoney/mymoney/tests/CMakeLists.txt --- a/kmymoney/mymoney/tests/CMakeLists.txt +++ b/kmymoney/mymoney/tests/CMakeLists.txt @@ -17,5 +17,5 @@ kmm_mymoney kmm_testutils reports_testcommon - onlinetask_unavailabletask + onlinetask_interfaces ) diff --git a/kmymoney/mymoney/tests/mymoneyfile-test.cpp b/kmymoney/mymoney/tests/mymoneyfile-test.cpp --- a/kmymoney/mymoney/tests/mymoneyfile-test.cpp +++ b/kmymoney/mymoney/tests/mymoneyfile-test.cpp @@ -39,7 +39,7 @@ #include "mymoneyenums.h" #include "onlinejob.h" -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include "payeeidentifier/payeeidentifierloader.h" #include "payeeidentifiertyped.h" @@ -1536,7 +1536,7 @@ p = m->payee(p.id()); - payeeIdentifier ident = payeeIdentifierLoader::instance()->createPayeeIdentifier(payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()); + payeeIdentifier ident = payeeIdentifier(new payeeIdentifiers::ibanBic()); payeeIdentifierTyped iban(ident); iban->setIban(QLatin1String("DE82 2007 0024 0066 6446 00")); diff --git a/kmymoney/payeeidentifier/CMakeLists.txt b/kmymoney/payeeidentifier/CMakeLists.txt --- a/kmymoney/payeeidentifier/CMakeLists.txt +++ b/kmymoney/payeeidentifier/CMakeLists.txt @@ -1,3 +1,2 @@ -add_subdirectory( unavailableplugin ) add_subdirectory( ibanandbic ) add_subdirectory( nationalaccount ) diff --git a/kmymoney/payeeidentifier/ibanandbic/CMakeLists.txt b/kmymoney/payeeidentifier/ibanandbic/CMakeLists.txt --- a/kmymoney/payeeidentifier/ibanandbic/CMakeLists.txt +++ b/kmymoney/payeeidentifier/ibanandbic/CMakeLists.txt @@ -1,37 +1 @@ -set ( PAYEEIDENTIFIER_IBAN_BIC_SCRS - bicmodel.cpp - ibanbicdata.cpp - ibanbic.cpp -) - -add_library( payeeidentifier_iban_bic SHARED - ${PAYEEIDENTIFIER_IBAN_BIC_SCRS} -) -generate_export_header(payeeidentifier_iban_bic BASE_NAME iban_bic_identifier) - -configure_file(ibanbicdata.desktop.in ibanbicdata.desktop) -kcoreaddons_desktop_to_json(payeeidentifier_iban_bic "${CMAKE_CURRENT_BINARY_DIR}/ibanbicdata.desktop") - -target_link_libraries( payeeidentifier_iban_bic PUBLIC - kmm_payeeidentifier - KF5::Service - Qt5::Core - Qt5::Sql - Qt5::Xml - Alkimia::alkimia -) - -set_target_properties(payeeidentifier_iban_bic PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) - -install(TARGETS payeeidentifier_iban_bic - ${INSTALL_TARGETS_DEFAULT_ARGS} -) - -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/ibanbicdata.desktop - DESTINATION ${SERVICETYPES_INSTALL_DIR}) - -if(BUILD_TESTING) - add_subdirectory(tests) -endif() add_subdirectory(widgets) diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/CMakeLists.txt b/kmymoney/payeeidentifier/ibanandbic/widgets/CMakeLists.txt --- a/kmymoney/payeeidentifier/ibanandbic/widgets/CMakeLists.txt +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/CMakeLists.txt @@ -37,10 +37,10 @@ ) target_link_libraries( payeeidentifier_iban_bic_widgets PUBLIC - payeeidentifier_iban_bic Qt5::Core kmm_mymoney kmm_widgets + kmm_plugin ) generate_export_header( payeeidentifier_iban_bic_widgets ) @@ -59,9 +59,9 @@ ) target_link_libraries( payeeidentifier_iban_bic_delegates - payeeidentifier_iban_bic payeeidentifier_iban_bic_widgets kmm_widgets + kmm_mymoney Qt5::Core ) diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.cpp b/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.cpp --- a/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.cpp +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/bicvalidator.cpp @@ -20,7 +20,7 @@ #include -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include "widgetenums.h" bicValidator::bicValidator(QObject* parent) diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h --- a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h @@ -23,7 +23,7 @@ #include #include "payeeidentifier/payeeidentifiertyped.h" -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" class PAYEEIDENTIFIER_IBAN_BIC_WIDGETS_EXPORT ibanBicItemDelegate : public QStyledItemDelegate { diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemedit.cpp b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemedit.cpp --- a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemedit.cpp +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanbicitemedit.cpp @@ -19,7 +19,7 @@ #include "ibanbicitemedit.h" #include "ui_ibanbicitemedit.h" -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include "payeeidentifier/payeeidentifiertyped.h" struct ibanBicItemEdit::Private { diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.cpp b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.cpp --- a/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.cpp +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/ibanvalidator.cpp @@ -18,7 +18,7 @@ #include "ibanvalidator.h" -#include "../ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include #include "widgetenums.h" diff --git a/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp b/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp --- a/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp +++ b/kmymoney/payeeidentifier/ibanandbic/widgets/kbicedit.cpp @@ -25,9 +25,10 @@ #include #include -#include "../bicmodel.h" +#include "kmymoneyplugin.h" #include "bicvalidator.h" #include "kmymoneyvalidationfeedback.h" +#include "plugins/ibanbicdata/ibanbicdataenums.h" class bicItemDelegate : public QStyledItemDelegate { @@ -44,9 +45,10 @@ : KLineEdit(parent) { QCompleter* completer = new QCompleter(this); + if (auto plugin = pPlugins.data.value(QString::fromLatin1("ibanbicdata"), nullptr)) + if (auto model = plugin->requestData(QString(), eIBANBIC::DataType::bicModel).value()) + completer->setModel(model); - bicModel* model = new bicModel(this); - completer->setModel(model); m_popupDelegate = new bicItemDelegate(this); completer->popup()->setItemDelegate(m_popupDelegate); @@ -104,7 +106,7 @@ QFontMetrics smallMetrics(smallFont); QRect nameRect = style->alignedRect(opt.direction, Qt::AlignBottom, QSize(textArea.width(), smallMetrics.lineSpacing()), textArea); painter->setFont(smallFont); - style->drawItemText(painter, nameRect, Qt::AlignBottom, QApplication::palette(), true, index.model()->data(index, bicModel::InstitutionNameRole).toString(), option.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Mid); + style->drawItemText(painter, nameRect, Qt::AlignBottom, QApplication::palette(), true, index.model()->data(index, eIBANBIC::DisplayRole::InstitutionNameRole).toString(), option.state & QStyle::State_Selected ? QPalette::HighlightedText : QPalette::Mid); painter->restore(); // Paint BIC diff --git a/kmymoney/payeeidentifier/nationalaccount/CMakeLists.txt b/kmymoney/payeeidentifier/nationalaccount/CMakeLists.txt --- a/kmymoney/payeeidentifier/nationalaccount/CMakeLists.txt +++ b/kmymoney/payeeidentifier/nationalaccount/CMakeLists.txt @@ -1,29 +1,3 @@ - -set (nationalAccountId_SCRS - nationalaccount.cpp -) - -add_library( payeeidentifier_nationalAccount SHARED - ${nationalAccountId_SCRS} -) -generate_export_header(payeeidentifier_nationalAccount BASE_NAME nationalaccount_identifier) - -target_link_libraries( payeeidentifier_nationalAccount - PUBLIC - kmm_payeeidentifier - Qt5::Core - Qt5::Xml -) - -set_target_properties(payeeidentifier_nationalAccount PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/kmymoney-nationalaccountnumberplugin.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/kmymoney-nationalaccountnumberplugin.desktop) -kcoreaddons_desktop_to_json(payeeidentifier_nationalAccount ${CMAKE_CURRENT_BINARY_DIR}/kmymoney-nationalaccountnumberplugin.desktop) - -install(TARGETS payeeidentifier_nationalAccount - ${INSTALL_TARGETS_DEFAULT_ARGS} -) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kmymoney-nationalaccountnumberplugin.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}) add_subdirectory( ui ) diff --git a/kmymoney/payeeidentifier/nationalaccount/ui/CMakeLists.txt b/kmymoney/payeeidentifier/nationalaccount/ui/CMakeLists.txt --- a/kmymoney/payeeidentifier/nationalaccount/ui/CMakeLists.txt +++ b/kmymoney/payeeidentifier/nationalaccount/ui/CMakeLists.txt @@ -16,9 +16,9 @@ ) target_link_libraries( payeeidentifier_nationalAccount_ui - payeeidentifier_nationalAccount Qt5::Core kmm_widgets + kmm_mymoney ) install(TARGETS payeeidentifier_nationalAccount_ui diff --git a/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h b/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h --- a/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h +++ b/kmymoney/payeeidentifier/nationalaccount/ui/nationalaccountdelegate.h @@ -21,7 +21,7 @@ #include -#include "../nationalaccount.h" +#include "payeeidentifier/nationalaccount/nationalaccount.h" #include "payeeidentifier/payeeidentifiertyped.h" class nationalAccountDelegate : public QStyledItemDelegate diff --git a/kmymoney/payeeidentifier/unavailableplugin/CMakeLists.txt b/kmymoney/payeeidentifier/unavailableplugin/CMakeLists.txt deleted file mode 100644 --- a/kmymoney/payeeidentifier/unavailableplugin/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -# NOTE: this payeeIdentifier and its cmake file cannot be used as a template -# This payeeIdentifier muss be linked with payeeIdentifierLoader because it -# is a fallback if something failed during loading of plugins (for xml files only) - -set ( UNAVIALABLE_IDENTIFIER_SCRS - unavailableplugin.cpp -) - -add_library( payeeidentifier_unavailable STATIC - ${UNAVIALABLE_IDENTIFIER_SCRS} -) - -target_link_libraries( payeeidentifier_unavailable - kmm_payeeidentifier - Qt5::Core - Qt5::Xml -) diff --git a/kmymoney/pluginloader.h b/kmymoney/pluginloader.h --- a/kmymoney/pluginloader.h +++ b/kmymoney/pluginloader.h @@ -19,8 +19,6 @@ // ---------------------------------------------------------------------------- // QT Includes -#include - // ---------------------------------------------------------------------------- // KDE Includes @@ -37,12 +35,7 @@ namespace KMyMoneyPlugin { - class Plugin; - class OnlinePlugin; - class OnlinePluginExtended; - class ImporterPlugin; - class StoragePlugin; - + class Container; enum class eListing; /** @@ -63,17 +56,6 @@ StandardPlugin }; - /** - * @brief The Container struct to hold all plugin interfaces - */ - struct Container { - QMap standard; // this should contain all loaded plugins because every plugin should inherit Plugin class - QMap online; // casted standard plugin, if such interface is available - QMap extended; // casted standard plugin, if such interface is available - QMap importer; // casted standard plugin, if such interface is available - QMap storage; // casted standard plugin, if such interface is available - }; - Category pluginCategory(const KPluginMetaData& pluginInfo); /** diff --git a/kmymoney/pluginloader.cpp b/kmymoney/pluginloader.cpp --- a/kmymoney/pluginloader.cpp +++ b/kmymoney/pluginloader.cpp @@ -18,6 +18,8 @@ // ---------------------------------------------------------------------------- // QT Includes +#include + // ---------------------------------------------------------------------------- // KDE Includes @@ -91,6 +93,7 @@ ctnPlugins.extended.remove(it.key()); ctnPlugins.importer.remove(it.key()); ctnPlugins.storage.remove(it.key()); + ctnPlugins.data.remove(it.key()); guiFactory->removeClient(it.value()); it.value()->unplug(); @@ -145,6 +148,10 @@ if (IStorage) ctnPlugins.storage.insert((*it).pluginId(), IStorage); + auto IData = qobject_cast(plugin); + if (IData) + ctnPlugins.data.insert((*it).pluginId(), IData); + } } diff --git a/kmymoney/plugins/CMakeLists.txt b/kmymoney/plugins/CMakeLists.txt --- a/kmymoney/plugins/CMakeLists.txt +++ b/kmymoney/plugins/CMakeLists.txt @@ -1,5 +1,4 @@ add_subdirectory( onlinetasks ) -add_subdirectory( ibanbicdata ) add_subdirectory( interfaces ) add_subdirectory( csv ) add_subdirectory( qif ) @@ -14,6 +13,10 @@ add_subdirectory(sql) endif() +if(ENABLE_IBANBICDATA) + add_subdirectory(ibanbicdata) +endif() + if (ENABLE_KBANKING) add_subdirectory( kbanking ) endif (ENABLE_KBANKING) @@ -44,7 +47,7 @@ interfaceloader.cpp ) -set(plugins_HEADERS +set(plugin_HEADERS appinterface.h importinterface.h kmymoneyplugin.h @@ -58,12 +61,15 @@ generate_export_header(kmm_plugin BASE_NAME kmm_plugin) target_link_libraries(kmm_plugin PUBLIC - KF5::XmlGui - KF5::KCMUtils - KF5::KIOWidgets - Qt5::Gui - Qt5::Widgets - kmm_mymoney + Qt5::Core + KF5::XmlGui + PRIVATE + KF5::KCMUtils + KF5::KIOWidgets + Qt5::Gui + Qt5::Widgets + INTERFACE + kmm_mymoney ) set_target_properties(kmm_plugin PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) @@ -73,7 +79,7 @@ install(TARGETS kmm_plugin ${INSTALL_TARGETS_DEFAULT_ARGS} ) -install(FILES ${plugins_HEADERS} +install(FILES ${plugin_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/kmymoney COMPONENT Devel) install(FILES diff --git a/kmymoney/plugins/csv/export/CMakeLists.txt b/kmymoney/plugins/csv/export/CMakeLists.txt --- a/kmymoney/plugins/csv/export/CMakeLists.txt +++ b/kmymoney/plugins/csv/export/CMakeLists.txt @@ -24,8 +24,13 @@ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") target_link_libraries(csvexporter - kmm_mymoney kmm_plugin - Alkimia::alkimia + PUBLIC + kmm_mymoney + Alkimia::alkimia + PRIVATE + KF5::Completion + KF5::KIOWidgets + kmm_plugin ) ########### install files ############### diff --git a/kmymoney/plugins/gnc/import/CMakeLists.txt b/kmymoney/plugins/gnc/import/CMakeLists.txt --- a/kmymoney/plugins/gnc/import/CMakeLists.txt +++ b/kmymoney/plugins/gnc/import/CMakeLists.txt @@ -29,6 +29,9 @@ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") target_link_libraries(gncimporter - kmm_plugin - Alkimia::alkimia + PUBLIC + kmm_plugin + PRIVATE + KF5::Completion + Alkimia::alkimia ) diff --git a/kmymoney/plugins/ibanbicdata/CMakeLists.txt b/kmymoney/plugins/ibanbicdata/CMakeLists.txt --- a/kmymoney/plugins/ibanbicdata/CMakeLists.txt +++ b/kmymoney/plugins/ibanbicdata/CMakeLists.txt @@ -1,3 +1,31 @@ #add_subdirectory( germany ) #add_subdirectory( switzerland ) #add_subdirectory( target2 ) + +# patch the version with the version defined in the build system +configure_file(ibanbicdata.desktop.in ibanbicdata.desktop) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ibanbicdata.json.in ${CMAKE_CURRENT_BINARY_DIR}/ibanbicdata.json @ONLY) +#kcoreaddons_desktop_to_json(ibanbicdata "${CMAKE_CURRENT_BINARY_DIR}/ibanbicdata.desktop") + +set ( IBANBICDATA_SCRS + ibanbicdata.cpp + bicmodel.cpp +) + +kcoreaddons_add_plugin(ibanbicdata + SOURCES ${IBANBICDATA_SCRS} + JSON "${CMAKE_CURRENT_BINARY_DIR}/ibanbicdata.json" + INSTALL_NAMESPACE "kmymoney") + +#kcoreaddons_add_plugin sets LIBRARY_OUTPUT_DIRECTORY to ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${INSTALL_NAMESPACE} +set_target_properties(ibanbicdata + PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + +target_link_libraries(ibanbicdata + PUBLIC + kmm_plugin + PRIVATE + Qt5::Sql + KF5::I18n +) diff --git a/kmymoney/payeeidentifier/ibanandbic/bicmodel.h b/kmymoney/plugins/ibanbicdata/bicmodel.h rename from kmymoney/payeeidentifier/ibanandbic/bicmodel.h rename to kmymoney/plugins/ibanbicdata/bicmodel.h diff --git a/kmymoney/payeeidentifier/ibanandbic/bicmodel.cpp b/kmymoney/plugins/ibanbicdata/bicmodel.cpp rename from kmymoney/payeeidentifier/ibanandbic/bicmodel.cpp rename to kmymoney/plugins/ibanbicdata/bicmodel.cpp diff --git a/kmymoney/payeeidentifier/ibanandbic/ibanbicdata.h b/kmymoney/plugins/ibanbicdata/ibanbicdata.h rename from kmymoney/payeeidentifier/ibanandbic/ibanbicdata.h rename to kmymoney/plugins/ibanbicdata/ibanbicdata.h --- a/kmymoney/payeeidentifier/ibanandbic/ibanbicdata.h +++ b/kmymoney/plugins/ibanbicdata/ibanbicdata.h @@ -23,31 +23,33 @@ # define KMM_MYMONEY_UNIT_TESTABLE #endif +#include "kmymoneyplugin.h" + #include #include #include +namespace eIBANBIC {enum bicAllocationStatus : unsigned int;} + /** * @brief This class implements everything that needs lookup * * Kind of a static private class of payeeIdentifier::ibanBic. It loads the iban/bic data and queries the * databases. * * @interal This class is made if a cache will be needed in future. */ -class ibanBicData : public QObject +class ibanBicData : public KMyMoneyPlugin::Plugin, public KMyMoneyPlugin::DataPlugin { Q_OBJECT + Q_INTERFACES(KMyMoneyPlugin::DataPlugin) KMM_MYMONEY_UNIT_TESTABLE public: - ~ibanBicData(); + explicit ibanBicData(QObject *parent, const QVariantList &args); + ~ibanBicData() override; - enum bicAllocationStatus { - bicAllocated = 0, - bicNotAllocated, - bicAllocationUncertain - }; + QVariant requestData(const QString &arg, uint type) override; int bbanLength(const QString& countryCode); int bankIdentifierPosition(const QString& countryCode); @@ -76,7 +78,7 @@ QString extractBankIdentifier(const QString& iban); - bicAllocationStatus isBicAllocated(const QString& bic); + eIBANBIC::bicAllocationStatus isBicAllocated(const QString& bic); private: QVariant findPropertyByCountry(const QString& countryCode, const QString& property, const QVariant::Type type); diff --git a/kmymoney/payeeidentifier/ibanandbic/ibanbicdata.cpp b/kmymoney/plugins/ibanbicdata/ibanbicdata.cpp rename from kmymoney/payeeidentifier/ibanandbic/ibanbicdata.cpp rename to kmymoney/plugins/ibanbicdata/ibanbicdata.cpp --- a/kmymoney/payeeidentifier/ibanandbic/ibanbicdata.cpp +++ b/kmymoney/plugins/ibanbicdata/ibanbicdata.cpp @@ -19,15 +19,56 @@ #include "ibanbicdata.h" #include +#include + #include #include #include #include -#include "ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" +#include "ibanbicdataenums.h" +#include "bicmodel.h" + +ibanBicData::ibanBicData(QObject *parent, const QVariantList &args) : + KMyMoneyPlugin::Plugin(parent, "ibanbicdata"/*must be the same as X-KDE-PluginInfo-Name*/) +{ + Q_UNUSED(args) + setComponentName("ibanbicdata", i18n("IBAN/BIC Data")); + + // For information, announce that we have been loaded. + qDebug("Plugins: ibanbicdata loaded"); +} ibanBicData::~ibanBicData() { + qDebug("Plugins: ibanbicdata unloaded"); +} + +QVariant ibanBicData::requestData(const QString &arg, uint type) +{ + switch (type) { + case eIBANBIC::DataType::bbanLength: + return QVariant::fromValue(bbanLength(arg)); + case eIBANBIC::DataType::bankIdentifierPosition: + return QVariant::fromValue(bankIdentifierPosition(arg)); + case eIBANBIC::DataType::bankIdentifierLength: + return QVariant::fromValue(bankIdentifierLength(arg)); + case eIBANBIC::DataType::iban2Bic: + return QVariant::fromValue(iban2Bic(arg)); + case eIBANBIC::DataType::bankNameByBic: + return QVariant::fromValue(bankNameByBic(arg)); + case eIBANBIC::DataType::bankNameAndBic: + return QVariant::fromValue(bankNameAndBic(arg)); + case eIBANBIC::DataType::extractBankIdentifier: + return QVariant::fromValue(extractBankIdentifier(arg)); + case eIBANBIC::DataType::isBicAllocated: + return QVariant::fromValue(static_cast(isBicAllocated(arg))); + case eIBANBIC::DataType::bicModel: + return QVariant::fromValue(static_cast(new bicModel())); + default: + return QVariant(); + } } int ibanBicData::bankIdentifierLength(const QString& countryCode) @@ -184,42 +225,42 @@ return QPair(QString(""), QString("")); } -ibanBicData::bicAllocationStatus ibanBicData::isBicAllocated(const QString& bic) +eIBANBIC::bicAllocationStatus ibanBicData::isBicAllocated(const QString& bic) { // Get countryCode const QString countryCode = bic.mid(4, 2); if (countryCode.length() != 2) - return bicNotAllocated; + return eIBANBIC::bicAllocationStatus::bicNotAllocated; // Get services which have a database entry KService::List services = KServiceTypeTrader::self()->query("KMyMoney/IbanBicData", QString("(\'%1' ~in [X-KMyMoney-CountryCodes] or '*' in [X-KMyMoney-CountryCodes]) and exist [X-KMyMoney-Bankdata-Database]").arg(countryCode) ); if (services.isEmpty()) - return bicAllocationUncertain; + return eIBANBIC::bicAllocationStatus::bicAllocationUncertain; QSqlDatabase db = createDatabaseConnection(services.first()->property(QLatin1String("X-KMyMoney-Bankdata-Database"), QVariant::String).toString()); if (!db.isOpen()) // This is an error - return bicAllocationUncertain; + return eIBANBIC::bicAllocationStatus::bicAllocationUncertain; QSqlQuery query(db); query.prepare("SELECT ? IN (SELECT bic FROM institutions)"); query.bindValue(0, bic); if (!query.exec() || !query.next()) { qWarning() << QString("Could not execute query on \"%1\" to check if bic exists. Error: %2").arg(db.databaseName()).arg(query.lastError().text()); - return bicAllocationUncertain; + return eIBANBIC::bicAllocationStatus::bicAllocationUncertain; } if (query.value(0).toBool()) // Bic found - return bicAllocated; + return eIBANBIC::bicAllocationStatus::bicAllocated; // Bic not found, test if database is complete if (services.first()->property(QLatin1String("X-KMyMoney-Bankdata-IsComplete"), QVariant::Bool).toBool()) - return bicNotAllocated; + return eIBANBIC::bicAllocationStatus::bicNotAllocated; - return bicAllocationUncertain; + return eIBANBIC::bicAllocationStatus::bicAllocationUncertain; } QVariant ibanBicData::findPropertyByCountry(const QString& countryCode, const QString& property, const QVariant::Type type) @@ -274,3 +315,7 @@ return db; } + +K_PLUGIN_FACTORY_WITH_JSON(ibanBicDataFactory, "ibanbicdata.json", registerPlugin();) + +#include "ibanbicdata.moc" diff --git a/kmymoney/payeeidentifier/ibanandbic/ibanbicdata.desktop.in b/kmymoney/plugins/ibanbicdata/ibanbicdata.desktop.in rename from kmymoney/payeeidentifier/ibanandbic/ibanbicdata.desktop.in rename to kmymoney/plugins/ibanbicdata/ibanbicdata.desktop.in diff --git a/kmymoney/plugins/ibanbicdata/ibanbicdata.json.in b/kmymoney/plugins/ibanbicdata/ibanbicdata.json.in new file mode 100644 --- /dev/null +++ b/kmymoney/plugins/ibanbicdata/ibanbicdata.json.in @@ -0,0 +1,21 @@ +{ + "KPlugin": { + "Authors": [ + { + "Email": "christian-david@web.de", + "Name": "Christian Dávid" + } + ], + "Description": "Adds predefined IBAN/BIC numbers to KMyMoney", + "EnabledByDefault": true, + "Icon": "server-database", + "Id": "ibanbicdata", + "License": "GPL", + "Name": "IBAN/BIC Data", + "ServiceTypes": [ + "KMyMoney/Plugin" + ], + "Version": "@PROJECT_VERSION@@PROJECT_VERSION_SUFFIX@", + "Website": "https://kmymoney.org/plugins.html" + } +} diff --git a/kmymoney/mymoney/storage/kmymoneystorageplugin.cpp b/kmymoney/plugins/ibanbicdata/ibanbicdataenums.h rename from kmymoney/mymoney/storage/kmymoneystorageplugin.cpp rename to kmymoney/plugins/ibanbicdata/ibanbicdataenums.h --- a/kmymoney/mymoney/storage/kmymoneystorageplugin.cpp +++ b/kmymoney/plugins/ibanbicdata/ibanbicdataenums.h @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 Christian Dávid + * Copyright 2018 Łukasz Wojniłowicz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -15,15 +15,32 @@ * along with this program. If not, see . */ -#include "kmymoneystorageplugin.h" +#ifndef IBANBICDATAENUMS_H +#define IBANBICDATAENUMS_H -KMyMoneyPlugin::storagePlugin::storagePlugin(QObject* parent, const QVariantList& options) - : QObject(parent) -{ - Q_UNUSED(options); -} +#include + +namespace eIBANBIC { + enum DataType { + bbanLength, + bankIdentifierPosition, + bankIdentifierLength, + iban2Bic, + bankNameByBic, + bankNameAndBic, + extractBankIdentifier, + isBicAllocated, + bicModel + }; -KMyMoneyPlugin::storagePlugin::~storagePlugin() -{ + enum bicAllocationStatus : unsigned int { + bicAllocated = 0, + bicNotAllocated, + bicAllocationUncertain + }; + enum DisplayRole { + InstitutionNameRole = Qt::UserRole + }; } +#endif diff --git a/kmymoney/payeeidentifier/ibanandbic/tests/CMakeLists.txt b/kmymoney/plugins/ibanbicdata/tests/CMakeLists.txt rename from kmymoney/payeeidentifier/ibanandbic/tests/CMakeLists.txt rename to kmymoney/plugins/ibanbicdata/tests/CMakeLists.txt --- a/kmymoney/payeeidentifier/ibanandbic/tests/CMakeLists.txt +++ b/kmymoney/plugins/ibanbicdata/tests/CMakeLists.txt @@ -6,5 +6,5 @@ "ibanandbic-" LINK_LIBRARIES Qt5::Test - payeeidentifier_iban_bic + kmm_mymoney ) diff --git a/kmymoney/payeeidentifier/ibanandbic/tests/internationalaccountidentifier-test.h b/kmymoney/plugins/ibanbicdata/tests/internationalaccountidentifier-test.h rename from kmymoney/payeeidentifier/ibanandbic/tests/internationalaccountidentifier-test.h rename to kmymoney/plugins/ibanbicdata/tests/internationalaccountidentifier-test.h diff --git a/kmymoney/payeeidentifier/ibanandbic/tests/internationalaccountidentifier-test.cpp b/kmymoney/plugins/ibanbicdata/tests/internationalaccountidentifier-test.cpp rename from kmymoney/payeeidentifier/ibanandbic/tests/internationalaccountidentifier-test.cpp rename to kmymoney/plugins/ibanbicdata/tests/internationalaccountidentifier-test.cpp --- a/kmymoney/payeeidentifier/ibanandbic/tests/internationalaccountidentifier-test.cpp +++ b/kmymoney/plugins/ibanbicdata/tests/internationalaccountidentifier-test.cpp @@ -17,8 +17,8 @@ */ #include "internationalaccountidentifier-test.h" -#include "../ibanbic.h" -#include "../ibanbicdata.h" +#include "payeeidentifier/ibanbic/ibanbic.h" +#include "plugins/ibanbicdata/ibanbicdata.h" #include diff --git a/kmymoney/plugins/interfaces/CMakeLists.txt b/kmymoney/plugins/interfaces/CMakeLists.txt --- a/kmymoney/plugins/interfaces/CMakeLists.txt +++ b/kmymoney/plugins/interfaces/CMakeLists.txt @@ -7,4 +7,4 @@ add_library(interfaces STATIC ${libinterfaces_a_SOURCES}) # TODO: fix dependencies -target_link_libraries(interfaces KF5::Service KF5::XmlGui Alkimia::alkimia Qt5::Sql Qt5::Xml) +target_link_libraries(interfaces KF5::Service KF5::XmlGui Alkimia::alkimia Qt5::Xml) diff --git a/kmymoney/plugins/kbanking/CMakeLists.txt b/kmymoney/plugins/kbanking/CMakeLists.txt --- a/kmymoney/plugins/kbanking/CMakeLists.txt +++ b/kmymoney/plugins/kbanking/CMakeLists.txt @@ -33,7 +33,6 @@ kmm_mymoney kmm_widgets kmm_plugin - payeeidentifier_nationalAccount KF5::ConfigCore KF5::ConfigGui Qt5::Core diff --git a/kmymoney/plugins/kbanking/tasksettings/CMakeLists.txt b/kmymoney/plugins/kbanking/tasksettings/CMakeLists.txt --- a/kmymoney/plugins/kbanking/tasksettings/CMakeLists.txt +++ b/kmymoney/plugins/kbanking/tasksettings/CMakeLists.txt @@ -8,7 +8,6 @@ kmm_utils_validators Qt5::Gui Qt5::Xml - Qt5::Sql KF5::I18n konlinetasks_sepa_interface ) diff --git a/kmymoney/plugins/kmymoneyplugin.h b/kmymoney/plugins/kmymoneyplugin.h --- a/kmymoney/plugins/kmymoneyplugin.h +++ b/kmymoney/plugins/kmymoneyplugin.h @@ -319,12 +319,52 @@ virtual QString fileExtension() const = 0; }; +/** + * This class describes the interface between the KMyMoney + * application and its data plugins. All data plugins + * must provide this interface. + * + */ +class KMM_PLUGIN_EXPORT DataPlugin +{ +public: + DataPlugin() = default; + virtual ~DataPlugin() = default; + + /** + * @brief Gets data from data service + * @param arg Item name to retrieve data for + * @param type Data type to retrieve for item + * @return a data like int or QString + */ + virtual QVariant requestData(const QString &arg, uint type) = 0; +}; + +class OnlinePluginExtended; + +/** + * @brief The Container struct to hold all plugin interfaces + */ +struct Container { + QMap standard; // this should contain all loaded plugins because every plugin should inherit Plugin class + QMap online; // casted standard plugin, if such interface is available + QMap extended; // casted standard plugin, if such interface is available + QMap importer; // casted standard plugin, if such interface is available + QMap storage; // casted standard plugin, if such interface is available + QMap data; // casted standard plugin, if such interface is available +}; } // end of namespace +/** + * @brief Structure of plugins objects by their interfaces + */ +KMM_PLUGIN_EXPORT extern KMyMoneyPlugin::Container pPlugins; + Q_DECLARE_INTERFACE(KMyMoneyPlugin::OnlinePlugin, "org.kmymoney.plugin.onlineplugin") Q_DECLARE_INTERFACE(KMyMoneyPlugin::ImporterPlugin, "org.kmymoney.plugin.importerplugin") Q_DECLARE_INTERFACE(KMyMoneyPlugin::StoragePlugin, "org.kmymoney.plugin.storageplugin") +Q_DECLARE_INTERFACE(KMyMoneyPlugin::DataPlugin, "org.kmymoney.plugin.dataplugin") /** @} */ diff --git a/kmymoney/plugins/kmymoneyplugin.cpp b/kmymoney/plugins/kmymoneyplugin.cpp --- a/kmymoney/plugins/kmymoneyplugin.cpp +++ b/kmymoney/plugins/kmymoneyplugin.cpp @@ -20,6 +20,8 @@ // ---------------------------------------------------------------------------- // QT Includes +#include + // ---------------------------------------------------------------------------- // KDE Includes @@ -30,6 +32,8 @@ // Project Includes #include "interfaceloader.h" +KMyMoneyPlugin::Container pPlugins; + KMyMoneyPlugin::Plugin::Plugin(QObject* parent, const char* name) : QObject(), KXMLGUIClient() diff --git a/kmymoney/plugins/onlinetasks/CMakeLists.txt b/kmymoney/plugins/onlinetasks/CMakeLists.txt --- a/kmymoney/plugins/onlinetasks/CMakeLists.txt +++ b/kmymoney/plugins/onlinetasks/CMakeLists.txt @@ -1,4 +1,3 @@ add_subdirectory(interfaces) add_subdirectory(sepa) -add_subdirectory(unavailabletask) diff --git a/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt b/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt --- a/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt +++ b/kmymoney/plugins/onlinetasks/interfaces/CMakeLists.txt @@ -22,8 +22,7 @@ PUBLIC kmm_payeeidentifier Qt5::Widgets - # Copy build dependencies from kmm_mymoney as this has actually a cyclic dependency - $ + Alkimia::alkimia ) install(FILES ${onlinetask_interfaces_HEADER} diff --git a/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp b/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp --- a/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp +++ b/kmymoney/plugins/onlinetasks/sepa/ui/sepacredittransferedit.cpp @@ -33,7 +33,7 @@ #include "payeeidentifier/ibanandbic/widgets/bicvalidator.h" #include "payeeidentifier/payeeidentifiertyped.h" #include "misc/charvalidator.h" -#include "payeeidentifier/ibanandbic/ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include "styleditemdelegateforwarder.h" #include "payeeidentifier/ibanandbic/widgets/ibanbicitemdelegate.h" #include "onlinejobtyped.h" diff --git a/kmymoney/plugins/onlinetasks/unavailabletask/CMakeLists.txt b/kmymoney/plugins/onlinetasks/unavailabletask/CMakeLists.txt deleted file mode 100644 --- a/kmymoney/plugins/onlinetasks/unavailabletask/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ - -set( UNAVAILABLE_TASK_SRCS - tasks/unavailabletask.cpp -) - -add_library( onlinetask_unavailabletask STATIC - ${UNAVAILABLE_TASK_SRCS} -) - -target_link_libraries( onlinetask_unavailabletask - onlinetask_interfaces - Qt5::Core - Qt5::Xml - KF5::I18n -) diff --git a/kmymoney/plugins/onlinetasks/unavailabletask/tasks/CMakeLists.txt b/kmymoney/plugins/onlinetasks/unavailabletask/tasks/CMakeLists.txt deleted file mode 100644 diff --git a/kmymoney/plugins/qif/import/CMakeLists.txt b/kmymoney/plugins/qif/import/CMakeLists.txt --- a/kmymoney/plugins/qif/import/CMakeLists.txt +++ b/kmymoney/plugins/qif/import/CMakeLists.txt @@ -27,9 +27,13 @@ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") target_link_libraries(qifimporter - kmm_settings - kmm_plugin - Alkimia::alkimia + PUBLIC + kmm_plugin + PRIVATE + KF5::Completion + KF5::KIOWidgets + Alkimia::alkimia + kmm_settings ) ########### install files ############### diff --git a/kmymoney/plugins/sql/CMakeLists.txt b/kmymoney/plugins/sql/CMakeLists.txt --- a/kmymoney/plugins/sql/CMakeLists.txt +++ b/kmymoney/plugins/sql/CMakeLists.txt @@ -10,6 +10,7 @@ mymoneydbdriver.cpp kselectdatabasedlg.cpp kgeneratesqldlg.cpp + kmymoneystorageplugin.cpp ) ki18n_wrap_ui(sqlstorage_SOURCES kselectdatabasedlg.ui kgeneratesqldlg.ui) @@ -30,6 +31,8 @@ PUBLIC kmm_plugin kmm_widgets + PRIVATE + Qt5::Sql kmm_utils_platformtools ) diff --git a/kmymoney/mymoney/storage/kmymoneystorageplugin.h b/kmymoney/plugins/sql/kmymoneystorageplugin.h rename from kmymoney/mymoney/storage/kmymoneystorageplugin.h rename to kmymoney/plugins/sql/kmymoneystorageplugin.h --- a/kmymoney/mymoney/storage/kmymoneystorageplugin.h +++ b/kmymoney/plugins/sql/kmymoneystorageplugin.h @@ -18,8 +18,6 @@ #ifndef KMYMONEYSTORAGEPLUGIN_H #define KMYMONEYSTORAGEPLUGIN_H -#include "kmm_mymoney_export.h" - #include #include @@ -31,7 +29,7 @@ * @brief Interface for plugins which store data in an sql database * */ -class KMM_MYMONEY_EXPORT storagePlugin : public QObject +class storagePlugin : public QObject { Q_OBJECT diff --git a/kmymoney/mymoney/storage/kmymoneystorageplugin.cpp b/kmymoney/plugins/sql/kmymoneystorageplugin.cpp rename from kmymoney/mymoney/storage/kmymoneystorageplugin.cpp rename to kmymoney/plugins/sql/kmymoneystorageplugin.cpp diff --git a/kmymoney/plugins/sql/mymoneystoragesql_p.h b/kmymoney/plugins/sql/mymoneystoragesql_p.h --- a/kmymoney/plugins/sql/mymoneystoragesql_p.h +++ b/kmymoney/plugins/sql/mymoneystoragesql_p.h @@ -81,8 +81,8 @@ #include "payeeidentifierdata.h" #include "payeeidentifier.h" #include "payeeidentifiertyped.h" -#include "ibanbic.h" -#include "nationalaccount.h" +#include "payeeidentifier/ibanbic/ibanbic.h" +#include "payeeidentifier/nationalaccount/nationalaccount.h" #include "onlinetasks/sepa/sepaonlinetransferimpl.h" #include "mymoneyenums.h" #include "mymoneystoragenames.h" diff --git a/kmymoney/plugins/sql/onlinetasks/sepa/CMakeLists.txt b/kmymoney/plugins/sql/onlinetasks/sepa/CMakeLists.txt --- a/kmymoney/plugins/sql/onlinetasks/sepa/CMakeLists.txt +++ b/kmymoney/plugins/sql/onlinetasks/sepa/CMakeLists.txt @@ -2,6 +2,7 @@ set ( sepa_STORAGE_PLUGIN_SCRS sepastorageplugin.cpp + ../../kmymoneystorageplugin.cpp ) add_library( credittransfer_sepa_storageplugin MODULE diff --git a/kmymoney/plugins/sql/onlinetasks/sepa/sepastorageplugin.h b/kmymoney/plugins/sql/onlinetasks/sepa/sepastorageplugin.h --- a/kmymoney/plugins/sql/onlinetasks/sepa/sepastorageplugin.h +++ b/kmymoney/plugins/sql/onlinetasks/sepa/sepastorageplugin.h @@ -19,7 +19,7 @@ #ifndef SEPASTORAGEPLUGIN_H #define SEPASTORAGEPLUGIN_H -#include "kmymoneystorageplugin.h" +#include "sql/kmymoneystorageplugin.h" #include diff --git a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/CMakeLists.txt b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/CMakeLists.txt --- a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/CMakeLists.txt +++ b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/CMakeLists.txt @@ -4,6 +4,7 @@ set ( IBAN_BIC_STORAGE_PLUGIN_SCRS ibanbicstorageplugin.cpp + ../../kmymoneystorageplugin.cpp ) add_library( payeeidentifier_ibanbic_storageplugin MODULE @@ -15,8 +16,6 @@ Qt5::Sql kmm_mymoney ) -# The json files of payeeidentifier_iban_bic are currently required -add_dependencies(payeeidentifier_ibanbic_storageplugin payeeidentifier_iban_bic) kcoreaddons_desktop_to_json(payeeidentifier_ibanbic_storageplugin "${CMAKE_CURRENT_BINARY_DIR}/kmymoney-ibanbic-storageplugin.desktop" diff --git a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h --- a/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h +++ b/kmymoney/plugins/sql/payeeidentifier/ibanandbic/ibanbicstorageplugin.h @@ -19,7 +19,7 @@ #ifndef IBANBICSTORAGEPLUGIN_H #define IBANBICSTORAGEPLUGIN_H -#include "mymoney/storage/kmymoneystorageplugin.h" +#include "sql/kmymoneystorageplugin.h" class ibanBicStoragePlugin : public KMyMoneyPlugin::storagePlugin { diff --git a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/CMakeLists.txt b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/CMakeLists.txt --- a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/CMakeLists.txt +++ b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/CMakeLists.txt @@ -2,6 +2,7 @@ set ( nationalAccount_STORAGE_PLUGIN_SCRS nationalaccountstorageplugin.cpp + ../../kmymoneystorageplugin.cpp ) add_library( payeeidentifier_nationalaccount_storageplugin MODULE diff --git a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h --- a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h +++ b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.h @@ -19,7 +19,7 @@ #ifndef NATIONALACCOUNTSTORAGEPLUGIN_H #define NATIONALACCOUNTSTORAGEPLUGIN_H -#include "mymoney/storage/kmymoneystorageplugin.h" +#include "sql/kmymoneystorageplugin.h" class nationalAccountStoragePlugin : public KMyMoneyPlugin::storagePlugin { diff --git a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp --- a/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp +++ b/kmymoney/plugins/sql/payeeidentifier/nationalaccount/nationalaccountstorageplugin.cpp @@ -24,7 +24,7 @@ #include #include -#include "kmymoneystorageplugin.h" +#include "sql/kmymoneystorageplugin.h" K_PLUGIN_FACTORY_WITH_JSON(nationalAccountStoragePluginFactory, "kmymoney-nationalaccountnumberplugin.json", registerPlugin();) diff --git a/kmymoney/plugins/sql/tests/CMakeLists.txt b/kmymoney/plugins/sql/tests/CMakeLists.txt --- a/kmymoney/plugins/sql/tests/CMakeLists.txt +++ b/kmymoney/plugins/sql/tests/CMakeLists.txt @@ -4,15 +4,19 @@ ../mymoneystoragesql.cpp ../mymoneydbdef.cpp ../mymoneydbdriver.cpp + ../kmymoneystorageplugin.cpp ) add_library(sqlstoragestatic STATIC ${sqlstoragestatic_SOURCES} ) kde_target_enable_exceptions(sqlstoragestatic PUBLIC) target_link_libraries(sqlstoragestatic PUBLIC + Qt5::Sql + KF5::CoreAddons kmm_plugin kmm_widgets kmm_utils_platformtools + onlinetask_interfaces ) file(GLOB tests_sources "*-test.cpp") @@ -24,5 +28,5 @@ kmm_plugin kmm_widgets kmm_utils_platformtools - onlinetask_unavailabletask + kmm_mymoney ) diff --git a/kmymoney/plugins/viewinterface.h b/kmymoney/plugins/viewinterface.h --- a/kmymoney/plugins/viewinterface.h +++ b/kmymoney/plugins/viewinterface.h @@ -31,7 +31,6 @@ // ---------------------------------------------------------------------------- // Project Includes -#include "mymoneymoney.h" #include "mymoneytransaction.h" #include "mymoneysplit.h" diff --git a/kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.cpp b/kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.cpp --- a/kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.cpp +++ b/kmymoney/plugins/views/onlinejoboutbox/onlinejobmodel.cpp @@ -32,7 +32,7 @@ #include "mymoney/onlinejobtyped.h" #include "payeeidentifier.h" #include "payeeidentifiertyped.h" -#include "ibanbic.h" +#include "payeeidentifier/ibanbic/ibanbic.h" #include "icons/icons.h" #include "mymoneyenums.h" diff --git a/kmymoney/views/CMakeLists.txt b/kmymoney/views/CMakeLists.txt --- a/kmymoney/views/CMakeLists.txt +++ b/kmymoney/views/CMakeLists.txt @@ -73,8 +73,6 @@ # TODO: Remove this dependency. But it is needed as long as the payee editor uses these objects directly # This should be replaced by virtual methods in a pure abstract object. target_link_libraries( views PUBLIC - payeeidentifier_iban_bic - payeeidentifier_nationalAccount kmm_mymoney # needed to load payeeIdentifier kmm_widgets ) diff --git a/kmymoney/views/payeeidentifierselectiondelegate.cpp b/kmymoney/views/payeeidentifierselectiondelegate.cpp --- a/kmymoney/views/payeeidentifierselectiondelegate.cpp +++ b/kmymoney/views/payeeidentifierselectiondelegate.cpp @@ -22,6 +22,8 @@ #include "payeeidentifier/payeeidentifierloader.h" #include "models/payeeidentifiercontainermodel.h" +#include "payeeidentifier/ibanbic/ibanbic.h" +#include "payeeidentifier/nationalaccount/nationalaccount.h" payeeIdentifierTypeSelectionWidget::payeeIdentifierTypeSelectionWidget(QWidget* parent) @@ -54,19 +56,31 @@ comboBox->addItem(i18n("Please select the account number type")); payeeIdentifierLoader *const loader = payeeIdentifierLoader::instance(); - QStringList pidids = loader->availableDelegates(); - Q_FOREACH(QString pidid, pidids) { - comboBox->addItem(loader->translatedDelegateName(pidid), QVariant(pidid)); + + for (const auto &pidid : loader->availableDelegates()) { + QString delegateName; + if (pidid == payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()) + delegateName = i18n("IBAN and BIC"); + else if (pidid == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid()) + delegateName = i18n("National Account Number"); + comboBox->addItem(delegateName, QVariant(pidid)); } + return comboBox; } void payeeIdentifierSelectionDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const { QComboBox *const comboBox = qobject_cast(editor); const QString selectedPidType = comboBox->model()->data(comboBox->model()->index(comboBox->currentIndex(), 0), Qt::UserRole).toString(); payeeIdentifier orig = model->data(index, payeeIdentifierContainerModel::payeeIdentifier).value(); - payeeIdentifier ident(orig.id(), payeeIdentifierLoader::instance()->createPayeeIdentifier(selectedPidType)); + + payeeIdentifier ident; + if (selectedPidType == payeeIdentifiers::ibanBic::staticPayeeIdentifierIid()) + ident = payeeIdentifier(orig.id(), new payeeIdentifiers::ibanBic()); + else if (selectedPidType == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid()) + ident = payeeIdentifier(orig.id(), new payeeIdentifiers::nationalAccount()); + model->setData(index, QVariant::fromValue(ident), payeeIdentifierContainerModel::payeeIdentifier); }