#include "external/mtr/line_info.h" #include "external/mtr/station_info.h" #include "cJSON.h" #include "esp_log.h" LineInfo::LineInfo(cJSON* line_json) { if (!line_json) { ESP_LOGE(LINE_INFO_TAG, "line_json is null"); return; } // Parse line code cJSON* code_json = cJSON_GetObjectItem(line_json, "code"); if (code_json && cJSON_IsString(code_json)) { _code = code_json->valuestring; } else { ESP_LOGW(LINE_INFO_TAG, "Missing or invalid 'code' field"); } // Parse line name cJSON* name_json = cJSON_GetObjectItem(line_json, "name"); if (name_json && cJSON_IsString(name_json)) { _name = name_json->valuestring; } else { ESP_LOGW(LINE_INFO_TAG, "Missing or invalid 'name' field"); } // Parse line color (note: field is 'line_color' in JSON, not 'color') cJSON* color_json = cJSON_GetObjectItem(line_json, "line_color"); if (color_json && cJSON_IsString(color_json)) { _color = color_json->valuestring; } else { ESP_LOGW(LINE_INFO_TAG, "Missing or invalid 'line_color' field"); } // Parse stations array cJSON* stations_json = cJSON_GetObjectItem(line_json, "stations"); if (stations_json && cJSON_IsArray(stations_json)) { int station_count = cJSON_GetArraySize(stations_json); _stations.reserve(station_count); for (int i = 0; i < station_count; i++) { cJSON* station_json = cJSON_GetArrayItem(stations_json, i); if (station_json) { _stations.emplace_back(station_json); } } ESP_LOGI(LINE_INFO_TAG, "Created LineInfo: %s with %d stations", _code.c_str(), station_count); } else { ESP_LOGW(LINE_INFO_TAG, "Missing or invalid 'stations' array"); } }