From b5477c7c94a18da55259509c457c8f0af4e9deef Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 23 Sep 2015 03:30:08 +0200 Subject: [PATCH] refs #452, status messages * DB support * finders and convenience methods --- src/blackmisc/statusmessage.cpp | 59 ++++++++++------------------- src/blackmisc/statusmessage.h | 10 ++++- src/blackmisc/statusmessagelist.cpp | 42 ++++++++++++-------- src/blackmisc/statusmessagelist.h | 11 ++++++ 4 files changed, 66 insertions(+), 56 deletions(-) diff --git a/src/blackmisc/statusmessage.cpp b/src/blackmisc/statusmessage.cpp index ac9c7b9bd..c9786be04 100644 --- a/src/blackmisc/statusmessage.cpp +++ b/src/blackmisc/statusmessage.cpp @@ -18,10 +18,6 @@ namespace BlackMisc { - - /* - * Constructors - */ CStatusMessage::CStatusMessage(const QString &message) : m_message(message) {} @@ -58,9 +54,6 @@ namespace BlackMisc } } - /* - * Conversion - */ void CStatusMessage::toQtLogTriple(QtMsgType *o_type, QString *o_category, QString *o_message) const { auto category = m_categories.toQString(); @@ -107,6 +100,7 @@ namespace BlackMisc QString CStatusMessage::getHumanReadableCategory() const { + //! \todo This should me not hardcoded if (this->m_humanReadableCategory.isEmpty()) { const QString cat(this->m_categories.toQString().toLower()); @@ -133,9 +127,6 @@ namespace BlackMisc return this->m_humanReadableCategory; } - /* - * Handled by - */ void CStatusMessage::markAsHandledBy(const QObject *object) const { this->m_handledByObjects.push_back(quintptr(object)); @@ -145,9 +136,6 @@ namespace BlackMisc return this->m_handledByObjects.contains(quintptr(object)); } - /* - * To string - */ QString CStatusMessage::convertToQString(bool /** i18n */) const { @@ -164,12 +152,14 @@ namespace BlackMisc return s; } - /* - * Pixmap - */ const CIcon &CStatusMessage::convertToIcon(const CStatusMessage &statusMessage) { - switch (statusMessage.getSeverity()) + return convertToIcon(statusMessage.getSeverity()); + } + + const CIcon &CStatusMessage::convertToIcon(CStatusMessage::StatusSeverity severity) + { + switch (severity) { case SeverityDebug: return CIconList::iconByIndex(CIcons::StandardIconUnknown16); // TODO case SeverityInfo: return CIconList::iconByIndex(CIcons::StandardIconInfo16); @@ -179,9 +169,20 @@ namespace BlackMisc } } - /* - * Severity - */ + CStatusMessage CStatusMessage::fromDatabaseJson(const QJsonObject &json) + { + CLogCategory cat("swift.db"); + QString msgText(json.value("text").toString()); + QString severityText(json.value("severity").toString()); + QString typeText(json.value("type").toString()); + StatusSeverity severity = stringToSeverity(severityText); + + typeText = "swift.db.type." + typeText.toLower().remove(' '); + + CStatusMessage m({ cat, CLogCategory(typeText)}, severity, msgText); + return m; + } + CStatusMessage::StatusSeverity CStatusMessage::stringToSeverity(const QString &severity) { // pre-check @@ -204,9 +205,6 @@ namespace BlackMisc return SeverityInfo; } - /* - * Severity - */ const QString &CStatusMessage::severityToString(CStatusMessage::StatusSeverity severity) { switch (severity) @@ -238,26 +236,17 @@ namespace BlackMisc } } - /* - * Severity - */ const QString &CStatusMessage::getSeverityAsString() const { return severityToString(this->m_severity); } - /* - * Severity - */ const QStringList &CStatusMessage::allSeverityStrings() { static const QStringList all { severityToString(SeverityDebug), severityToString(SeverityInfo), severityToString(SeverityWarning), severityToString(SeverityError) }; return all; } - /* - * Property by index - */ CVariant CStatusMessage::propertyByIndex(const BlackMisc::CPropertyIndex &index) const { if (index.isMyself()) { return CVariant::from(*this); } @@ -280,9 +269,6 @@ namespace BlackMisc } } - /* - * Set property as index - */ void CStatusMessage::setPropertyByIndex(const CVariant &variant, const BlackMisc::CPropertyIndex &index) { if (index.isMyself()) { (*this) = variant.to(); return; } @@ -305,9 +291,6 @@ namespace BlackMisc } } - /* - * Message as HTML - */ QString CStatusMessage::toHtml() const { QString html; diff --git a/src/blackmisc/statusmessage.h b/src/blackmisc/statusmessage.h index a586734ed..99ab616e2 100644 --- a/src/blackmisc/statusmessage.h +++ b/src/blackmisc/statusmessage.h @@ -147,11 +147,17 @@ namespace BlackMisc //! To HTML QString toHtml() const; + //! \copydoc CValueObject::convertToQString + QString convertToQString(bool i18n = false) const; + //! Representing icon static const CIcon &convertToIcon(const CStatusMessage &statusMessage); - //! \copydoc CValueObject::convertToQString - QString convertToQString(bool i18n = false) const; + //! Representing icon + static const CIcon &convertToIcon(CStatusMessage::StatusSeverity severity); + + //! Object from JSON + static CStatusMessage fromDatabaseJson(const QJsonObject &json); private: BLACK_ENABLE_TUPLE_CONVERSION(CStatusMessage) diff --git a/src/blackmisc/statusmessagelist.cpp b/src/blackmisc/statusmessagelist.cpp index a3c574d44..70ae09163 100644 --- a/src/blackmisc/statusmessagelist.cpp +++ b/src/blackmisc/statusmessagelist.cpp @@ -12,32 +12,35 @@ namespace BlackMisc { - /* - * Construct from base class object - */ CStatusMessageList::CStatusMessageList(const CSequence &other) : CSequence(other) { } - /* - * Messages by type - */ CStatusMessageList CStatusMessageList::findByCategory(const CLogCategory &category) const { - return this->findBy([ & ](const CStatusMessage &msg) { return msg.getCategories().contains(category); }); + return this->findBy([ & ](const CStatusMessage & msg) { return msg.getCategories().contains(category); }); } - /* - * Messages by severity - */ CStatusMessageList CStatusMessageList::findBySeverity(CStatusMessage::StatusSeverity severity) const { return this->findBy(&CStatusMessage::getSeverity, severity); } - /* - * Add category - */ + bool CStatusMessageList::hasErrorMessages() const + { + return findBySeverity(CStatusMessage::SeverityError).size() > 0; + } + + bool CStatusMessageList::hasWarningMessages() const + { + return findBySeverity(CStatusMessage::SeverityWarning).size() > 0; + } + + bool CStatusMessageList::hasWarningOrErrorMessages() const + { + return hasErrorMessages() || hasWarningMessages(); + } + void CStatusMessageList::addCategory(const CLogCategory &category) { for (auto &msg : *this) @@ -46,9 +49,6 @@ namespace BlackMisc } } - /* - * Add categories - */ void CStatusMessageList::addCategories(const CLogCategoryList &categories) { for (auto &msg : *this) @@ -56,4 +56,14 @@ namespace BlackMisc msg.addCategories(categories); } } + + CStatusMessageList CStatusMessageList::fromDatabaseJson(const QJsonArray &array) + { + CStatusMessageList messages; + for (const QJsonValue &value : array) + { + messages.push_back(CStatusMessage::fromDatabaseJson(value.toObject())); + } + return messages; + } } // ns diff --git a/src/blackmisc/statusmessagelist.h b/src/blackmisc/statusmessagelist.h index b80181221..3a5608ffb 100644 --- a/src/blackmisc/statusmessagelist.h +++ b/src/blackmisc/statusmessagelist.h @@ -43,12 +43,23 @@ namespace BlackMisc //! Find by severity CStatusMessageList findBySeverity(CStatusMessage::StatusSeverity severity) const; + //! Error messages + bool hasErrorMessages() const; + + //! Warning messages + bool hasWarningMessages() const; + + //! Warning or error messages + bool hasWarningOrErrorMessages() const; + //! Add a category to all messages in the list void addCategory(const CLogCategory &category); //! Add some categories to all messages in the list void addCategories(const CLogCategoryList &categories); + //! From our database JSON format + static CStatusMessageList fromDatabaseJson(const QJsonArray &array); }; } // ns