File indexing completed on 2024-12-22 05:28:43
0001 /* 0002 SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 0006 */ 0007 0008 #include "loadcategoriesjob.h" 0009 #include "kdebugsettingsutil.h" 0010 0011 LoadCategoriesJob::LoadCategoriesJob() = default; 0012 0013 void LoadCategoriesJob::setFileName(const QString &filename) 0014 { 0015 mFileName = filename; 0016 } 0017 0018 bool LoadCategoriesJob::foundOverrideRule() const 0019 { 0020 return mFoundOverrideRule; 0021 } 0022 0023 LoggingCategory::LoggingType updateLoggingType(const LoggingCategory &cat) 0024 { 0025 if (!cat.enabled) { 0026 return LoggingCategory::Off; 0027 } 0028 return cat.loggingType; 0029 } 0030 0031 LoggingCategory::LoggingType 0032 canDisplayType(const QMap<KDebugSettingsUtil::LoadLoggingCategory::LogType, KDebugSettingsUtil::LoadLoggingCategory::Status> &types) 0033 { 0034 KDebugSettingsUtil::LoadLoggingCategory::Status warning = types.value(KDebugSettingsUtil::LoadLoggingCategory::Warning); 0035 KDebugSettingsUtil::LoadLoggingCategory::Status debug = types.value(KDebugSettingsUtil::LoadLoggingCategory::Debug); 0036 KDebugSettingsUtil::LoadLoggingCategory::Status critical = types.value(KDebugSettingsUtil::LoadLoggingCategory::Critical); 0037 KDebugSettingsUtil::LoadLoggingCategory::Status info = types.value(KDebugSettingsUtil::LoadLoggingCategory::Info); 0038 KDebugSettingsUtil::LoadLoggingCategory::Status all = types.value(KDebugSettingsUtil::LoadLoggingCategory::All); 0039 0040 if (all == KDebugSettingsUtil::LoadLoggingCategory::Enabled) { 0041 return LoggingCategory::All; 0042 } else if (all == KDebugSettingsUtil::LoadLoggingCategory::Disabled) { 0043 return LoggingCategory::Off; 0044 } else if (warning == KDebugSettingsUtil::LoadLoggingCategory::Enabled && debug == KDebugSettingsUtil::LoadLoggingCategory::Enabled 0045 && critical == KDebugSettingsUtil::LoadLoggingCategory::Enabled && info == KDebugSettingsUtil::LoadLoggingCategory::Enabled) { 0046 return LoggingCategory::All; 0047 } else if (debug == KDebugSettingsUtil::LoadLoggingCategory::Enabled && warning == KDebugSettingsUtil::LoadLoggingCategory::Enabled 0048 && critical == KDebugSettingsUtil::LoadLoggingCategory::Enabled) { 0049 return LoggingCategory::Undefined; 0050 } else if (info == KDebugSettingsUtil::LoadLoggingCategory::Enabled && warning == KDebugSettingsUtil::LoadLoggingCategory::Enabled 0051 && critical == KDebugSettingsUtil::LoadLoggingCategory::Enabled) { 0052 return LoggingCategory::Info; 0053 } else if (warning == KDebugSettingsUtil::LoadLoggingCategory::Enabled && critical == KDebugSettingsUtil::LoadLoggingCategory::Enabled) { 0054 return LoggingCategory::Warning; 0055 } else if (critical == KDebugSettingsUtil::LoadLoggingCategory::Enabled) { 0056 return LoggingCategory::Critical; 0057 } else if (info == KDebugSettingsUtil::LoadLoggingCategory::Enabled && warning == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus 0058 && debug == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus && critical == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus) { 0059 return LoggingCategory::Undefined; 0060 } else if (warning == KDebugSettingsUtil::LoadLoggingCategory::Enabled && info == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus 0061 && debug == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus && critical == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus) { 0062 return LoggingCategory::Undefined; 0063 } else if (debug == KDebugSettingsUtil::LoadLoggingCategory::Enabled && info == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus 0064 && warning == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus && critical == KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus) { 0065 return LoggingCategory::Undefined; 0066 } else { 0067 return LoggingCategory::Off; 0068 } 0069 } 0070 0071 void LoadCategoriesJob::start() 0072 { 0073 mCustomCategories.clear(); 0074 mQtKdeCategories.clear(); 0075 mFoundOverrideRule = false; 0076 const int number(mCategories.count()); 0077 const QList<KDebugSettingsUtil::LoadLoggingCategory> originalQtCategories = KDebugSettingsUtil::readLoggingQtCategories(mFileName); 0078 QList<KDebugSettingsUtil::LoadLoggingCategory> qtCategories; 0079 for (KDebugSettingsUtil::LoadLoggingCategory cat : originalQtCategories) { // clazy:exclude=range-loop-reference 0080 for (const RenameCategory &catRenamed : std::as_const(mRenameCategories)) { 0081 if (cat.logName == catRenamed.originalName) { 0082 cat.logName = catRenamed.newName; 0083 break; 0084 } 0085 } 0086 qtCategories.append(cat); 0087 } 0088 0089 for (int i = 0; i < number; ++i) { 0090 KdeLoggingCategory kdeCat = mCategories.at(i); 0091 0092 bool foundInConfigFile = false; 0093 for (const KDebugSettingsUtil::LoadLoggingCategory &cat : std::as_const(qtCategories)) { 0094 if (cat.logName == kdeCat.categoryName) { 0095 LoggingCategory tmp; 0096 LoggingCategory::LoggingType newType = canDisplayType(cat.loggingTypes); 0097 if (newType != LoggingCategory::Undefined) { 0098 tmp.loggingType = canDisplayType(cat.loggingTypes); 0099 if (tmp.loggingType == LoggingCategory::Off) { 0100 tmp.enabled = false; 0101 } 0102 tmp.description = kdeCat.description; 0103 tmp.categoryName = kdeCat.categoryName; 0104 tmp.defaultSeverityType = KDebugSettingsUtil::convertCategoryTypeFromString(kdeCat.defaultSeverity); 0105 tmp.identifierName = kdeCat.identifierName; 0106 0107 mQtKdeCategories.append(tmp); 0108 foundInConfigFile = true; 0109 qtCategories.removeAll(cat); 0110 break; 0111 } 0112 } 0113 if (cat.logName == QLatin1StringView("*")) { 0114 mFoundOverrideRule = true; 0115 } 0116 } 0117 if (!foundInConfigFile) { 0118 LoggingCategory tmp; 0119 tmp.description = kdeCat.description; 0120 tmp.categoryName = kdeCat.categoryName; 0121 tmp.loggingType = KDebugSettingsUtil::convertCategoryTypeFromString(kdeCat.defaultSeverity); 0122 tmp.defaultSeverityType = KDebugSettingsUtil::convertCategoryTypeFromString(kdeCat.defaultSeverity); 0123 tmp.identifierName = kdeCat.identifierName; 0124 mQtKdeCategories.append(tmp); 0125 } 0126 } 0127 0128 // qDebug()<<" KEEP "<< qtCategories.count(); 0129 for (const KDebugSettingsUtil::LoadLoggingCategory &cat : std::as_const(qtCategories)) { 0130 QMapIterator<KDebugSettingsUtil::LoadLoggingCategory::LogType, KDebugSettingsUtil::LoadLoggingCategory::Status> i(cat.loggingTypes); 0131 while (i.hasNext()) { 0132 i.next(); 0133 if (i.value() != KDebugSettingsUtil::LoadLoggingCategory::UnknownStatus) { 0134 LoggingCategory tmp; 0135 tmp.categoryName = cat.logName; 0136 switch (i.key()) { 0137 case KDebugSettingsUtil::LoadLoggingCategory::Unknown: 0138 tmp.loggingType = LoggingCategory::Undefined; 0139 break; 0140 case KDebugSettingsUtil::LoadLoggingCategory::Off: 0141 tmp.loggingType = LoggingCategory::Off; 0142 break; 0143 case KDebugSettingsUtil::LoadLoggingCategory::Info: 0144 tmp.loggingType = LoggingCategory::Info; 0145 break; 0146 case KDebugSettingsUtil::LoadLoggingCategory::Warning: 0147 tmp.loggingType = LoggingCategory::Warning; 0148 break; 0149 case KDebugSettingsUtil::LoadLoggingCategory::Debug: 0150 tmp.loggingType = LoggingCategory::Debug; 0151 break; 0152 case KDebugSettingsUtil::LoadLoggingCategory::Critical: 0153 tmp.loggingType = LoggingCategory::Critical; 0154 break; 0155 case KDebugSettingsUtil::LoadLoggingCategory::All: 0156 tmp.loggingType = LoggingCategory::All; 0157 break; 0158 } 0159 tmp.enabled = (i.value() == KDebugSettingsUtil::LoadLoggingCategory::Enabled); 0160 mCustomCategories.append(tmp); 0161 } 0162 } 0163 } 0164 } 0165 0166 void LoadCategoriesJob::setCategories(const KdeLoggingCategory::List &categories) 0167 { 0168 mCategories = categories; 0169 } 0170 0171 void LoadCategoriesJob::setRenamedCategories(const RenameCategory::List &renameCategories) 0172 { 0173 mRenameCategories = renameCategories; 0174 } 0175 0176 LoggingCategory::List LoadCategoriesJob::customCategories() const 0177 { 0178 return mCustomCategories; 0179 } 0180 0181 LoggingCategory::List LoadCategoriesJob::qtKdeCategories() const 0182 { 0183 return mQtKdeCategories; 0184 }