diff --git a/.reuse/dep5 b/.reuse/dep5 index dfdd927..9902cf9 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -14,11 +14,6 @@ Copyright: 2018 Andrius Štikonas Copyright: 2020 KDE translators ### DBus interfaces -Files: src/util/org.kde.kpmcore.*.conf +Files: src/util/org.kde.kpmcore.helperinterface.conf License: MIT Copyright: 2018 Andrius Štikonas - -### KAuth actions -Files: src/util/org.kde.kpmcore.externalcommand.actions -License: CC0-1.0 -Copyright: 2018 Andrius Štikonas diff --git a/CMakeLists.txt b/CMakeLists.txt index 17a9f9e..7a4965b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,30 +5,32 @@ # SPDX-License-Identifier: GPL-3.0-or-later -project(kpmcore) - cmake_minimum_required(VERSION 3.1 FATAL_ERROR) +# KDE Application Version, managed by release script +set (RELEASE_SERVICE_VERSION_MAJOR "21") +set (RELEASE_SERVICE_VERSION_MINOR "03") +set (RELEASE_SERVICE_VERSION_MICRO "70") +set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") +project(kpmcore VERSION ${RELEASE_SERVICE_VERSION}) + +set(SOVERSION "11") +add_definitions(-D'VERSION="${RELEASE_SERVICE_VERSION}"') #" + + set(CMAKE_USE_RELATIVE_PATHS OFF) set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) # Dependencies -set(QT_MIN_VERSION "5.10.0") -set(KF5_MIN_VERSION "5.56") +set(QT_MIN_VERSION "5.14.0") +set(KF5_MIN_VERSION "5.73") set(BLKID_MIN_VERSION "2.33.2") -# Qca-qt5 (tested with botan and ossl backends) +# PolkitQt5-1 # Runtime # smartmontools 7.0 -set(VERSION_MAJOR "4") -set(VERSION_MINOR "2") -set(VERSION_RELEASE "0") -set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}) -set(SOVERSION "10") -add_definitions(-D'VERSION="${VERSION}"') #" - -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE) @@ -42,7 +44,7 @@ include(GenerateExportHeader) include(ECMSetupVersion) include(ECMConfiguredInstall) -ecm_setup_version(${VERSION} VARIABLE_PREFIX KPMCORE +ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX KPMCORE VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kpmcore_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KPMcoreConfigVersion.cmake" SOVERSION ${SOVERSION}) @@ -56,13 +58,12 @@ find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS # Load the frameworks we need find_package(KF5 ${KF5_MIN_VERSION} REQUIRED - Auth CoreAddons I18n WidgetsAddons ) -find_package(Qca-qt5 REQUIRED) +find_package(PolkitQt5-1 REQUIRED) # use sane compile flags add_definitions( @@ -107,10 +108,10 @@ install(EXPORT KPMcoreTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KPMc ki18n_install(po) set_target_properties( kpmcore - PROPERTIES VERSION ${VERSION} SOVERSION ${SOVERSION} + PROPERTIES VERSION ${RELEASE_SERVICE_VERSION} SOVERSION ${SOVERSION} ) -message(STATUS "kpmcore ${VERSION} will be built for install into ${CMAKE_INSTALL_PREFIX}") +message(STATUS "kpmcore ${RELEASE_SERVICE_VERSION} will be built for install into ${CMAKE_INSTALL_PREFIX}") feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fda245d..b6adca0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,7 +33,6 @@ target_link_libraries( kpmcore PUBLIC ${BLKID_LIBRARIES} Qt5::DBus Qt5::Gui - qca-qt5 KF5::I18n KF5::CoreAddons KF5::WidgetsAddons diff --git a/src/Messages.sh b/src/Messages.sh index b77c458..7648be5 100644 --- a/src/Messages.sh +++ b/src/Messages.sh @@ -4,7 +4,4 @@ # SPDX-License-Identifier: MIT -$EXTRACTRC `find -name \*.rc` >> rc.cpp || exit 11 -$EXTRACTRC `find -name \*.ui` >> rc.cpp || exit 12 -$XGETTEXT `find -name \*.cc -o -name \*.cpp -o -name \*.h` rc.cpp -o $podir/kpmcore.pot -rm -f rc.cpp +$XGETTEXT $(find -name \*.cc -o -name \*.cpp -o -name \*.h$) -o $podir/kpmcore.pot diff --git a/src/XmlMessages.sh b/src/XmlMessages.sh new file mode 100644 index 0000000..e342baf --- /dev/null +++ b/src/XmlMessages.sh @@ -0,0 +1,26 @@ +# SPDX-FileCopyrightText: 2020 Andrius Štikonas +# SPDX-License-Identifier: MIT + +function get_files +{ + echo util/org.kde.kpmcore.externalcommand.policy +} + +function po_for_file +{ + case "$1" in + util/org.kde.kpmcore.externalcommand.policy) + echo kpmcore._policy_.po + ;; + esac +} + +function tags_for_file +{ + case "$1" in + util/org.kde.kpmcore.externalcommand.policy) + echo description + echo message + ;; + esac +} diff --git a/src/backend/corebackend.h b/src/backend/corebackend.h index ddb4341..c828a1b 100644 --- a/src/backend/corebackend.h +++ b/src/backend/corebackend.h @@ -47,7 +47,7 @@ class LIBKPMCORE_EXPORT CoreBackend : public QObject protected: CoreBackend(); - virtual ~CoreBackend(); + ~CoreBackend() override; Q_SIGNALS: /** diff --git a/src/core/device.h b/src/core/device.h index 01d9d6f..df5d5b9 100644 --- a/src/core/device.h +++ b/src/core/device.h @@ -56,7 +56,7 @@ public: public: explicit Device(const Device& other); - virtual ~Device(); + ~Device() override; virtual bool operator==(const Device& other) const; virtual bool operator!=(const Device& other) const; diff --git a/src/core/fstab.cpp b/src/core/fstab.cpp index 16b94fc..dd6b79c 100644 --- a/src/core/fstab.cpp +++ b/src/core/fstab.cpp @@ -72,7 +72,7 @@ FstabEntryList readFstabEntries( const QString& fstabPath ) } QString comment = line.section( QLatin1Char('#'), 1 ); - QStringList splitLine = line.section( QLatin1Char('#'), 0, 0 ).split( QRegularExpression(QStringLiteral("[\\s]+")), QString::SkipEmptyParts ); + QStringList splitLine = line.section( QLatin1Char('#'), 0, 0 ).split( QRegularExpression(QStringLiteral("[\\s]+")), Qt::SkipEmptyParts ); // We now split the standard components of /etc/fstab entry: // (0) path, or UUID, or LABEL, etc, @@ -83,7 +83,7 @@ FstabEntryList readFstabEntries( const QString& fstabPath ) // (5) pass number (optional, defaults to 0), no comment is allowed if omitted, // (#) comment (optional). auto fsSpec = splitLine.at(0); - auto mountPoint = splitLine.at(1); + auto mountPoint = unescapeSpaces(splitLine.at(1)); auto fsType = splitLine.at(2); auto options = splitLine.at(3); @@ -110,6 +110,22 @@ FstabEntryList readFstabEntries( const QString& fstabPath ) return fstabEntries; } +QString escapeSpaces(const QString& mountPoint) +{ + QString tmp = mountPoint; + tmp.replace(QStringLiteral(" "), QStringLiteral("\\040")); + tmp.replace(QStringLiteral("\t"), QStringLiteral("\\011")); + return tmp; +} + +QString unescapeSpaces(const QString& mountPoint) +{ + QString tmp = mountPoint; + tmp.replace(QStringLiteral("\\040"), QStringLiteral(" ")); + tmp.replace(QStringLiteral("\\011"), QStringLiteral("\t")); + return tmp; +} + void FstabEntry::setFsSpec(const QString& s) { d->m_fsSpec = s; @@ -208,8 +224,8 @@ static QString findBlkIdDevice(const char *token, const QString& value) free(c); } #else - Q_UNUSED(token); - Q_UNUSED(value); + Q_UNUSED(token) + Q_UNUSED(value) #endif return rval; @@ -262,7 +278,7 @@ static void writeEntry(QTextStream& s, const FstabEntry& entry, std::array FstabEntryList; +QString escapeSpaces(const QString& mountPoint); +QString unescapeSpaces(const QString& mountPoint); + LIBKPMCORE_EXPORT FstabEntryList readFstabEntries(const QString& fstabPath = QStringLiteral("/etc/fstab")); LIBKPMCORE_EXPORT QStringList possibleMountPoints(const QString& deviceNode, const QString& fstabPath = QStringLiteral("/etc/fstab")); LIBKPMCORE_EXPORT bool writeMountpoints(const FstabEntryList& fstabEntries, const QString& filename = QStringLiteral("/etc/fstab")); diff --git a/src/core/lvmdevice.cpp b/src/core/lvmdevice.cpp index 40ede02..1245b27 100644 --- a/src/core/lvmdevice.cpp +++ b/src/core/lvmdevice.cpp @@ -1,6 +1,6 @@ /* SPDX-FileCopyrightText: 2016 Chantara Tith - SPDX-FileCopyrightText: 2016-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2016-2020 Andrius Štikonas SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho SPDX-FileCopyrightText: 2019 Yuri Chornoivan @@ -21,6 +21,8 @@ #include "util/globallog.h" #include "util/report.h" +#include + #include #include #include @@ -214,7 +216,7 @@ void LvmDevice::scanSystemLVM(QList& devices) // Inform LvmDevice about which physical volumes form that particular LvmDevice for (const auto &d : lvmList) - for (const auto &p : qAsConst(LVM::pvList::list())) + for (const auto &p : std::as_const(LVM::pvList::list())) if (p.vgName() == d->name()) d->physicalVolumes().append(p.partition()); @@ -263,7 +265,7 @@ const QStringList LvmDevice::getVGs() QStringList vgList; QString output = getField(QStringLiteral("vg_name")); if (!output.isEmpty()) { - const QStringList vgNameList = output.split(QLatin1Char('\n'), QString::SkipEmptyParts); + const QStringList vgNameList = output.split(QLatin1Char('\n'), Qt::SkipEmptyParts); for (const auto &vgName : vgNameList) { vgList.append(vgName.trimmed()); } @@ -277,7 +279,7 @@ const QStringList LvmDevice::getLVs(const QString& vgName) QString cmdOutput = getField(QStringLiteral("lv_path"), vgName); if (cmdOutput.size()) { - const QStringList tempPathList = cmdOutput.split(QLatin1Char('\n'), QString::SkipEmptyParts); + const QStringList tempPathList = cmdOutput.split(QLatin1Char('\n'), Qt::SkipEmptyParts); for (const auto &lvPath : tempPathList) { lvPathList.append(lvPath.trimmed()); } diff --git a/src/core/lvmdevice.h b/src/core/lvmdevice.h index 8a4530f..a52d95e 100644 --- a/src/core/lvmdevice.h +++ b/src/core/lvmdevice.h @@ -40,7 +40,7 @@ class LIBKPMCORE_EXPORT LvmDevice : public VolumeManagerDevice public: explicit LvmDevice(const QString& name, const QString& iconName = QString()); - ~LvmDevice(); + ~LvmDevice() override; public: const QStringList deviceNodes() const override; diff --git a/src/core/operationstack.h b/src/core/operationstack.h index 3e2e3cb..0ce0c5d 100644 --- a/src/core/operationstack.h +++ b/src/core/operationstack.h @@ -45,7 +45,7 @@ public: public: explicit OperationStack(QObject* parent = nullptr); - ~OperationStack(); + ~OperationStack() override; Q_SIGNALS: void operationsChanged(); diff --git a/src/core/partitionnode.h b/src/core/partitionnode.h index ed51787..30a0889 100644 --- a/src/core/partitionnode.h +++ b/src/core/partitionnode.h @@ -33,7 +33,7 @@ public: protected: PartitionNode() {} - virtual ~PartitionNode() {} + ~PartitionNode() override {} public: virtual bool insert(Partition* partNew); diff --git a/src/core/partitiontable.cpp b/src/core/partitiontable.cpp index 60ad8bb..05e36f1 100644 --- a/src/core/partitiontable.cpp +++ b/src/core/partitiontable.cpp @@ -23,6 +23,8 @@ #include "util/globallog.h" +#include + #include #include @@ -592,7 +594,7 @@ QTextStream& operator<<(QTextStream& stream, const PartitionTable& ptable) std::sort(partitions.begin(), partitions.end(), [](const Partition* p1, const Partition* p2) { return p1->number() < p2->number(); }); - for (const auto &p : qAsConst(partitions)) + for (const auto &p : std::as_const(partitions)) stream << *p; return stream; diff --git a/src/core/raid/softwareraid.cpp b/src/core/raid/softwareraid.cpp index 78ed8cd..3d3a8a0 100644 --- a/src/core/raid/softwareraid.cpp +++ b/src/core/raid/softwareraid.cpp @@ -15,6 +15,8 @@ #include "ops/createpartitiontableoperation.h" #include "util/externalcommand.h" +#include + #include #include #include @@ -206,7 +208,7 @@ void SoftwareRAID::scanSoftwareRAID(QList& devices) d->setPartitionNodes(partitionNodes); - for (const Device* dev : qAsConst(devices)) { + for (const Device* dev : std::as_const(devices)) { if (dev->partitionTable()) { for (const Partition* p : dev->partitionTable()->children()) if (getRaidArrayName(p->deviceNode()) == d->deviceNode()) @@ -234,7 +236,7 @@ void SoftwareRAID::scanSoftwareRAID(QList& devices) } } - for (const QString& name : qAsConst(availableInConf)) { + for (const QString& name : std::as_const(availableInConf)) { SoftwareRAID *raidDevice = new SoftwareRAID(name, SoftwareRAID::Status::Inactive); devices << raidDevice; } @@ -386,7 +388,7 @@ bool SoftwareRAID::createSoftwareRAID(Report &report, QStringLiteral("--chunk=") + QString::number(chunkSize), QStringLiteral("--raid-devices=") + QString::number(devicePathList.size()) }; - for (const QString &p : qAsConst(devicePathList)) { + for (const QString &p : std::as_const(devicePathList)) { eraseDeviceMDSuperblock(p); args << p; diff --git a/src/core/smartattributeparseddata.cpp b/src/core/smartattributeparseddata.cpp index 0f41b71..0280abe 100644 --- a/src/core/smartattributeparseddata.cpp +++ b/src/core/smartattributeparseddata.cpp @@ -1,7 +1,7 @@ /* SPDX-FileCopyrightText: 2008 Lennart Poettering SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho - SPDX-FileCopyrightText: 2018-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2018-2020 Andrius Štikonas SPDX-License-Identifier: GPL-3.0-or-later */ @@ -9,6 +9,8 @@ #include "smartattributeparseddata.h" #include "core/smartdiskinformation.h" +#include + #include #include #include @@ -615,7 +617,7 @@ static SmartQuirk getQuirk(QString model, QString firmware) QRegularExpression modelRegex; QRegularExpression firmwareRegex; - for (const SmartAttributeParsedData::SmartQuirkDataBase &item : qAsConst(db)) { + for (const SmartAttributeParsedData::SmartQuirkDataBase &item : std::as_const(db)) { if (!item.model.isEmpty()) { modelRegex.setPattern(item.model); QRegularExpressionMatch match = modelRegex.match(model); diff --git a/src/core/smartdiskinformation.cpp b/src/core/smartdiskinformation.cpp index f4e4d43..a893a89 100644 --- a/src/core/smartdiskinformation.cpp +++ b/src/core/smartdiskinformation.cpp @@ -1,6 +1,6 @@ /* SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho - SPDX-FileCopyrightText: 2018-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2018-2020 Andrius Štikonas SPDX-License-Identifier: GPL-3.0-or-later */ @@ -9,6 +9,7 @@ #include "core/smartattributeparseddata.h" #include +#include static quint64 u64log2(quint64 n); @@ -145,7 +146,7 @@ bool SmartDiskInformation::updatePowerCycle() /** Validate disk attributes status */ void SmartDiskInformation::validateBadAttributes() { - for (const SmartAttributeParsedData &attribute : qAsConst(m_Attributes)) { + for (const SmartAttributeParsedData &attribute : std::as_const(m_Attributes)) { if (attribute.prefailure()) { if (attribute.goodNowValid() && !attribute.goodNow()) m_BadAttributeNow = true; @@ -161,7 +162,7 @@ void SmartDiskInformation::validateBadAttributes() SmartAttributeParsedData *SmartDiskInformation::findAttribute(quint32 id) { SmartAttributeParsedData *attr = nullptr; - for (const SmartAttributeParsedData &attribute : qAsConst(m_Attributes)) { + for (const SmartAttributeParsedData &attribute : std::as_const(m_Attributes)) { if (id == attribute.id()) { attr = new SmartAttributeParsedData(attribute); break; diff --git a/src/core/smartparser.cpp b/src/core/smartparser.cpp index 34face9..80c73f1 100644 --- a/src/core/smartparser.cpp +++ b/src/core/smartparser.cpp @@ -1,5 +1,6 @@ /* SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho + SPDX-FileCopyrightText: 2020 Andrius Štikonas SPDX-License-Identifier: GPL-3.0-or-later */ @@ -12,6 +13,7 @@ #include "util/externalcommand.h" #include +#include #include #include @@ -147,7 +149,7 @@ void SmartParser::loadAttributes() return; } - for (const QJsonValue &value : qAsConst(attributeArray)) { + for (const QJsonValue &value : std::as_const(attributeArray)) { SmartAttributeParsedData parsedObject(m_DiskInformation, value.toObject()); m_DiskInformation->addAttribute(parsedObject); } diff --git a/src/core/smartstatus.cpp b/src/core/smartstatus.cpp index ca326f4..be7597a 100644 --- a/src/core/smartstatus.cpp +++ b/src/core/smartstatus.cpp @@ -1,7 +1,7 @@ /* SPDX-FileCopyrightText: 2010 Volker Lanz SPDX-FileCopyrightText: 2010 Yuri Chornoivan - SPDX-FileCopyrightText: 2014-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2014-2020 Andrius Štikonas SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho SPDX-FileCopyrightText: 2019 Shubham Jangra @@ -22,6 +22,7 @@ #include #include +#include SmartStatus::SmartStatus(const QString &device_path) : m_DevicePath(device_path), @@ -144,7 +145,7 @@ void SmartStatus::addAttributes(QList attr) { m_Attributes.clear(); - for (const SmartAttributeParsedData &at : qAsConst(attr)) { + for (const SmartAttributeParsedData &at : std::as_const(attr)) { SmartAttribute sm(at); m_Attributes.append(sm); } diff --git a/src/fs/filesystemfactory.cpp b/src/fs/filesystemfactory.cpp index 29978ee..329490c 100644 --- a/src/fs/filesystemfactory.cpp +++ b/src/fs/filesystemfactory.cpp @@ -1,6 +1,6 @@ /* SPDX-FileCopyrightText: 2008-2010 Volker Lanz - SPDX-FileCopyrightText: 2012-2019 Andrius Štikonas + SPDX-FileCopyrightText: 2012-2020 Andrius Štikonas SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac SPDX-FileCopyrightText: 2017 Pali Rohár SPDX-FileCopyrightText: 2019 Shubham Jangra @@ -10,6 +10,8 @@ SPDX-License-Identifier: GPL-3.0-or-later */ +#include + #include "fs/filesystemfactory.h" #include "fs/filesystem.h" @@ -92,7 +94,7 @@ void FileSystemFactory::init() fileSystems.insert(FileSystem::Type::Xfs, new FS::xfs(-1, -1, -1, QString())); fileSystems.insert(FileSystem::Type::Zfs, new FS::zfs(-1, -1, -1, QString())); - for (const auto &fs : qAsConst(fileSystems)) + for (const auto &fs : std::as_const(fileSystems)) fs->init(); qDeleteAll(m_FileSystems); diff --git a/src/gui/partwidgetbase.h b/src/gui/partwidgetbase.h index 64536d4..fb244a5 100644 --- a/src/gui/partwidgetbase.h +++ b/src/gui/partwidgetbase.h @@ -33,7 +33,7 @@ class LIBKPMCORE_EXPORT PartWidgetBase : public QWidget protected: PartWidgetBase(QWidget* parent) : QWidget(parent) {} - virtual ~PartWidgetBase() {} + ~PartWidgetBase() override {} public: virtual qint32 borderWidth() const { diff --git a/src/jobs/job.h b/src/jobs/job.h index cc32c4d..f2a9348 100644 --- a/src/jobs/job.h +++ b/src/jobs/job.h @@ -49,7 +49,7 @@ protected: Job(); public: - virtual ~Job() {} + ~Job() override {} Q_SIGNALS: void started(); diff --git a/src/ops/newoperation.cpp b/src/ops/newoperation.cpp index e27c6d5..74d52e6 100644 --- a/src/ops/newoperation.cpp +++ b/src/ops/newoperation.cpp @@ -31,37 +31,56 @@ #include +struct NewOperationPrivate +{ + NewOperationPrivate(Device& d, Partition* p) : + m_TargetDevice(d), + m_NewPartition(p), + m_CreatePartitionJob(new CreatePartitionJob(d, *p)), + m_SetPartitionLabelJob(nullptr), + m_SetPartitionUUIDJob(nullptr), + m_SetPartitionAttributesJob(nullptr), + m_CreateFileSystemJob(nullptr), + m_SetPartFlagsJob(nullptr), + m_SetFileSystemLabelJob(nullptr), + m_CheckFileSystemJob(nullptr) + { + } + + Device& m_TargetDevice; + Partition* m_NewPartition; + CreatePartitionJob* m_CreatePartitionJob; + SetPartitionLabelJob* m_SetPartitionLabelJob; + SetPartitionUUIDJob* m_SetPartitionUUIDJob; + SetPartitionAttributesJob* m_SetPartitionAttributesJob; + CreateFileSystemJob* m_CreateFileSystemJob; + SetPartFlagsJob* m_SetPartFlagsJob; + SetFileSystemLabelJob* m_SetFileSystemLabelJob; + CheckFileSystemJob* m_CheckFileSystemJob; +}; + /** Creates a new NewOperation. @param d the Device to create a new Partition on @param p pointer to the new Partition to create. May not be nullptr. */ NewOperation::NewOperation(Device& d, Partition* p) : Operation(), - m_TargetDevice(d), - m_NewPartition(p), - m_CreatePartitionJob(new CreatePartitionJob(targetDevice(), newPartition())), - m_SetPartitionLabelJob(nullptr), - m_SetPartitionUUIDJob(nullptr), - m_SetPartitionAttributesJob(nullptr), - m_CreateFileSystemJob(nullptr), - m_SetPartFlagsJob(nullptr), - m_SetFileSystemLabelJob(nullptr), - m_CheckFileSystemJob(nullptr) + d_ptr(std::make_unique(d, p)) { addJob(createPartitionJob()); if (!p->label().isEmpty()) { - m_SetPartitionLabelJob = new SetPartitionLabelJob(targetDevice(), newPartition(), p->label()); + d_ptr->m_SetPartitionLabelJob = new SetPartitionLabelJob(targetDevice(), newPartition(), p->label()); addJob(setPartitionLabelJob()); } if (!p->uuid().isEmpty()) { - m_SetPartitionUUIDJob = new SetPartitionUUIDJob(targetDevice(), newPartition(), p->uuid()); + d_ptr->m_SetPartitionUUIDJob = new SetPartitionUUIDJob(targetDevice(), newPartition(), p->uuid()); addJob(setPartitionUUIDJob()); } if (p->attributes()) { - m_SetPartitionAttributesJob = new SetPartitionAttributesJob(targetDevice(), newPartition(), p->attributes()); + d_ptr->m_SetPartitionAttributesJob = new SetPartitionAttributesJob(targetDevice(), newPartition(), p->attributes()); addJob(setPartitionAttributesJob()); } @@ -74,18 +93,18 @@ NewOperation::NewOperation(Device& d, Partition* p) : // label. The operation stack will merge these operations with this one here // and if the jobs don't exist things will break. - m_CreateFileSystemJob = new CreateFileSystemJob(targetDevice(), newPartition(), fs.label()); + d_ptr->m_CreateFileSystemJob = new CreateFileSystemJob(targetDevice(), newPartition(), fs.label()); addJob(createFileSystemJob()); if (fs.type() == FileSystem::Type::Lvm2_PV) { - m_SetPartFlagsJob = new SetPartFlagsJob(targetDevice(), newPartition(), PartitionTable::Flag::Lvm); + d_ptr->m_SetPartFlagsJob = new SetPartFlagsJob(targetDevice(), newPartition(), PartitionTable::Flag::Lvm); addJob(setPartFlagsJob()); } - m_SetFileSystemLabelJob = new SetFileSystemLabelJob(newPartition(), fs.label()); + d_ptr->m_SetFileSystemLabelJob = new SetFileSystemLabelJob(newPartition(), fs.label()); addJob(setLabelJob()); - m_CheckFileSystemJob = new CheckFileSystemJob(newPartition()); + d_ptr->m_CheckFileSystemJob = new CheckFileSystemJob(newPartition()); addJob(checkJob()); } } @@ -93,7 +112,67 @@ NewOperation::NewOperation(Device& d, Partition* p) : NewOperation::~NewOperation() { if (status() == StatusPending) - delete m_NewPartition; + delete d_ptr->m_NewPartition; +} + +Partition& NewOperation::newPartition() +{ + return *d_ptr->m_NewPartition; +} + +const Partition& NewOperation::newPartition() const +{ + return *d_ptr->m_NewPartition; +} + +Device& NewOperation::targetDevice() +{ + return d_ptr->m_TargetDevice; +} + +const Device& NewOperation::targetDevice() const +{ + return d_ptr->m_TargetDevice; +} + +CreatePartitionJob* NewOperation::createPartitionJob() +{ + return d_ptr->m_CreatePartitionJob; +} + +SetPartitionLabelJob* NewOperation::setPartitionLabelJob() +{ + return d_ptr->m_SetPartitionLabelJob; +} + +SetPartitionUUIDJob* NewOperation::setPartitionUUIDJob() +{ + return d_ptr->m_SetPartitionUUIDJob; +} + +SetPartitionAttributesJob* NewOperation::setPartitionAttributesJob() +{ + return d_ptr->m_SetPartitionAttributesJob; +} + +CreateFileSystemJob* NewOperation::createFileSystemJob() +{ + return d_ptr->m_CreateFileSystemJob; +} + +SetPartFlagsJob* NewOperation::setPartFlagsJob() +{ + return d_ptr->m_SetPartFlagsJob; +} + +SetFileSystemLabelJob* NewOperation::setLabelJob() +{ + return d_ptr->m_SetFileSystemLabelJob; +} + +CheckFileSystemJob* NewOperation::checkJob() +{ + return d_ptr->m_CheckFileSystemJob; } bool NewOperation::targets(const Device& d) const diff --git a/src/ops/newoperation.h b/src/ops/newoperation.h index 4909911..63c408c 100644 --- a/src/ops/newoperation.h +++ b/src/ops/newoperation.h @@ -17,6 +17,7 @@ #include +struct NewOperationPrivate; class Device; class OperationStack; @@ -60,56 +61,23 @@ public: static Partition* createNew(const Partition& cloneFrom, FileSystem::Type type); protected: - Partition& newPartition() { - return *m_NewPartition; - } - const Partition& newPartition() const { - return *m_NewPartition; - } + Partition& newPartition(); + const Partition& newPartition() const; - Device& targetDevice() { - return m_TargetDevice; - } - const Device& targetDevice() const { - return m_TargetDevice; - } + Device& targetDevice(); + const Device& targetDevice() const; - CreatePartitionJob* createPartitionJob() { - return m_CreatePartitionJob; - } - SetPartitionLabelJob* setPartitionLabelJob() { - return m_SetPartitionLabelJob; - } - SetPartitionUUIDJob* setPartitionUUIDJob() { - return m_SetPartitionUUIDJob; - } - SetPartitionAttributesJob* setPartitionAttributesJob() { - return m_SetPartitionAttributesJob; - } - CreateFileSystemJob* createFileSystemJob() { - return m_CreateFileSystemJob; - } - SetPartFlagsJob* setPartFlagsJob() { - return m_SetPartFlagsJob; - } - SetFileSystemLabelJob* setLabelJob() { - return m_SetFileSystemLabelJob; - } - CheckFileSystemJob* checkJob() { - return m_CheckFileSystemJob; - } + CreatePartitionJob* createPartitionJob(); + SetPartitionLabelJob* setPartitionLabelJob(); + SetPartitionUUIDJob* setPartitionUUIDJob(); + SetPartitionAttributesJob* setPartitionAttributesJob(); + CreateFileSystemJob* createFileSystemJob(); + SetPartFlagsJob* setPartFlagsJob(); + SetFileSystemLabelJob* setLabelJob(); + CheckFileSystemJob* checkJob(); private: - Device& m_TargetDevice; - Partition* m_NewPartition; - CreatePartitionJob* m_CreatePartitionJob; - SetPartitionLabelJob* m_SetPartitionLabelJob; - SetPartitionUUIDJob* m_SetPartitionUUIDJob; - SetPartitionAttributesJob* m_SetPartitionAttributesJob; - CreateFileSystemJob* m_CreateFileSystemJob; - SetPartFlagsJob* m_SetPartFlagsJob; - SetFileSystemLabelJob* m_SetFileSystemLabelJob; - CheckFileSystemJob* m_CheckFileSystemJob; + std::unique_ptr d_ptr; }; #endif diff --git a/src/ops/operation.h b/src/ops/operation.h index 5321e07..abcf32d 100644 --- a/src/ops/operation.h +++ b/src/ops/operation.h @@ -85,7 +85,7 @@ public: protected: Operation(); - virtual ~Operation(); + ~Operation() override; Q_SIGNALS: void progress(int); diff --git a/src/ops/resizevolumegroupoperation.cpp b/src/ops/resizevolumegroupoperation.cpp index b78a5e5..c2c9443 100644 --- a/src/ops/resizevolumegroupoperation.cpp +++ b/src/ops/resizevolumegroupoperation.cpp @@ -1,6 +1,6 @@ /* SPDX-FileCopyrightText: 2016 Chantara Tith - SPDX-FileCopyrightText: 2016-2018 Andrius Štikonas + SPDX-FileCopyrightText: 2016-2020 Andrius Štikonas SPDX-License-Identifier: GPL-3.0-or-later */ @@ -14,7 +14,8 @@ #include "jobs/movephysicalvolumejob.h" #include "util/helpers.h" -#include +#include + #include #include diff --git a/src/plugins/sfdisk/sfdiskbackend.cpp b/src/plugins/sfdisk/sfdiskbackend.cpp index 8dccc4f..cece3f4 100644 --- a/src/plugins/sfdisk/sfdiskbackend.cpp +++ b/src/plugins/sfdisk/sfdiskbackend.cpp @@ -31,6 +31,8 @@ #include "util/externalcommand.h" #include "util/helpers.h" +#include + #include #include #include @@ -278,7 +280,7 @@ Device* SfdiskBackend::scanDevice(const QString& deviceNode) { QList availableDevices = scanDevices(); - for (Device *device : qAsConst(availableDevices)) + for (Device *device : std::as_const(availableDevices)) if (device && device->deviceNode() == deviceNode) return device; } @@ -340,7 +342,7 @@ void SfdiskBackend::scanDevicePartitions(Device& d, const QJsonArray& jsonPartit if (d.partitionTable()->isSectorBased(d)) d.partitionTable()->setType(d, PartitionTable::msdos_sectorbased); - for (const Partition *part : qAsConst(partitions)) + for (const Partition *part : std::as_const(partitions)) PartitionAlignment::isAligned(d, *part); } diff --git a/src/plugins/sfdisk/sfdiskdevice.h b/src/plugins/sfdisk/sfdiskdevice.h index 3202d2c..ee633c0 100644 --- a/src/plugins/sfdisk/sfdiskdevice.h +++ b/src/plugins/sfdisk/sfdiskdevice.h @@ -20,7 +20,7 @@ class CoreBackendPartitionTable; class SfdiskDevice : public CoreBackendDevice { - Q_DISABLE_COPY(SfdiskDevice); + Q_DISABLE_COPY(SfdiskDevice) public: explicit SfdiskDevice(const Device& d); diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 0f606e8..4bd3a8a 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2008,2012 Volker Lanz # SPDX-FileCopyrightText: 2015 Chris Campbell # SPDX-FileCopyrightText: 2015 Teo Mrnjavac -# SPDX-FileCopyrightText: 2015 Andrius Štikonas +# SPDX-FileCopyrightText: 2015-2020 Andrius Štikonas # SPDX-FileCopyrightText: 2018 Huzaifa Faruqui # SPDX-FileCopyrightText: 2019 Albert Astals Cid # SPDX-FileCopyrightText: 2019 Antonio Rojas @@ -9,7 +9,6 @@ # SPDX-License-Identifier: GPL-3.0-or-later -set(application_interface_xml org.kde.kpmcore.applicationinterface.xml) set(helper_interface_xml org.kde.kpmcore.helperinterface.xml) qt5_generate_dbus_interface( @@ -24,10 +23,6 @@ qt5_generate_dbus_interface( OPTIONS -a ) - -find_package(PolkitQt5-1 REQUIRED) - -qt5_add_dbus_interface(ApplicationInterface_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${application_interface_xml} externalcommand_interface) qt5_add_dbus_interface(HelperInterface_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${helper_interface_xml} externalcommandhelper_interface) set(UTIL_SRC @@ -51,7 +46,6 @@ set(UTIL_LIB_HDRS ) add_executable(kpmcore_externalcommand - ${ApplicationInterface_SRCS} util/externalcommandhelper.cpp ) @@ -64,10 +58,8 @@ add_definitions( ) target_link_libraries(kpmcore_externalcommand - qca-qt5 Qt5::Core Qt5::DBus - KF5::AuthCore KF5::I18n PolkitQt5-1::Core ) @@ -75,9 +67,8 @@ target_link_libraries(kpmcore_externalcommand install(TARGETS kpmcore_mdadmupdateconf DESTINATION ${LIBEXEC_INSTALL_DIR}) install(TARGETS kpmcore_externalcommand DESTINATION ${KDE_INSTALL_LIBEXECDIR}) install( FILES util/org.kde.kpmcore.helperinterface.conf DESTINATION ${KDE_INSTALL_DBUSDIR}/system.d ) -install( FILES util/org.kde.kpmcore.applicationinterface.conf DESTINATION ${KDE_INSTALL_DBUSDIR}/system.d ) -kauth_install_actions(org.kde.kpmcore.externalcommand util/org.kde.kpmcore.externalcommand.actions) +install( FILES util/org.kde.kpmcore.externalcommand.policy DESTINATION ${POLKITQT-1_POLICY_FILES_INSTALL_DIR}) ecm_install_configured_files( INPUT util/org.kde.kpmcore.helperinterface.service.in DESTINATION ${KDE_INSTALL_DBUSDIR}/system-services diff --git a/src/util/externalcommand.h b/src/util/externalcommand.h index 516c160..f7f31c8 100644 --- a/src/util/externalcommand.h +++ b/src/util/externalcommand.h @@ -50,7 +50,7 @@ public: explicit ExternalCommand(const QString& cmd = QString(), const QStringList& args = QStringList(), const QProcess::ProcessChannelMode processChannelMode = QProcess::MergedChannels); explicit ExternalCommand(Report& report, const QString& cmd = QString(), const QStringList& args = QStringList(), const QProcess::ProcessChannelMode processChannelMode = QProcess::MergedChannels); - ~ExternalCommand(); + ~ExternalCommand() override; public: bool copyBlocks(const CopySource& source, CopyTarget& target); diff --git a/src/util/org.kde.kpmcore.applicationinterface.conf b/src/util/org.kde.kpmcore.applicationinterface.conf deleted file mode 100644 index e64a003..0000000 --- a/src/util/org.kde.kpmcore.applicationinterface.conf +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/src/util/org.kde.kpmcore.externalcommand.actions b/src/util/org.kde.kpmcore.externalcommand.actions deleted file mode 100644 index 827a56b..0000000 --- a/src/util/org.kde.kpmcore.externalcommand.actions +++ /dev/null @@ -1,65 +0,0 @@ -[Domain] -Icon=partitionmanager - -[org.kde.kpmcore.externalcommand.init] -Name=Start external command daemon -Name[ast]=Aniciu del degorriu de comandos esternos -Name[ca]=Inicia el dimoni d'ordres externes -Name[ca@valencia]=Inicia el dimoni d'ordres externes -Name[cs]=Spustit démona externích příkazů -Name[da]=Start ekstern kommando-dæmon -Name[de]=Externen Befehlsdienst starten -Name[el]=Εκκίνηση διεργασίας με εξωτερική εντολή -Name[en_GB]=Start external command daemon -Name[es]=Iniciar el demonio de órdenes externas -Name[et]=Välise käsu deemoni käivitamine -Name[eu]=Abiarazi kanpoko komandoen daimona -Name[fi]=Käynnistä ulkoinen komentopalvelu -Name[fr]=Lancer le démon de la commande externe -Name[gl]=Iniciar o servizo de orde externa -Name[it]=Avvia demone per comando esterno -Name[ko]=외부 명령 데몬 시작 -Name[lt]=Paleisti išorinių komandų tarnybą -Name[nl]=Start externe opdrachtdaemon -Name[pl]=Rozpocznij usługę zewnętrznego polecenia -Name[pt]=Iniciar o servidor de comandos externos -Name[pt_BR]=Iniciar comando externo do daemon -Name[sk]=Spustiť externé démony príkazov -Name[sl]=Zaženite demon za zunanje ukaze -Name[sv]=Starta extern kommandodemon -Name[uk]=Запуск фонової служби зовнішньої команди -Name[x-test]=xxStart external command daemonxx -Name[zh_TW]=啟動外部指令守護程式 -Description=Administrative privileges are required to manage disks -Description[ast]=Ríquense los privilexos alministrativos pa xestionar discos -Description[ca]=Es requereixen privilegis d'administrador per a gestionar els discs -Description[ca@valencia]=Es requereixen privilegis d'administrador per a gestionar els discs -Description[cs]=Pro správu disků jsou potřeba práva administrátora -Description[da]=Der kræves administrative rettigheder for at håndtere diske -Description[de]=Systemverwalterrechte sind zur Verwaltung von Festplatten erforderlich -Description[el]=Απαιτούνται δικαιώματα διαχειριστή για τη διαχείριση δίσκων -Description[en_GB]=Administrative privileges are required to manage disks -Description[es]=Se necesitan permisos de administrador para gestionar discos -Description[et]=Ketaste haldamiseks on tarvis administraatori õigusi -Description[eu]=Administrazio pribilegioak behar dira diskoak kudeatzeko -Description[fi]=Levyjen hallinta vaatii pääkäyttäjäoikeuksia -Description[fr]=Vous devez disposer des privilèges d'administrateur pour gérer les disques -Description[gl]=Requírense privilexios de administración para xestionar discos. -Description[it]=Per gestire il disco sono richiesti privilegi di amministratore -Description[ja]=ディスクを管理するには管理者権限が必要です -Description[ko]=디스크를 관리하려면 권한이 필요함 -Description[lt]=Diskų tvarkymui reikalingos administratoriaus teisės -Description[nl]=Er zijn administratieve rechten vereist om schijven te beheren -Description[pl]=Do zarządzania dyskami wymagane są uprawnienia administratora -Description[pt]=São necessários privilégios de administrador para gerir os discos -Description[pt_BR]=São necessários privilégios administrativos para gerenciar discos -Description[ru]=Для управления дисками требуются права администратора -Description[sk]=Na správu diskov sa vyžadujú práva správcu -Description[sl]=Za upravljanje diskov so potrebne pravice upravljavca računalnika -Description[sv]=Administratörsprivilegier krävs för att hantera diskar -Description[uk]=Для керування дисками потрібні права доступу адміністратора (root) -Description[x-test]=xxAdministrative privileges are required to manage disksxx -Description[zh_CN]=管理磁盘需要管理权限 -Description[zh_TW]=管理硬碟需要管理員權限 -Policy=auth_admin -Persistence=session diff --git a/src/util/org.kde.kpmcore.externalcommand.policy b/src/util/org.kde.kpmcore.externalcommand.policy new file mode 100644 index 0000000..a6459db --- /dev/null +++ b/src/util/org.kde.kpmcore.externalcommand.policy @@ -0,0 +1,49 @@ + + + + +partitionmanager + + Start external command daemon + Aniciu del degorriu de comandos esternos + Inicia el dimoni d'ordres externes + Inicia el dimoni d'ordres externes + Εκκίνηση διεργασίας με εξωτερική εντολή + Start external command daemon + Iniciar el demonio de órdenes externas + Lancer le démon externe de commandes + Avvia demone per comando esterno + Paleisti išorinių komandų tarnybą + Start externe opdrachtdaemon + Iniciar o servidor de comandos externos + Iniciar comando externo do daemon + Zaženi demon za zunanje ukaze + Starta extern kommandodemon + Запуск фонової служби зовнішньої команди + Administrative privileges are required to manage disks + Ríquense los privilexos alministrativos pa xestionar discos + Es requereixen privilegis d'administrador per a gestionar els discs + Es requereixen privilegis d'administrador per a gestionar els discs + Απαιτούνται δικαιώματα διαχειριστή για τη διαχείριση των δίσκων + Administrative privileges are required to manage disks + Se necesitan permisos de administrador para gestionar discos + Vous devez disposer des privilèges d'administrateur pour gérer les disques. + Per gestire il disco sono richiesti privilegi amministrativi + Diskų tvarkymui reikalingos administratoriaus teisės + Er zijn administratieve rechten vereist om schijven te beheren + São necessários privilégios de administração para gerir os discos + São necessários privilégios administrativos para gerenciar discos + Za upravljanje diskov so potrebne pravice upravljavca računalnika + Administratörsprivilegier krävs för att hantera diskar + Для керування дисками потрібні права доступу адміністратора (root) + + no + auth_admin_keep + + + diff --git a/src/util/report.h b/src/util/report.h index b5ed321..04e6e3f 100644 --- a/src/util/report.h +++ b/src/util/report.h @@ -36,7 +36,7 @@ class LIBKPMCORE_EXPORT Report : public QObject public: explicit Report(Report* p, const QString& cmd = QString()); - ~Report(); + ~Report() override; Q_SIGNALS: void outputChanged();