aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntony Kellermann2018-09-26 19:05:42 -0400
committerAntony Kellermann2018-09-26 19:05:42 -0400
commit52c072060efc55b7ba43d780dbce95b871db9d5d (patch)
tree8aef72a345cd6daa08226396344dced5f01aa122
parent5a94f8cbdd261a776d4364a50fab06e0b010b706 (diff)
downloadaur-52c072060efc55b7ba43d780dbce95b871db9d5d.tar.gz
Split up ref_data storage into separate functionsand added time_loaded variable to it
-rw-r--r--api.c33
-rw-r--r--api.h7
-rw-r--r--gtk_win.c2
3 files changed, 33 insertions, 9 deletions
diff --git a/api.c b/api.c
index ba3c8d83b18e..f5f09f28799b 100644
--- a/api.c
+++ b/api.c
@@ -15,6 +15,7 @@ Ref_Data* ref_data_init_length(size_t length) {
memset(pRef_Data->names[i], '\0', NAME_MAX_LENGTH);
}
pRef_Data->length = length;
+ pRef_Data->time_loaded = EMPTY;
return pRef_Data;
}
@@ -455,25 +456,45 @@ void info_array_store_totals(Info_Array* pInfo_Array) {
pInfo_Array->totals->total_spent;
}
-Ref_Data* api_iex_store_ref_data(void) {
+Ref_Data* api_iex_get_ref_data(void) {
String* pString = api_curl_url("https://api.iextrading.com/1.0/ref-data/symbols");
if (pString == NULL)
return NULL;
- Json* jobj = json_tokener_parse(pString->data), * idx;
+ Json* jobj = json_tokener_parse(pString->data);
Ref_Data* pRef_Data = ref_data_init_length(json_object_array_length(jobj));
+ ref_data_store_json(pRef_Data, jobj);
+
+ json_object_put(jobj);
+ string_destroy(&pString);
+ return pRef_Data;
+}
+
+void ref_data_store_json(Ref_Data* pRef_Data, const Json* jobj) {
+ Json* idx;
for (size_t i = 0; i < pRef_Data->length; i++) {
idx = json_object_array_get_idx(jobj, i);
strcpy(pRef_Data->symbols[i], json_object_get_string(json_object_object_get(idx,
- "symbol")));
+ "symbol")));
strncpy(pRef_Data->names[i], json_object_get_string(json_object_object_get(idx, "name")),
NAME_MAX_LENGTH -1);
pRef_Data->names[i][NAME_MAX_LENGTH - 1] = '\0';
}
- json_object_put(jobj);
- string_destroy(&pString);
- return pRef_Data;
+ idx = json_object_array_get_idx(jobj, 1);
+
+ // Date format: yyyy-mm-dd
+ const char* date = json_object_get_string(json_object_object_get(idx, "date"));
+ char year[5] = {0}, month[3] = {0}, day[3] = {0};
+ strncpy(year, date, 4);
+ strncpy(month, &date[5], 2);
+ strncpy(day, &date[8], 2);
+ struct tm time = {
+ .tm_year = atoi(year) - 1900,
+ .tm_mon = atoi(month) - 1,
+ .tm_mday = atoi(day)
+ };
+ pRef_Data->time_loaded = mktime(&time);
}
void info_array_store_endpoints_json(Info_Array* pInfo_Array, const Json* jobj) {
diff --git a/api.h b/api.h
index 866fa0616fa0..91b722aec485 100644
--- a/api.h
+++ b/api.h
@@ -38,8 +38,9 @@ typedef enum data_level {
typedef struct ref_data {
char** symbols; // Sorted
- char** names; // Sorted
+ char** names;
size_t length;
+ int64_t time_loaded;
} Ref_Data;
typedef struct news_article {
@@ -291,7 +292,9 @@ void info_array_store_totals(Info_Array* pInfo_Array);
* Returns a pointer to an Info_Array containing a list of all iex listed securities.
* @return Info_Array*
*/
-Ref_Data* api_iex_store_ref_data(void);
+Ref_Data* api_iex_get_ref_data(void);
+
+void ref_data_store_json(Ref_Data* pRef_Data, const Json* jobj);
/**
* Stores the data found in IEX formatted jobj in the Info_Array.
diff --git a/gtk_win.c b/gtk_win.c
index 208ebfb4a772..175ecdeb244a 100644
--- a/gtk_win.c
+++ b/gtk_win.c
@@ -367,7 +367,7 @@ void on_search_entry_focus_in_event(GtkWidget* search_entry, GdkEvent* event) {
if (app.iex_ref_data != NULL) // If ref data has already been loaded return
return;
- app.iex_ref_data = api_iex_store_ref_data();
+ app.iex_ref_data = api_iex_get_ref_data();
GtkListStore* list_store = GTK_LIST_STORE(GET_OBJECT("search_entry_completion_store"));
GtkTreeIter iter;
for (size_t i = 0; i < app.iex_ref_data->length; i++) {