allow trailing "*" as wildcard for circuit and name in /list topic

This commit is contained in:
john30
2020-06-01 10:56:32 +02:00
committed by John-Michael Baier
parent 5e97d0864d
commit 6168af1f5a
+13 -1
View File
@@ -647,9 +647,21 @@ void MqttHandler::notifyTopic(const string& topic, const string& data) {
if (isList) {
logOtherInfo("mqtt", "received list topic for %s %s", circuit.c_str(), name.c_str());
deque<Message*> messages;
m_messages->findAll(circuit, name, m_levels, true, true, true, true, true, true, 0, 0, false, &messages);
bool circuitPrefix = circuit.length()>0 && circuit.find_last_of('*')==circuit.length()-1;
if (circuitPrefix) {
circuit = circuit.substr(0, circuit.length()-1);
}
bool namePrefix = name.length()>0 && name.find_last_of('*')==name.length()-1;
if (namePrefix) {
name = name.substr(0, name.length()-1);
}
m_messages->findAll(circuit, name, m_levels, !(circuitPrefix || namePrefix), true, true, true, true, true, 0, 0, false, &messages);
bool onlyWithData = !data.empty();
for (const auto message : messages) {
if (circuitPrefix && (message->getCircuit().substr(0, circuit.length())!=circuit || !namePrefix && name.length()>0 && message->getName()!=name)
|| namePrefix && (message->getName().substr(0, name.length())!=name || !circuitPrefix && circuit.length()>0 && message->getCircuit()!=circuit)) {
continue;
}
time_t lastup = message->getLastUpdateTime();
if (onlyWithData && lastup == 0) {
continue;