From 6168af1f5aa47ec3e6cbb8b6f4a1c757445fe301 Mon Sep 17 00:00:00 2001 From: john30 Date: Sat, 11 Apr 2020 15:30:20 +0200 Subject: [PATCH] allow trailing "*" as wildcard for circuit and name in /list topic --- src/ebusd/mqtthandler.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ebusd/mqtthandler.cpp b/src/ebusd/mqtthandler.cpp index 5c38db73..82e7c362 100644 --- a/src/ebusd/mqtthandler.cpp +++ b/src/ebusd/mqtthandler.cpp @@ -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 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;