aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api.c48
-rw-r--r--api.h2
2 files changed, 49 insertions, 1 deletions
diff --git a/api.c b/api.c
index 34e44ef941c0..e4e30a48419a 100644
--- a/api.c
+++ b/api.c
@@ -577,6 +577,51 @@ Info* api_get_info(const char* symbol) {
return coinmarketcap_get_info(symbol);
}
+void api_info_array_populate_data(Info_Array* portfolio_data, String* pString) {
+ Json* jobj = json_tokener_parse(pString->data);
+ char syms[portfolio_data->length][SYMBOL_MAX_LENGTH];
+ double amount_array[portfolio_data->length], spent_array[portfolio_data->length];
+ pthread_t threads[portfolio_data->length];
+ for (size_t i = 0; i < portfolio_data->length; i++) {
+ strcpy(syms[i], json_object_get_string(json_object_object_get(json_object_array_get_idx(
+ jobj, i), "Symbol")));
+ amount_array[i] = json_object_get_double(json_object_object_get(json_object_array_get_idx(
+ jobj, i), "Shares"));
+ spent_array[i] = json_object_get_double(json_object_object_get(json_object_array_get_idx(
+ jobj, i), "USD_Spent"));
+ if (strcmp(syms[i], "USD$") != 0)
+ if (pthread_create(&threads[i], NULL, (void* (*)(void*)) api_get_check_info, syms[i]))
+ EXIT_MSG("Error creating thread!")
+ }
+ json_object_put(jobj);
+
+ void* temp = NULL;
+ int load_len = 0;
+ for (size_t i = 0; i < portfolio_data->length; i++) {
+ // Print loading string
+ if (i > 0)
+ for (int j = 0; j < load_len; j++)
+ putchar('\b');
+ load_len = printf("Loading data (%d/%d)", (int) i + 1, (int) portfolio_data->length);
+ fflush(stdout);
+
+ if (strcmp(syms[i], "USD$") != 0) {
+ if (pthread_join(threads[i], &temp))
+ EXIT_MSG("Error joining thread!")
+
+ portfolio_data->array[i] = temp;
+ }
+ else {
+ portfolio_data->array[i] = api_info_init();
+ strcpy(portfolio_data->array[i]->symbol, syms[i]);
+ }
+ portfolio_data->array[i]->amount = amount_array[i];
+ portfolio_data->array[i]->total_spent = spent_array[i];
+ calculate_check_data(portfolio_data->array[i]);
+ }
+ info_array_calculate_totals(portfolio_data);
+}
+
Info_Array* iex_get_valid_symbols(void) {
char* iex_api_string = "https://api.iextrading.com/1.0/ref-data/symbols";
String* pString = api_curl_data(iex_api_string);
@@ -625,7 +670,8 @@ void api_info_array_destroy(Info_Array** phInfo_Array) {
for (size_t i = 0; i < pInfo_Array->length; i++)
api_info_destroy(&pInfo_Array->array[i]);
free(pInfo_Array->array);
- api_info_destroy(&pInfo_Array->totals);
+ if (pInfo_Array->totals != NULL)
+ api_info_destroy(&pInfo_Array->totals);
free(*phInfo_Array);
*phInfo_Array = NULL;
} \ No newline at end of file
diff --git a/api.h b/api.h
index 7476b7ca2a95..ed38db54664a 100644
--- a/api.h
+++ b/api.h
@@ -310,6 +310,8 @@ Info* api_get_check_info(const char* symbol);
*/
Info* api_get_info(const char* symbol);
+void api_info_array_populate_data(Info_Array* portfolio_data, String* pString);
+
/**
* Returns a pointer to an Info_Array containing a list of all iex listed securities.
* @return Info_Array*