File indexing completed on 2024-04-21 05:46:23
0001 /* 0002 SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "loggerDialog.h" 0008 0009 #include <QProcess> 0010 0011 #include <KLocalizedString> 0012 #include <KMessageBox> 0013 #include <QDesktopServices> 0014 0015 // Project includes 0016 #include "ksystemlog_debug.h" 0017 0018 #include "globals.h" 0019 #include "logLevel.h" 0020 0021 LoggerDialog::LoggerDialog(QWidget *parent) 0022 : QDialog(parent) 0023 { 0024 setupUi(this); 0025 0026 connect(buttonOK, &QAbstractButton::clicked, this, &LoggerDialog::sendMessage); 0027 connect(buttonCancel, &QAbstractButton::clicked, this, &QWidget::hide); 0028 0029 connect(tagActivation, &QAbstractButton::toggled, this, &LoggerDialog::changeTagActivation); 0030 connect(fileActivation, &QAbstractButton::toggled, this, &LoggerDialog::changeFileActivation); 0031 connect(messageActivation, &QAbstractButton::toggled, this, &LoggerDialog::changeMessageActivation); 0032 0033 connect(file, &KUrlRequester::textChanged, this, &LoggerDialog::textChanged); 0034 connect(message, &QLineEdit::textChanged, this, &LoggerDialog::textChanged); 0035 connect(tag, &QLineEdit::textChanged, this, &LoggerDialog::textChanged); 0036 connect(loggerManual, &QLabel::linkActivated, this, &LoggerDialog::slotLinkClicked); 0037 buildMaps(); 0038 0039 // Fill the priority ComboBox 0040 QList<QString> prioKeys(mPriorities.keys()); 0041 0042 QList<QString>::Iterator itPriority; 0043 for (itPriority = prioKeys.begin(); itPriority != prioKeys.end(); ++itPriority) { 0044 priority->addItem(mPriorityIcons[*itPriority], *itPriority); 0045 } 0046 0047 // Select the right priority 0048 for (int i = 0; i < priority->count(); ++i) { 0049 if (priority->itemText(i) == Globals::instance().noticeLogLevel()->name()) { 0050 priority->setCurrentIndex(i); 0051 break; 0052 } 0053 } 0054 0055 // Fill the priority ComboBox 0056 QList<QString> keys(mFacilities.keys()); 0057 0058 QList<QString>::Iterator itFacility; 0059 for (itFacility = keys.begin(); itFacility != keys.end(); ++itFacility) { 0060 facility->addItem(*itFacility); 0061 } 0062 0063 // Select the right facility 0064 for (int i = 0, total = facility->count(); i < total; ++i) { 0065 if (facility->itemText(i) == i18n("User")) { 0066 facility->setCurrentIndex(i); 0067 break; 0068 } 0069 } 0070 tag->setEnabled(false); 0071 } 0072 0073 LoggerDialog::~LoggerDialog() 0074 { 0075 } 0076 0077 void LoggerDialog::slotLinkClicked(const QString &link) 0078 { 0079 QDesktopServices::openUrl(QUrl::fromUserInput(link)); 0080 } 0081 0082 void LoggerDialog::initialize() 0083 { 0084 qCDebug(KSYSTEMLOG) << "Initializing Logger dialog..."; 0085 0086 message->clear(); 0087 message->setFocus(); 0088 } 0089 0090 void LoggerDialog::buildMaps() 0091 { 0092 // Fill the facility map 0093 mFacilities[i18n("Authentication")] = QStringLiteral("auth"); 0094 mFacilities[i18n("Private Authentication")] = QStringLiteral("authpriv"); 0095 mFacilities[i18n("Cron")] = QStringLiteral("cron"); 0096 mFacilities[i18n("Daemon")] = QStringLiteral("daemon"); 0097 mFacilities[i18n("FTP")] = QStringLiteral("ftp"); 0098 mFacilities[i18n("Kernel")] = QStringLiteral("kern"); 0099 mFacilities[i18n("LPR")] = QStringLiteral("lpr"); 0100 mFacilities[i18n("Mail")] = QStringLiteral("mail"); 0101 mFacilities[i18n("News")] = QStringLiteral("news"); 0102 mFacilities[i18n("Syslog")] = QStringLiteral("syslog"); 0103 mFacilities[i18n("User")] = QStringLiteral("user"); 0104 mFacilities[i18n("UUCP")] = QStringLiteral("uucp"); 0105 0106 mFacilities[i18n("Local 0")] = QStringLiteral("local0"); 0107 mFacilities[i18n("Local 1")] = QStringLiteral("local1"); 0108 mFacilities[i18n("Local 2")] = QStringLiteral("local2"); 0109 mFacilities[i18n("Local 3")] = QStringLiteral("local3"); 0110 mFacilities[i18n("Local 4")] = QStringLiteral("local4"); 0111 mFacilities[i18n("Local 5")] = QStringLiteral("local5"); 0112 mFacilities[i18n("Local 6")] = QStringLiteral("local6"); 0113 mFacilities[i18n("Local 7")] = QStringLiteral("local7"); 0114 0115 // Fill the priority map 0116 mPriorities[Globals::instance().debugLogLevel()->name()] = QStringLiteral("debug"); 0117 mPriorities[Globals::instance().informationLogLevel()->name()] = QStringLiteral("info"); 0118 mPriorities[Globals::instance().noticeLogLevel()->name()] = QStringLiteral("notice"); 0119 mPriorities[Globals::instance().warningLogLevel()->name()] = QStringLiteral("warning"); 0120 mPriorities[Globals::instance().errorLogLevel()->name()] = QStringLiteral("err"); 0121 mPriorities[Globals::instance().criticalLogLevel()->name()] = QStringLiteral("crit"); 0122 mPriorities[Globals::instance().alertLogLevel()->name()] = QStringLiteral("alert"); 0123 mPriorities[Globals::instance().emergencyLogLevel()->name()] = QStringLiteral("emerg"); 0124 0125 // Fill the priority icon map 0126 mPriorityIcons[Globals::instance().debugLogLevel()->name()] = QIcon::fromTheme(Globals::instance().debugLogLevel()->icon().name()); 0127 mPriorityIcons[Globals::instance().informationLogLevel()->name()] = QIcon::fromTheme(Globals::instance().informationLogLevel()->icon().name()); 0128 mPriorityIcons[Globals::instance().noticeLogLevel()->name()] = QIcon::fromTheme(Globals::instance().noticeLogLevel()->icon().name()); 0129 mPriorityIcons[Globals::instance().warningLogLevel()->name()] = QIcon::fromTheme(Globals::instance().warningLogLevel()->icon().name()); 0130 mPriorityIcons[Globals::instance().errorLogLevel()->name()] = QIcon::fromTheme(Globals::instance().errorLogLevel()->icon().name()); 0131 mPriorityIcons[Globals::instance().criticalLogLevel()->name()] = QIcon::fromTheme(Globals::instance().criticalLogLevel()->icon().name()); 0132 mPriorityIcons[Globals::instance().alertLogLevel()->name()] = QIcon::fromTheme(Globals::instance().alertLogLevel()->icon().name()); 0133 mPriorityIcons[Globals::instance().emergencyLogLevel()->name()] = QIcon::fromTheme(Globals::instance().emergencyLogLevel()->icon().name()); 0134 } 0135 0136 void LoggerDialog::textChanged() 0137 { 0138 if (fileActivation->isChecked() && file->url().isEmpty()) { 0139 buttonOK->setEnabled(false); 0140 return; 0141 } 0142 0143 if (tagActivation->isChecked() && tag->text().isEmpty()) { 0144 buttonOK->setEnabled(false); 0145 return; 0146 } 0147 0148 if (messageActivation->isChecked() && message->text().isEmpty()) { 0149 buttonOK->setEnabled(false); 0150 return; 0151 } 0152 0153 buttonOK->setEnabled(true); 0154 } 0155 0156 void LoggerDialog::changeTagActivation(bool activation) 0157 { 0158 tag->setEnabled(activation); 0159 0160 textChanged(); 0161 } 0162 0163 void LoggerDialog::changeFileActivation(bool activation) 0164 { 0165 file->setEnabled(activation); 0166 0167 textChanged(); 0168 } 0169 0170 void LoggerDialog::changeMessageActivation(bool activation) 0171 { 0172 message->setEnabled(activation); 0173 0174 textChanged(); 0175 } 0176 0177 void LoggerDialog::sendMessage() 0178 { 0179 QProcess process; 0180 0181 QStringList arguments; 0182 0183 if (useProcessIdentifier->isChecked()) { 0184 arguments << QStringLiteral("-i"); 0185 } 0186 0187 if (tagActivation->isChecked()) { 0188 arguments << QStringLiteral("-t"); 0189 0190 arguments << tag->text(); 0191 } 0192 0193 const QString prioritySelected = priority->currentText(); 0194 0195 if (prioritySelected != Globals::instance().noLogLevel()->name()) { 0196 arguments << QStringLiteral("-p"); 0197 0198 QString p(mFacilities[facility->currentText()]); 0199 p += QLatin1Char('.'); 0200 p += mPriorities[priority->currentText()]; 0201 0202 arguments << p; 0203 } 0204 0205 // If we read the content of a file 0206 if (fileActivation->isChecked()) { 0207 arguments << QStringLiteral("-f"); 0208 0209 arguments << file->url().toLocalFile(); 0210 } 0211 // Else, the user types the content of its message 0212 else { 0213 // Remove bad "\n" characters 0214 arguments << message->text().replace(QLatin1String("\n"), QLatin1String(" ")); 0215 } 0216 0217 // QProcess::Block, QProcess::Stdout 0218 process.start(QStringLiteral("logger"), arguments); 0219 0220 // If the launching of the command failed 0221 if (process.error() == QProcess::FailedToStart) { 0222 KMessageBox::error(this, 0223 i18n("Unable to find the 'logger' command on your system. Please type " 0224 "'logger' in a Konsole to determine whether this command is installed."), 0225 i18n("Command not found")); 0226 return; 0227 } 0228 0229 if (process.exitStatus() == QProcess::CrashExit) { 0230 KMessageBox::error(this, i18n("The 'logger' command has not been properly exited."), i18n("Execution problem")); 0231 return; 0232 } 0233 0234 // No such file or directory 0235 if (process.exitCode() == 1) { 0236 KMessageBox::error(this, i18n("This file does not exist, please choose another."), i18n("File not valid")); 0237 return; 0238 } 0239 0240 // Hide the Logger Dialog 0241 hide(); 0242 } 0243 0244 #include "moc_loggerDialog.cpp"