diff --git a/libnymea-app/applogcontroller.cpp b/libnymea-app/applogcontroller.cpp index 946ac9ac..0b54c054 100644 --- a/libnymea-app/applogcontroller.cpp +++ b/libnymea-app/applogcontroller.cpp @@ -207,6 +207,8 @@ void AppLogController::append(const QString &category, const QString &message, L return; } + QDateTime timestamp = QDateTime::currentDateTime(); + if (m_logFile.isOpen()) { QHash t = { {LogLevelDebug, "D"}, @@ -214,12 +216,12 @@ void AppLogController::append(const QString &category, const QString &message, L {LogLevelWarning, "W"}, {LogLevelCritical, "C"} }; - QString line = QString("%0: %1: %2\n").arg(t.value(level), category, message); + QString line = QString("%0:%1:%2: %3\n").arg(timestamp.toString("yyyy-MM-dd hh:mm:ss.zzz"), t.value(level), category, message); m_logFile.write(line.toUtf8()); m_logFile.flush(); } - emit messageAdded(category, message, level); + emit messageAdded(timestamp, category, message, level); } void AppLogController::updateFilters() @@ -282,24 +284,20 @@ LogMessages::LogMessages(QObject *parent): while (!f.atEnd()) { QByteArray line = f.readLine().trimmed(); QList parts = line.split(':'); - if (parts.length() < 2) { + if (parts.length() < 6) { continue; } LogMessage message; + QString timestampString = parts.takeFirst(); + timestampString.append(":" + parts.takeFirst()); + timestampString.append(":" + parts.takeFirst()); + message.timestamp = QDateTime::fromString(timestampString, "yyyy-MM-dd hh:mm:ss.zzz"); message.level = map.value(parts.takeFirst()); message.category = parts.takeFirst(); message.message = parts.join(":"); m_messages.append(message); } - connect(AppLogController::instance(), &AppLogController::messageAdded, this, [=](const QString &category, const QString &message, AppLogController::LogLevel level){ - beginInsertRows(QModelIndex(), m_messages.count(), m_messages.count()); - LogMessage msg; - msg.category = category; - msg.message = message; - msg.level = level; - m_messages.append(msg); - endInsertRows(); - }); + connect(AppLogController::instance(), &AppLogController::messageAdded, this, &LogMessages::append); } int LogMessages::rowCount(const QModelIndex &parent) const @@ -310,15 +308,18 @@ int LogMessages::rowCount(const QModelIndex &parent) const QVariant LogMessages::data(const QModelIndex &index, int role) const { + LogMessage message = m_messages.at(index.row()); switch (role) { + case RoleTimestamp: + return message.timestamp; case RoleCategory: - return m_messages.at(index.row()).category; + return message.category; case RoleMessage: - return m_messages.at(index.row()).message; + return message.message; case RoleLevel: - return m_messages.at(index.row()).level; + return message.level; case RoleText: - return m_messages.at(index.row()).category + ": " + m_messages.at(index.row()).message; + return message.timestamp.toString("hh:mm:ss") + ": " + message.category + ": " + message.message; } return QVariant(); } @@ -326,6 +327,7 @@ QVariant LogMessages::data(const QModelIndex &index, int role) const QHash LogMessages::roleNames() const { QHash roles; + roles.insert(RoleTimestamp, "timestamp"); roles.insert(RoleCategory, "category"); roles.insert(RoleMessage, "message"); roles.insert(RoleLevel, "level"); @@ -333,10 +335,11 @@ QHash LogMessages::roleNames() const return roles; } -void LogMessages::append(const QString &category, const QString &message, AppLogController::LogLevel level) +void LogMessages::append(const QDateTime ×tamp, const QString &category, const QString &message, AppLogController::LogLevel level) { beginInsertRows(QModelIndex(), m_messages.count(), m_messages.count()); LogMessage msg; + msg.timestamp = timestamp; msg.category = category; msg.message = message; msg.level = level; diff --git a/libnymea-app/applogcontroller.h b/libnymea-app/applogcontroller.h index 5701b948..e1fa4d0a 100644 --- a/libnymea-app/applogcontroller.h +++ b/libnymea-app/applogcontroller.h @@ -36,6 +36,7 @@ #include #include #include +#include class LogMessages; class LoggingCategories; @@ -80,7 +81,7 @@ signals: void logToModelChanged(); void categoryChanged(const QString &category, LogLevel level); - void messageAdded(const QString &category, const QString &message, LogLevel level); + void messageAdded(const QDateTime ×tamp, const QString &category, const QString &message, LogLevel level); private: explicit AppLogController(QObject *parent = nullptr); @@ -107,6 +108,7 @@ class LogMessages: public QAbstractListModel public: enum Roles { + RoleTimestamp, RoleCategory, RoleMessage, RoleLevel, @@ -115,6 +117,7 @@ public: Q_ENUM(Roles) struct LogMessage { + QDateTime timestamp; QString category; QString message; AppLogController::LogLevel level; @@ -126,7 +129,8 @@ public: QVariant data(const QModelIndex &index, int role) const override; QHash roleNames() const override; - void append(const QString &category, const QString &message, AppLogController::LogLevel level); +private slots: + void append(const QDateTime ×tamp, const QString &category, const QString &message, AppLogController::LogLevel level); private: QList m_messages; diff --git a/nymea-app/ui/appsettings/AppLogPage.qml b/nymea-app/ui/appsettings/AppLogPage.qml index 023b3f60..81b7b766 100644 --- a/nymea-app/ui/appsettings/AppLogPage.qml +++ b/nymea-app/ui/appsettings/AppLogPage.qml @@ -51,6 +51,7 @@ Page { ListView { id: listView anchors.fill: parent + clip: true ScrollBar.vertical: ScrollBar {}