+
+void Logger::messageHandler(QtMsgType type, const QMessageLogContext &, const QString &message)
+{
+ Quassel::instance()->logger()->handleMessage(type, message);
+}
+
+
+void Logger::handleMessage(QtMsgType type, const QString &msg)
+{
+ switch (type) {
+ case QtDebugMsg:
+ handleMessage(LogLevel::Debug, msg);
+ break;
+ case QtInfoMsg:
+ handleMessage(LogLevel::Info, msg);
+ break;
+ case QtWarningMsg:
+ handleMessage(LogLevel::Warning, msg);
+ break;
+ case QtCriticalMsg:
+ handleMessage(LogLevel::Error, msg);
+ break;
+ case QtFatalMsg:
+ handleMessage(LogLevel::Fatal, msg);
+ break;
+ }
+}
+
+
+void Logger::handleMessage(LogLevel level, const QString &msg)
+{
+ QString logString;
+
+ switch (level) {
+ case LogLevel::Debug:
+ logString = "[Debug] ";
+ break;
+ case LogLevel::Info:
+ logString = "[Info ] ";
+ break;
+ case LogLevel::Warning:
+ logString = "[Warn ] ";
+ break;
+ case LogLevel::Error:
+ logString = "[Error] ";
+ break;
+ case LogLevel::Fatal:
+ logString = "[FATAL] ";
+ break;
+ }
+
+ // Use signal connection to make this method thread-safe
+ emit messageLogged({QDateTime::currentDateTime(), level, logString += msg});
+}
+
+
+void Logger::onMessageLogged(const LogEntry &message)
+{
+ if (_keepMessages) {
+ _messages.push_back(message);
+ }
+
+ // If setup() wasn't called yet, just store the message - will be output later
+ if (_initialized) {
+ outputMessage(message);
+ }