Skip to content

Commit 13f8788

Browse files
Copilotdorkmo
andcommitted
Refactor: Extract helper functions for client metadata lookup
Co-authored-by: dorkmo <[email protected]>
1 parent b6193b9 commit 13f8788

File tree

1 file changed

+48
-28
lines changed

1 file changed

+48
-28
lines changed

TankAlarm-112025-Server-BluesOpta/TankAlarm-112025-Server-BluesOpta.ino

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2538,6 +2538,8 @@ static void loadClientConfigSnapshots();
25382538
static void saveClientConfigSnapshots();
25392539
static void cacheClientConfigFromBuffer(const char *clientUid, const char *buffer);
25402540
static ClientConfigSnapshot *findClientConfigSnapshot(const char *clientUid);
2541+
static ClientMetadata *findClientMetadata(const char *clientUid);
2542+
static ClientMetadata *findOrCreateClientMetadata(const char *clientUid);
25412543
static bool checkSmsRateLimit(TankRecord *rec);
25422544
static void publishViewerSummary();
25432545
static double computeNextAlignedEpoch(double epoch, uint8_t baseHour, uint32_t intervalSeconds);
@@ -3237,14 +3239,10 @@ static void sendClientDataJson(EthernetClient &client) {
32373239
clientObj["lastUpdate"] = 0.0;
32383240

32393241
// Add VIN voltage from client metadata if available
3240-
for (uint8_t j = 0; j < gClientMetadataCount; ++j) {
3241-
if (strcmp(gClientMetadata[j].clientUid, rec.clientUid) == 0) {
3242-
if (gClientMetadata[j].vinVoltage > 0.0f) {
3243-
clientObj["vinVoltage"] = gClientMetadata[j].vinVoltage;
3244-
clientObj["vinVoltageEpoch"] = gClientMetadata[j].vinVoltageEpoch;
3245-
}
3246-
break;
3247-
}
3242+
ClientMetadata *meta = findClientMetadata(rec.clientUid);
3243+
if (meta && meta->vinVoltage > 0.0f) {
3244+
clientObj["vinVoltage"] = meta->vinVoltage;
3245+
clientObj["vinVoltageEpoch"] = meta->vinVoltageEpoch;
32483246
}
32493247
}
32503248

@@ -3645,6 +3643,44 @@ static void handleAlarm(JsonDocument &doc, double epoch) {
36453643
}
36463644
}
36473645

3646+
// Helper function to find client metadata entry (read-only, does not create)
3647+
static ClientMetadata *findClientMetadata(const char *clientUid) {
3648+
if (!clientUid || strlen(clientUid) == 0) {
3649+
return nullptr;
3650+
}
3651+
3652+
for (uint8_t i = 0; i < gClientMetadataCount; ++i) {
3653+
if (strcmp(gClientMetadata[i].clientUid, clientUid) == 0) {
3654+
return &gClientMetadata[i];
3655+
}
3656+
}
3657+
3658+
return nullptr;
3659+
}
3660+
3661+
// Helper function to find or create client metadata entry
3662+
static ClientMetadata *findOrCreateClientMetadata(const char *clientUid) {
3663+
if (!clientUid || strlen(clientUid) == 0) {
3664+
return nullptr;
3665+
}
3666+
3667+
// Search for existing entry
3668+
ClientMetadata *existing = findClientMetadata(clientUid);
3669+
if (existing) {
3670+
return existing;
3671+
}
3672+
3673+
// Create new entry if space available
3674+
if (gClientMetadataCount < MAX_CLIENT_METADATA) {
3675+
ClientMetadata *meta = &gClientMetadata[gClientMetadataCount++];
3676+
memset(meta, 0, sizeof(ClientMetadata));
3677+
strlcpy(meta->clientUid, clientUid, sizeof(meta->clientUid));
3678+
return meta;
3679+
}
3680+
3681+
return nullptr;
3682+
}
3683+
36483684
static void handleDaily(JsonDocument &doc, double epoch) {
36493685
// Extract VIN voltage from daily report if present
36503686
const char *clientUid = doc["client"] | "";
@@ -3654,19 +3690,7 @@ static void handleDaily(JsonDocument &doc, double epoch) {
36543690
if (part == 1 && doc.containsKey("vinVoltage")) {
36553691
float vinVoltage = doc["vinVoltage"].as<float>();
36563692
if (vinVoltage > 0.0f) {
3657-
// Find or create client metadata entry
3658-
ClientMetadata *meta = nullptr;
3659-
for (uint8_t i = 0; i < gClientMetadataCount; ++i) {
3660-
if (strcmp(gClientMetadata[i].clientUid, clientUid) == 0) {
3661-
meta = &gClientMetadata[i];
3662-
break;
3663-
}
3664-
}
3665-
if (!meta && gClientMetadataCount < MAX_CLIENT_METADATA) {
3666-
meta = &gClientMetadata[gClientMetadataCount++];
3667-
memset(meta, 0, sizeof(ClientMetadata));
3668-
strlcpy(meta->clientUid, clientUid, sizeof(meta->clientUid));
3669-
}
3693+
ClientMetadata *meta = findOrCreateClientMetadata(clientUid);
36703694
if (meta) {
36713695
meta->vinVoltage = vinVoltage;
36723696
meta->vinVoltageEpoch = (epoch > 0.0) ? epoch : currentEpoch();
@@ -3872,13 +3896,9 @@ static void publishViewerSummary() {
38723896
obj["lastUpdate"] = gTankRecords[i].lastUpdateEpoch;
38733897

38743898
// Add VIN voltage from client metadata if available
3875-
for (uint8_t j = 0; j < gClientMetadataCount; ++j) {
3876-
if (strcmp(gClientMetadata[j].clientUid, gTankRecords[i].clientUid) == 0) {
3877-
if (gClientMetadata[j].vinVoltage > 0.0f) {
3878-
obj["vinVoltage"] = gClientMetadata[j].vinVoltage;
3879-
}
3880-
break;
3881-
}
3899+
ClientMetadata *meta = findClientMetadata(gTankRecords[i].clientUid);
3900+
if (meta && meta->vinVoltage > 0.0f) {
3901+
obj["vinVoltage"] = meta->vinVoltage;
38823902
}
38833903
}
38843904

0 commit comments

Comments
 (0)