AusweisApp2/src/global/VersionInfo.cpp

157 lines
3.1 KiB
C++
Raw Normal View History

2017-12-20 14:54:05 +01:00
/*
2018-03-28 15:10:51 +02:00
* \copyright Copyright (c) 2016-2018 Governikus GmbH & Co. KG, Germany
2017-12-20 14:54:05 +01:00
*/
2017-07-03 09:30:10 +02:00
#include "VersionInfo.h"
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QVector>
using namespace governikus;
2017-12-20 14:54:05 +01:00
namespace
{
#define VERSION_NAME(_name, _key)\
QString _name(){\
return QStringLiteral(_key);\
}
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
VERSION_NAME(NAME, "Name")
VERSION_NAME(IMPL_TITLE, "Implementation-Title")
VERSION_NAME(IMPL_VENDOR, "Implementation-Vendor")
VERSION_NAME(IMPL_VERSION, "Implementation-Version")
VERSION_NAME(SPEC_TITLE, "Specification-Title")
VERSION_NAME(SPEC_VENDOR, "Specification-Vendor")
VERSION_NAME(SPEC_VERSION, "Specification-Version")
}
2017-07-03 09:30:10 +02:00
VersionInfo::VersionInfo(const QMap<QString, QString>& pInfo)
: mInfo(pInfo)
{
}
VersionInfo::VersionInfo()
: VersionInfo(QMap<QString, QString>())
{
}
VersionInfo VersionInfo::getInstance()
{
return VersionInfo({
2017-12-20 14:54:05 +01:00
{NAME(), QCoreApplication::applicationName()},
{IMPL_TITLE(), QCoreApplication::applicationName()},
{IMPL_VENDOR(), QCoreApplication::organizationName()},
{IMPL_VERSION(), QCoreApplication::applicationVersion()},
{SPEC_TITLE(), QStringLiteral("TR-03124")},
{SPEC_VENDOR(), QStringLiteral("Federal Office for Information Security")},
{SPEC_VERSION(), QStringLiteral("1.3")}
2017-07-03 09:33:28 +02:00
});
2017-07-03 09:30:10 +02:00
}
VersionInfo VersionInfo::fromText(const QString& pText)
{
QMap<QString, QString> infos;
2017-12-20 14:54:05 +01:00
const auto& header = pText.splitRef(QLatin1Char('\n'));
2017-07-03 09:30:10 +02:00
for (const auto& line : header)
{
2017-12-20 14:54:05 +01:00
const auto pair = line.split(QLatin1Char(':'));
2017-07-03 09:30:10 +02:00
if (pair.size() != 2 || pair[0].trimmed().isEmpty() || pair[1].trimmed().isEmpty())
{
qWarning() << "Cannot parse line:" << line;
continue;
}
infos[pair[0].trimmed().toString()] = pair[1].trimmed().toString();
}
return VersionInfo(infos);
}
bool VersionInfo::isNull() const
{
return mInfo.isEmpty();
}
QString VersionInfo::getName() const
{
2017-12-20 14:54:05 +01:00
return mInfo[NAME()];
2017-07-03 09:30:10 +02:00
}
QString VersionInfo::getImplementationTitle() const
{
2017-12-20 14:54:05 +01:00
return mInfo[IMPL_TITLE()];
2017-07-03 09:30:10 +02:00
}
QString VersionInfo::getImplementationVendor() const
{
2017-12-20 14:54:05 +01:00
return mInfo[IMPL_VENDOR()];
2017-07-03 09:30:10 +02:00
}
QString VersionInfo::getImplementationVersion() const
{
2017-12-20 14:54:05 +01:00
return mInfo[IMPL_VERSION()];
2017-07-03 09:30:10 +02:00
}
QString VersionInfo::getSpecificationTitle() const
{
2017-12-20 14:54:05 +01:00
return mInfo[SPEC_TITLE()];
2017-07-03 09:30:10 +02:00
}
QString VersionInfo::getSpecificationVendor() const
{
2017-12-20 14:54:05 +01:00
return mInfo[SPEC_VENDOR()];
2017-07-03 09:30:10 +02:00
}
QString VersionInfo::getSpecificationVersion() const
{
2017-12-20 14:54:05 +01:00
return mInfo[SPEC_VERSION()];
2017-07-03 09:30:10 +02:00
}
QJsonObject VersionInfo::toJsonObject() const
{
QJsonObject jsonObj;
for (auto i = mInfo.constBegin(); i != mInfo.constEnd(); ++i)
{
jsonObj[i.key()] = i.value();
}
return jsonObj;
}
QByteArray VersionInfo::toJson(QJsonDocument::JsonFormat pFormat) const
{
return QJsonDocument(toJsonObject()).toJson(pFormat);
}
QString VersionInfo::toText() const
{
QStringList list;
for (auto i = mInfo.constBegin(); i != mInfo.constEnd(); ++i)
{
list += QStringLiteral("%1: %2").arg(i.key(), i.value());
}
2017-12-20 14:54:05 +01:00
return list.join(QLatin1Char('\n'));
2017-07-03 09:30:10 +02:00
}
QDebug operator<<(QDebug pDbg, const VersionInfo& pVersionInfo)
{
QDebugStateSaver saver(pDbg);
return pDbg.nospace().noquote() << "VersionInfo(" << pVersionInfo.toJson(QJsonDocument::JsonFormat::Compact) << ")";
}