11#include "kcoreaddons_debug.h"
55 list << line.
mid(0, separatorIndex);
56 if (separatorIndex != -1) {
57 list << line.
mid(separatorIndex + 1, -1);
65 return QStringLiteral(
"/etc/os-release");
66 }
else if (
QFile::exists(QStringLiteral(
"/usr/lib/os-release"))) {
67 return QStringLiteral(
"/usr/lib/os-release");
73class KOSReleasePrivate
76 explicit KOSReleasePrivate(QString filePath)
77 : name(QStringLiteral(
"Linux"))
78 , id(QStringLiteral(
"linux"))
79 , prettyName(QStringLiteral(
"Linux"))
83 QHash<QString, QString *> stringHash = {{QStringLiteral(
"NAME"), &name},
84 {QStringLiteral(
"VERSION"), &version},
85 {QStringLiteral(
"ID"), &
id},
87 {QStringLiteral(
"VERSION_CODENAME"), &versionCodename},
88 {QStringLiteral(
"VERSION_ID"), &versionId},
89 {QStringLiteral(
"PRETTY_NAME"), &prettyName},
90 {QStringLiteral(
"ANSI_COLOR"), &ansiColor},
91 {QStringLiteral(
"CPE_NAME"), &cpeName},
92 {QStringLiteral(
"HOME_URL"), &homeUrl},
93 {QStringLiteral(
"DOCUMENTATION_URL"), &documentationUrl},
94 {QStringLiteral(
"SUPPORT_URL"), &supportUrl},
95 {QStringLiteral(
"BUG_REPORT_URL"), &bugReportUrl},
96 {QStringLiteral(
"PRIVACY_POLICY_URL"), &privacyPolicyUrl},
97 {QStringLiteral(
"BUILD_ID"), &buildId},
98 {QStringLiteral(
"VARIANT"), &variant},
99 {QStringLiteral(
"VARIANT_ID"), &variantId},
100 {QStringLiteral(
"LOGO"), &logo}};
103 filePath = defaultFilePath();
106 qCWarning(KCOREADDONS_DEBUG) <<
"Failed to find os-release file!";
110 QFile file(filePath);
117 qCWarning(KCOREADDONS_DEBUG) <<
"Failed to open os-release file!" << file.errorString();
122 while (!file.atEnd()) {
124 line = QString::fromUtf8(file.readLine()).trimmed();
126 if (line.startsWith(QLatin1Char(
'#'))) {
132 parts = splitEntry(line);
134 if (parts.size() != 2) {
136 qCDebug(KCOREADDONS_DEBUG) <<
"Unexpected/invalid os-release line:" << line;
140 QString key = parts.
at(0);
141 QString value = parts.at(1).trimmed();
143 if (QString *var = stringHash.
value(key,
nullptr)) {
149 if (key == QLatin1String(
"ID_LIKE")) {
150 setVar(&idLike, value);
157 setVar(&parsedValue, value);
158 extras.insert(key, parsedValue);
185 : d(new KOSReleasePrivate(filePath))
189KOSRelease::~KOSRelease() =
default;
213 return d->versionCodename;
223 return d->prettyName;
243 return d->documentationUrl;
248 return d->supportUrl;
253 return d->bugReportUrl;
258 return d->privacyPolicyUrl;
283 return d->extras.keys();
288 return d->extras.value(key);
QString documentationUrl() const
QString extraValue(const QString &key) const
Extra values are values assoicated with keys that are unknown.
QString supportUrl() const
QString bugReportUrl() const
QString versionCodename() const
QString privacyPolicyUrl() const
QString versionId() const
QString ansiColor() const
QStringList idLike() const
QString prettyName() const
QStringList extraKeys() const
Extra keys are keys that are unknown or specified by a vendor.
KOSRelease(const QString &filePath=QString())
Constructs a new OSRelease instance.
QString variantId() const
KDB_EXPORT KDbVersionInfo version()
void error(QWidget *parent, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options=Notify)
KIOCORE_EXPORT QStringList list(const QString &fileClass)
KCOREADDONS_EXPORT QStringList splitArgs(const QString &cmd, Options flags=NoOptions, Errors *err=nullptr)
Splits cmd according to system shell word splitting and quoting rules.
Errors
Status codes from splitArgs()
QString name(StandardAction id)
bool exists(const QString &fileName)
T value(const Key &key) const const
const_reference at(qsizetype i) const const
const QChar at(qsizetype position) const const
qsizetype indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
QString mid(qsizetype position, qsizetype n) const const
QString & remove(QChar ch, Qt::CaseSensitivity cs)
qsizetype size() const const
QString join(QChar separator) const const