From 00cb2c85d96b0d27393f482827f25a65d260e852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 31 Mar 2018 13:05:34 +0100 Subject: [PATCH] d-pointerize CoreBackendManager --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 3 ++- src/backend/corebackendmanager.cpp | 25 ++++++++++++++++--------- src/backend/corebackendmanager.h | 19 +++++++------------ src/backend/corebackendmanager_p.h | 30 ++++++++++++++++++++++++++++++ test/CMakeLists.txt | 2 +- 6 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 src/backend/corebackendmanager_p.h diff --git a/CMakeLists.txt b/CMakeLists.txt index f6b5a63..ddb5423 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ set(VERSION_MAJOR "3") set(VERSION_MINOR "3") set(VERSION_RELEASE "0") set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}) -set(SOVERSION "8") +set(SOVERSION "9") add_definitions(-D'VERSION="${VERSION}"') #" set(CMAKE_CXX_STANDARD 14) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2b6365a..00b1b91 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -43,10 +43,11 @@ target_link_libraries( kpmcore PUBLIC ${UUID_LIBRARIES} ${BLKID_LIBRARIES} Qt5::DBus - KF5::Auth KF5::I18n KF5::CoreAddons KF5::WidgetsAddons + PRIVATE + KF5::Auth ) install(TARGETS kpmcore EXPORT KPMcoreTargets ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/backend/corebackendmanager.cpp b/src/backend/corebackendmanager.cpp index 89caf92..d961404 100644 --- a/src/backend/corebackendmanager.cpp +++ b/src/backend/corebackendmanager.cpp @@ -18,6 +18,7 @@ *************************************************************************/ #include "backend/corebackendmanager.h" +#include "backend/corebackendmanager_p.h" #include "backend/corebackend.h" #include @@ -36,7 +37,7 @@ #include CoreBackendManager::CoreBackendManager() : - m_Backend(nullptr) + d(std::make_unique()) { startExternalCommandHelper(); } @@ -51,6 +52,10 @@ CoreBackendManager* CoreBackendManager::self() return instance; } +CoreBackend* CoreBackendManager::backend() { + return d->m_Backend; +} + QVector CoreBackendManager::list() const { auto filter = [&](const KPluginMetaData &metaData) { @@ -68,17 +73,17 @@ void CoreBackendManager::startExternalCommandHelper() action.setHelperId(QStringLiteral("org.kde.kpmcore.externalcommand")); action.setTimeout(10 * 24 * 3600 * 1000); // 10 days QVariantMap arguments; - m_Uuid = QUuid::createUuid().toString(); + d->m_Uuid = QUuid::createUuid().toString(); arguments.insert(QStringLiteral("callerUuid"), Uuid()); action.setArguments(arguments); - m_job = action.execute(); + d->m_job = action.execute(); job()->start(); // Wait until ExternalCommand Helper is ready (helper sends newData signal just before it enters event loop) QEventLoop loop; - auto exitLoop = [&] () {loop.exit();}; + auto exitLoop = [&] () { loop.exit(); }; auto conn = QObject::connect(job(), &KAuth::ExecuteJob::newData, exitLoop); - QObject::connect(job(), &KJob::finished, [=] () { if(job()->error()) exitLoop(); } ); + QObject::connect(job(), &KJob::finished, [=] () { if(d->m_job->error()) exitLoop(); } ); loop.exec(); QObject::disconnect(conn); @@ -107,7 +112,11 @@ void CoreBackendManager::stopExternalCommandHelper() } KAuth::ExecuteJob* CoreBackendManager::job() { - return m_job; + return d->m_job; +} + +QString& CoreBackendManager::Uuid() { + return d->m_Uuid; } bool CoreBackendManager::load(const QString& name) @@ -120,7 +129,7 @@ bool CoreBackendManager::load(const QString& name) KPluginFactory* factory = loader.factory(); if (factory != nullptr) { - m_Backend = factory->create(nullptr); + d->m_Backend = factory->create(nullptr); QString id = loader.metaData().toVariantMap().value(QStringLiteral("MetaData")) .toMap().value(QStringLiteral("KPlugin")).toMap().value(QStringLiteral("Id")).toString(); @@ -142,6 +151,4 @@ bool CoreBackendManager::load(const QString& name) void CoreBackendManager::unload() { - delete m_Backend; - m_Backend = nullptr; } diff --git a/src/backend/corebackendmanager.h b/src/backend/corebackendmanager.h index a754252..d623b53 100644 --- a/src/backend/corebackendmanager.h +++ b/src/backend/corebackendmanager.h @@ -16,13 +16,13 @@ * along with this program. If not, see .* *************************************************************************/ -#if !defined(KPMCORE_COREBACKENDMANAGER_H) +#ifndef KPMCORE_COREBACKENDMANAGER_H #define KPMCORE_COREBACKENDMANAGER_H #include "util/libpartitionmanagerexport.h" -#include +#include #include #include @@ -31,6 +31,8 @@ class QString; class QStringList; class KPluginMetaData; class CoreBackend; +namespace KAuth { class ExecuteJob; } +struct CoreBackendManagerPrivate; /** * The backend manager class. @@ -77,16 +79,12 @@ public: /** * @return a pointer to the currently loaded backend */ - CoreBackend* backend() { - return m_Backend; - } + CoreBackend* backend(); /** * @return a pointer to the currently loaded backend */ - QString& Uuid() { - return m_Uuid; - } + QString& Uuid(); /** * @return a pointer to the KAuth job @@ -102,10 +100,7 @@ private: void startExternalCommandHelper(); private: - CoreBackend *m_Backend; - KAuth::ExecuteJob *m_job; - - QString m_Uuid; + std::unique_ptr d; }; #endif diff --git a/src/backend/corebackendmanager_p.h b/src/backend/corebackendmanager_p.h new file mode 100644 index 0000000..0037ec5 --- /dev/null +++ b/src/backend/corebackendmanager_p.h @@ -0,0 +1,30 @@ +/************************************************************************* + * Copyright (C) 2018 by Andrius Štikonas * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation; either version 3 of * + * the License, or (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see .* + *************************************************************************/ + +#if !defined(KPMCORE_COREBACKENDMANAGER_P_H) + +#define KPMCORE_COREBACKENDMANAGER_P_H + +struct CoreBackendManagerPrivate +{ + KAuth::ExecuteJob *m_job; + CoreBackend *m_Backend; + + QString m_Uuid; +}; + +#endif diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 25151b8..f08c9af 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,7 +16,7 @@ add_compile_options(-fPIC) # and to add a test with the given name. # add_library(testhelpers STATIC helpers.cpp) -target_link_libraries(testhelpers KF5::Auth) +target_link_libraries(testhelpers) macro (kpm_test name) add_executable(${name} ${ARGN})