File indexing completed on 2024-05-12 05:52:34

0001 /*
0002     SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 
0006 */
0007 
0008 #include "kdebugsettingsloadingcategories.h"
0009 #include "jobs/loadcategoriesjob.h"
0010 #include "kdebugsettingsutil.h"
0011 #include <QDir>
0012 #include <QLibraryInfo>
0013 #include <QStandardPaths>
0014 
0015 KDebugSettingsLoadingCategories::KDebugSettingsLoadingCategories() = default;
0016 
0017 KDebugSettingsLoadingCategories::~KDebugSettingsLoadingCategories() = default;
0018 
0019 void KDebugSettingsLoadingCategories::readQtLoggingFile()
0020 {
0021     mCategoriesList.clear();
0022     const QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, QStringLiteral("QtProject/qtlogging.ini"));
0023     if (!envPath.isEmpty()) {
0024         readCategoriesFiles(envPath);
0025     } else {
0026         const QString dataPath = QDir(QLibraryInfo::path(QLibraryInfo::DataPath)).absoluteFilePath(QStringLiteral("qtlogging.ini"));
0027         readCategoriesFiles(dataPath);
0028     }
0029 }
0030 
0031 void KDebugSettingsLoadingCategories::readCategoriesFiles(const QString &path)
0032 {
0033     // KDE debug categories area
0034     const QString confAreasFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("qlogging-categories6/kde.categories"));
0035     if (!confAreasFile.isEmpty()) {
0036         KDebugSettingsUtil::readLoggingCategories(confAreasFile, mCategoriesList, false);
0037     }
0038 
0039     mRenameCategoriesList.clear();
0040     // Load *.renamecategories file in QStandardPaths::ConfigLocation for kde apps.
0041     const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::ConfigLocation, QString(), QStandardPaths::LocateDirectory)
0042         + QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("qlogging-categories6/"), QStandardPaths::LocateDirectory);
0043     for (const QString &dir : dirs) {
0044         const QStringList fileNames = QDir(dir).entryList(QStringList() << QStringLiteral("*.renamecategories"));
0045         for (const QString &file : fileNames) {
0046             mRenameCategoriesList.append(KDebugSettingsUtil::readRenameCategories(dir + file));
0047         }
0048     }
0049     // TODO add load rename file from external kde apps.
0050     const QStringList dirs2 =
0051         QStandardPaths::locateAll(QStandardPaths::GenericConfigLocation, QStringLiteral("qdebug.categories/"), QStandardPaths::LocateDirectory);
0052     // qDebug() << " dirs 2 " << dirs2;
0053     for (const QString &dir : dirs2) {
0054         const QStringList fileNames = QDir(dir).entryList(QStringList() << QStringLiteral("*.renamecategories"));
0055         for (const QString &file : fileNames) {
0056             mRenameCategoriesList.append(KDebugSettingsUtil::readRenameCategories(dir + file));
0057         }
0058     }
0059 
0060     // Load *.categories file in QStandardPaths::ConfigLocation for kde apps.
0061     for (const QString &dir : dirs) {
0062         const QStringList fileNames = QDir(dir).entryList(QStringList() << QStringLiteral("*.categories"));
0063         for (const QString &file : fileNames) {
0064             if (file != QLatin1StringView("kde.categories")) {
0065                 KDebugSettingsUtil::readLoggingCategories(dir + file, mCategoriesList, true);
0066             }
0067         }
0068     }
0069 
0070     // Load *.categories files in qdebug.categories for external KDE apps.
0071     for (const QString &dir : dirs2) {
0072         const QStringList fileNames = QDir(dir).entryList(QStringList() << QStringLiteral("*.categories"));
0073         for (const QString &file : fileNames) {
0074             KDebugSettingsUtil::readLoggingCategories(dir + QLatin1Char('/') + file, mCategoriesList, true);
0075         }
0076     }
0077 
0078     const QByteArray rulesFilePath = qgetenv("QT_LOGGING_CONF");
0079     if (!rulesFilePath.isEmpty()) {
0080         // const QList<KDebugSettingsUtil::LoadLoggingCategory> envCategories = KDebugSettingsUtil::readLoggingQtCategories(QString::fromLatin1(rulesFilePath));
0081         // TODO
0082     }
0083 
0084     mEnvironmentrules = QString::fromLatin1(qgetenv("QT_LOGGING_RULES"));
0085     // qt logging.ini
0086     LoadCategoriesJob job;
0087     job.setFileName(path);
0088     job.setCategories(mCategoriesList);
0089     job.setRenamedCategories(mRenameCategoriesList);
0090     job.start();
0091 
0092     mCustomCategories = job.customCategories();
0093     mQtKdeCategories = job.qtKdeCategories();
0094     mFoundOverrideRule = job.foundOverrideRule();
0095 }
0096 
0097 bool KDebugSettingsLoadingCategories::foundOverrideRule() const
0098 {
0099     return mFoundOverrideRule;
0100 }
0101 
0102 LoggingCategory::List KDebugSettingsLoadingCategories::qtKdeCategories() const
0103 {
0104     return mQtKdeCategories;
0105 }
0106 
0107 LoggingCategory::List KDebugSettingsLoadingCategories::customCategories() const
0108 {
0109     return mCustomCategories;
0110 }
0111 
0112 KdeLoggingCategory::List KDebugSettingsLoadingCategories::categoriesList() const
0113 {
0114     return mCategoriesList;
0115 }
0116 
0117 RenameCategory::List KDebugSettingsLoadingCategories::renameCategoriesList() const
0118 {
0119     return mRenameCategoriesList;
0120 }
0121 
0122 QString KDebugSettingsLoadingCategories::environmentrules() const
0123 {
0124     return mEnvironmentrules;
0125 }