From 716766ccce1ec45dda1c9c2ee466f1f3a65d3c25 Mon Sep 17 00:00:00 2001 From: Wolfgang Frisch Date: Tue, 3 May 2022 01:38:36 +0200 Subject: [PATCH] add --debug command-line switch --- src/irc/main.cpp | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/irc/main.cpp b/src/irc/main.cpp index 46abfca7..3ea871b2 100644 --- a/src/irc/main.cpp +++ b/src/irc/main.cpp @@ -65,9 +65,12 @@ #include #include +bool verbose_output = false; + static bool initSettings(SettingsFile *settings, QLockFile **lockFile, QString &errorMessage); static void initTranslation(); static QString randomPassword(size_t len = 14); +void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg); int main(int argc, char *argv[]) try { @@ -88,7 +91,7 @@ int main(int argc, char *argv[]) try init_libtego_callbacks(tegoContext); a.setApplicationVersion(QLatin1String(TEGO_VERSION_STR)); - qSetMessagePattern(QString::fromLatin1("%{file}(%{line}): %{message}")); + qInstallMessageHandler(myMessageOutput); QScopedPointer settings(new SettingsFile); SettingsObject::setDefaultFile(settings.data()); @@ -282,7 +285,6 @@ static bool initSettings(SettingsFile *settings, QLockFile **lockFile, QString & * ricochet-refresh can also load configuration files from a custom directory passed in as the first argument */ - QCommandLineParser parser; parser.setApplicationDescription(QCoreApplication::translate("main","Anonymous peer-to-peer instant messaging, IRC gateway")); QCommandLineOption opt_config_path(QStringLiteral("config"), @@ -297,6 +299,9 @@ static bool initSettings(SettingsFile *settings, QLockFile **lockFile, QString & QCommandLineOption opt_irc_password(QStringLiteral("generate-password"), QCoreApplication::translate("irc", "Generate random IRC password.")); parser.addOption(opt_irc_password); + QCommandLineOption opt_verbose(QStringList() << "debug" << "verbose", + QCoreApplication::translate("irc", "Verbose output")); + parser.addOption(opt_verbose); parser.addHelpOption(); parser.addVersionOption(); parser.process(qApp->arguments()); @@ -307,6 +312,10 @@ static bool initSettings(SettingsFile *settings, QLockFile **lockFile, QString & parser.showHelp(1); } + if (parser.isSet(opt_verbose)) { + ::verbose_output = true; + } + if(parser.isSet(opt_config_path)) { configPath = parser.value(opt_config_path); } else { @@ -480,3 +489,27 @@ QString randomPassword(size_t len) { } return result; } + +void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) +{ + QByteArray localMsg = msg.toLocal8Bit(); + const char *file = context.file ? context.file : ""; + const char *function = context.function ? context.function : ""; + switch (type) { + case QtDebugMsg: + if (::verbose_output) { + fprintf(stderr, "%s\n", localMsg.constData()); + } + break; + case QtInfoMsg: + case QtWarningMsg: + fprintf(stderr, "%s\n", localMsg.constData()); + break; + case QtCriticalMsg: + fprintf(stderr, "CRITICAL: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function); + break; + case QtFatalMsg: + fprintf(stderr, "FATAL: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function); + break; + } +}