QRegularExpression->QJson

lsblk LUKS mapping point parsing now uses json.
This commit is contained in:
Andrius Štikonas 2017-07-04 14:42:29 +01:00
parent bb024a0419
commit 037380228d
2 changed files with 22 additions and 10 deletions

View File

@ -27,12 +27,16 @@
#include "util/helpers.h" #include "util/helpers.h"
#include "util/report.h" #include "util/report.h"
#include <cmath>
#include <QDebug> #include <QDebug>
#include <QDialog> #include <QDialog>
#include <QPointer> #include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
#include <QRegularExpression> #include <QRegularExpression>
#include <QPointer>
#include <QString> #include <QString>
#include <QtMath>
#include <QUuid> #include <QUuid>
#include <KDiskFreeSpaceInfo> #include <KDiskFreeSpaceInfo>
@ -334,7 +338,7 @@ void luks::loadInnerFileSystem(const QString& mapperNode)
setLabel(m_innerFs->readLabel(mapperNode)); setLabel(m_innerFs->readLabel(mapperNode));
setUUID(m_innerFs->readUUID(mapperNode)); setUUID(m_innerFs->readUUID(mapperNode));
if (m_innerFs->supportGetUsed() == FileSystem::cmdSupportFileSystem) if (m_innerFs->supportGetUsed() == FileSystem::cmdSupportFileSystem)
setSectorsUsed(qCeil((m_innerFs->readUsedCapacity(mapperNode) + payloadOffset()) / static_cast<float>(m_logicalSectorSize) )); setSectorsUsed(std::ceil((m_innerFs->readUsedCapacity(mapperNode) + payloadOffset()) / static_cast<float>(m_logicalSectorSize) ));
m_innerFs->scan(mapperNode); m_innerFs->scan(mapperNode);
} }
@ -561,16 +565,25 @@ void luks::getMapperName(const QString& deviceNode)
ExternalCommand cmd(QStringLiteral("lsblk"), ExternalCommand cmd(QStringLiteral("lsblk"),
{ QStringLiteral("--list"), { QStringLiteral("--list"),
QStringLiteral("--noheadings"), QStringLiteral("--noheadings"),
QStringLiteral("--paths"),
QStringLiteral("--json"),
QStringLiteral("--output"), QStringLiteral("--output"),
QStringLiteral("type,name"), QStringLiteral("type,name"),
deviceNode }); deviceNode });
m_MapperName = QString();
if (cmd.run(-1) && cmd.exitCode() == 0) { if (cmd.run(-1) && cmd.exitCode() == 0) {
QStringList output=cmd.output().split(QStringLiteral("\n")).filter(QRegularExpression(QStringLiteral("^crypt "))); const QJsonDocument jsonDocument = QJsonDocument::fromJson(cmd.output().toUtf8());
if (!output.isEmpty() && !output.first().isEmpty()) QJsonObject jsonObject = jsonDocument.object();
m_MapperName = QStringLiteral("/dev/mapper/") + output.first().split(QStringLiteral(" ")).last(); const QJsonArray jsonArray = jsonObject[QLatin1String("blockdevices")].toArray();
for (const auto &deviceLine : jsonArray) {
QJsonObject deviceObject = deviceLine.toObject();
if (deviceObject[QLatin1String("type")].toString() == QLatin1String("crypt")) {
m_MapperName = deviceObject[QLatin1String("name")].toString();
break;
}
}
} }
else
m_MapperName = QString();
} }
void luks::getLuksInfo(const QString& deviceNode) void luks::getLuksInfo(const QString& deviceNode)

View File

@ -48,7 +48,7 @@
#include <QFile> #include <QFile>
#include <QJsonArray> #include <QJsonArray>
#include <QJsonDocument> #include <QJsonDocument>
#include <QRegularExpression> #include <QJsonObject>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
@ -421,7 +421,6 @@ QList<Device*> LibPartedBackend::scanDevices(bool excludeReadOnly)
ExternalCommand cmd(QStringLiteral("lsblk"), ExternalCommand cmd(QStringLiteral("lsblk"),
{ QStringLiteral("--nodeps"), { QStringLiteral("--nodeps"),
QStringLiteral("--noheadings"),
QStringLiteral("--paths"), QStringLiteral("--paths"),
QStringLiteral("--sort"), QStringLiteral("name"), QStringLiteral("--sort"), QStringLiteral("name"),
QStringLiteral("--json"), QStringLiteral("--json"),