dow/firmware/dow_fetch.cpp

98 lines
2.4 KiB
C++

#include "dow_fetch.h"
int dow_fetch(const char *url, std::vector<dow_item_t> &target)
{
int responseCode = -1;
WiFiClient client;
HTTPClient http;
http.useHTTP10(true);
http.begin(client, url);
responseCode = http.GET();
if (responseCode != 200)
{
Serial.print("HTTPClient error:");
Serial.println(responseCode);
http.end();
return -1;
}
JsonDocument doc;
deserializeJson(doc, http.getStream());
target.clear();
dow_item_t dow_item;
uint32_t i = 0;
for (JsonObject item : doc.as<JsonArray>())
{
i++;
if (!item.containsKey("x") || !item.containsKey("y") || !item.containsKey("t"))
{
Serial.print("Invalid item at index ");
Serial.println(i - 1);
continue;
}
// These are required
dow_item.x = item["x"].as<int>();
dow_item.y = item["y"].as<int>();
dow_item.type = item["t"].as<int>();
// Reset to default values
dow_item.verticalAlign = 0;
dow_item.horizontalAlign = 0;
dow_item.font = 0;
dow_item.radius = 0;
dow_item.contents = "";
if (item.containsKey("x2"))
dow_item.x2 = item["x2"].as<int>();
if (item.containsKey("y2"))
dow_item.y2 = item["y2"].as<int>();
if (item.containsKey("r"))
dow_item.radius = item["r"].as<float>();
if (item.containsKey("f"))
dow_item.font = item["f"].as<int>();
if (item.containsKey("va"))
dow_item.verticalAlign = item["va"].as<int>();
if (item.containsKey("ha"))
dow_item.horizontalAlign = item["ha"].as<int>();
if (item.containsKey("c"))
dow_item.contents = item["c"].as<String>();
/*
Serial.print("x: ");
Serial.print(dow_item.x);
Serial.print(" y: ");
Serial.print(dow_item.y);
Serial.print(" x2: ");
Serial.print(dow_item.x2);
Serial.print(" y2: ");
Serial.print(dow_item.y2);
Serial.print(" r: ");
Serial.print(dow_item.radius);
Serial.print(" t: ");
Serial.print(dow_item.type);
Serial.print(" f: ");
Serial.print(dow_item.font);
Serial.print(" va: ");
Serial.print(dow_item.verticalAlign);
Serial.print(" ha: ");
Serial.print(dow_item.horizontalAlign);
Serial.print(" c: ");
Serial.println(dow_item.contents);
*/
target.push_back(dow_item);
}
http.end();
return 0;
}