From e87b4fec21062970dc3d6783f0065d447164ab2c Mon Sep 17 00:00:00 2001 From: john30 Date: Sat, 18 Feb 2017 13:40:42 +0100 Subject: [PATCH] include all users messages if level was not requested in find command --- src/ebusd/mainloop.cpp | 9 +++++---- src/lib/ebus/message.cpp | 6 +++--- src/lib/ebus/message.h | 4 +++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/ebusd/mainloop.cpp b/src/ebusd/mainloop.cpp index c38c5ac6..8f362bde 100644 --- a/src/ebusd/mainloop.cpp +++ b/src/ebusd/mainloop.cpp @@ -288,7 +288,7 @@ void MainLoop::run() { } time(&now); if (!dataSinks.empty()) { - messages = m_messages->findAll("", "", "*", false, true, true, true, true, sinkSince, now); + messages = m_messages->findAll("", "", "*", false, true, true, true, true, true, sinkSince, now); for (deque::iterator it = messages.begin(); it != messages.end(); it++) { Message* message = *it; for (list::iterator it = dataSinks.begin(); it != dataSinks.end(); it++) { @@ -328,7 +328,7 @@ void MainLoop::run() { } if (listening) { string levels = getUserLevels(user); - messages = m_messages->findAll("", "", levels, false, true, true, true, true, since, now); + messages = m_messages->findAll("", "", levels, false, true, true, true, true, true, since, now); for (deque::iterator it = messages.begin(); it != messages.end(); it++) { Message* message = *it; ostream << message->getCircuit() << " " << message->getName() << " = " << dec; @@ -963,7 +963,7 @@ string MainLoop::executeHex(vector &args) { string MainLoop::executeFind(vector &args, string levels) { size_t argPos = 1; bool configFormat = false, exact = false, withRead = true, withWrite = false, withPassive = true, first = true, - onlyWithData = false, hexFormat = false; + onlyWithData = false, hexFormat = false, userLevel = true; OutputFormat verbosity = 0; vector columns; string circuit; @@ -1075,6 +1075,7 @@ string MainLoop::executeFind(vector &args, string levels) { break; } levels = args[argPos]; + userLevel = false; } else { argPos = 0; // print usage break; @@ -1103,7 +1104,7 @@ string MainLoop::executeFind(vector &args, string levels) { " NAME NAME of the messages to find (or a part thereof without '-e')"; } deque messages = m_messages->findAll( - circuit, args.size() == argPos ? "" : args[argPos], levels, exact, withRead, withWrite, withPassive); + circuit, args.size() == argPos ? "" : args[argPos], levels, exact, withRead, withWrite, withPassive, userLevel); bool found = false; ostringstream result; diff --git a/src/lib/ebus/message.cpp b/src/lib/ebus/message.cpp index 6a290b41..00c2155b 100644 --- a/src/lib/ebus/message.cpp +++ b/src/lib/ebus/message.cpp @@ -2002,8 +2002,8 @@ Message* MessageMap::find(const string& circuit, const string& name, const strin } deque MessageMap::findAll(const string& circuit, const string& name, const string& levels, - const bool completeMatch, const bool withRead, const bool withWrite, - const bool withPassive, const bool onlyAvailable, + const bool completeMatch, const bool withRead, const bool withWrite, const bool withPassive, + const bool includeEmptyLevel, const bool onlyAvailable, const time_t since, const time_t until) { deque ret; string lcircuit = circuit; @@ -2019,7 +2019,7 @@ deque MessageMap::findAll(const string& circuit, const string& name, c } for (vector::iterator msgIt = it->second.begin(); msgIt != it->second.end(); msgIt++) { Message* message = *msgIt; - if (checkLevel && !message->hasLevel(levels, !completeMatch)) { + if (checkLevel && !message->hasLevel(levels, includeEmptyLevel)) { continue; } if (checkCircuit) { diff --git a/src/lib/ebus/message.h b/src/lib/ebus/message.h index d12198bd..6a43edff 100644 --- a/src/lib/ebus/message.h +++ b/src/lib/ebus/message.h @@ -1320,6 +1320,8 @@ class MessageMap : public FileReader { * @param withWrite true to include write messages (default false). * @param withPassive true to include passive messages (default false). * @return the found @a Message instances. + * @param includeEmptyLevel true to also include messages with no access level, false to include only messages with + * the specified level. * @param onlyAvailable true to include only available messages (default true), false to also include messages that * are currently not available (e.g. due to unresolved or false conditions). * @param since the start time from which to add updates (inclusive, also removes messages with unset destination @@ -1330,7 +1332,7 @@ class MessageMap : public FileReader { */ deque findAll(const string& circuit, const string& name, const string& levels, const bool completeMatch = true, const bool withRead = true, const bool withWrite = false, - const bool withPassive = false, const bool onlyAvailable = true, + const bool withPassive = false, const bool includeEmptyLevel = true, const bool onlyAvailable = true, const time_t since = 0, const time_t until = 0); /**