From e7f766084f7d3301db2c4cc2c4fc15907e4180a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9verin=20Lemaignan?= Date: Mon, 22 Sep 2025 20:14:01 +0200 Subject: [PATCH] sort the charging socket information from most to least powerful MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Séverin Lemaignan --- libs/indexer/map_object.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/libs/indexer/map_object.cpp b/libs/indexer/map_object.cpp index 564d3ddc3..d1ca51ac2 100644 --- a/libs/indexer/map_object.cpp +++ b/libs/indexer/map_object.cpp @@ -186,6 +186,11 @@ ChargeSocketDescriptors MapObject::GetChargeSockets() const if (s.empty()) return sockets; + // pre-set order of socket types preference (from high-power to low-power). + static std::vector const kSocketTypeOrder = {"type2_combo", "chademo", "nacs", + "type1", "type2_cable", "type2"}; + size_t const unknownTypeOrder = kSocketTypeOrder.size(); + auto tokens = strings::Tokenize(s, ";"); for (auto token : tokens) @@ -226,6 +231,22 @@ ChargeSocketDescriptors MapObject::GetChargeSockets() const sockets.push_back(desc); } + + // Sort sockets: first by type, then by power (descending). + std::sort(sockets.begin(), sockets.end(), [&](ChargeSocketDescriptor const & a, ChargeSocketDescriptor const & b) + { + auto const itA = std::find(kSocketTypeOrder.begin(), kSocketTypeOrder.end(), a.type); + auto const orderA = + (itA == kSocketTypeOrder.end()) ? unknownTypeOrder : std::distance(kSocketTypeOrder.begin(), itA); + auto const itB = std::find(kSocketTypeOrder.begin(), kSocketTypeOrder.end(), b.type); + auto const orderB = + (itB == kSocketTypeOrder.end()) ? unknownTypeOrder : std::distance(kSocketTypeOrder.begin(), itB); + + if (orderA != orderB) + return orderA < orderB; + return a.power > b.power; // Sort by power in descending order for sockets of the same type + }); + return sockets; }