diff options
author | Antony Kellermann | 2018-09-26 19:05:42 -0400 |
---|---|---|
committer | Antony Kellermann | 2018-09-26 19:05:42 -0400 |
commit | 52c072060efc55b7ba43d780dbce95b871db9d5d (patch) | |
tree | 8aef72a345cd6daa08226396344dced5f01aa122 | |
parent | 5a94f8cbdd261a776d4364a50fab06e0b010b706 (diff) | |
download | aur-52c072060efc55b7ba43d780dbce95b871db9d5d.tar.gz |
Split up ref_data storage into separate functionsand added time_loaded variable to it
-rw-r--r-- | api.c | 33 | ||||
-rw-r--r-- | api.h | 7 | ||||
-rw-r--r-- | gtk_win.c | 2 |
3 files changed, 33 insertions, 9 deletions
@@ -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) { @@ -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++) { |