#include #include #include #include #include #define conf_file "config.ini" #define mb_url "https://musicbrainz.org/ws/2/artist?query=artist:\"Slayer\"&fmt=json" const char *get_conf_str(char set_key[10]) { const char *prog_conf = malloc(10 * sizeof(char)); config_t cfg; config_setting_t *setting; config_init(&cfg); if (!config_read_file(&cfg, conf_file)) { fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg), config_error_line(&cfg), config_error_text(&cfg)); config_destroy(&cfg); return ""; } setting = config_lookup(&cfg, set_key); prog_conf = config_setting_get_string(setting); config_destroy(&cfg); return prog_conf; } int get_conf_int(char set_key[10]) { int set_int; config_t cfg; config_setting_t *setting; config_init(&cfg); if (!config_read_file(&cfg, conf_file)) { fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg), config_error_line(&cfg), config_error_text(&cfg)); config_destroy(&cfg); return 1; } setting = config_lookup(&cfg, set_key); set_int = config_setting_get_int(setting); config_destroy(&cfg); return set_int; } void print_conf(const char m_dir[20], const int mb_conf, const char ftv_api_key[32]) { if (m_dir != NULL) { printf("The music directory is: %s\n", m_dir); } if (mb_conf != 1) { printf("The lower limit for MB confidence is: %d\n", mb_conf); } if (ftv_api_key != NULL) { printf("Your API key is: %s\n", ftv_api_key); } } const char* get_mb_id(){ int response_code; const char *mb_id; CURL *curl; CURLcode res; char *buffer; long res_len; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, mb_url); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed with error: %s\n", curl_easy_strerror(res)); return "1"; } curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &res_len); buffer = malloc(res_len); res = curl_easy_recv(curl, buffer, res_len, 0); if(res != CURLE_OK){ fprintf(stderr, "curl_easy_recv() failed with error: %s\n", curl_easy_strerror(res)); return "1"; } printf("Response body: %s\n", buffer); free(buffer); curl_easy_cleanup(curl); } return mb_id; } int main(int argc, char **argv) { int mb_conf, opt; const char *m_dir, *ftv_api_key; m_dir = get_conf_str("dir"); mb_conf = get_conf_int("confidence"); ftv_api_key = get_conf_str("api_key"); while ((opt = getopt(argc, argv, "ps:")) != -1){ switch (opt) { case 'p': print_conf(m_dir, mb_conf, ftv_api_key); break; default: printf("So long and thanks for all the fish.\n"); break; } } return EXIT_SUCCESS; }