#include <stdio.h> #include <spotify/api.h> /* --- Data --- */ extern int g_exit_code; static sp_session *g_session; static sp_search *g_search; static void print_track(sp_track *track) { int duration = sp_track_duration(track); printf(" Track \"%s\" [%d:%02d] has %d artist(s), %d%% popularity\n", sp_track_name(track), duration / 60000, (duration / 1000) / 60, sp_track_num_artists(track), sp_track_popularity(track)); } static void print_album(sp_album *album) { printf(" Album \"%s\" (%d)\n", sp_album_name(album), sp_album_year(album)); } static void print_artist(sp_artist *artist) { printf(" Artist \"%s\"\n", sp_artist_name(artist)); } static void print_search(sp_search *search) { int i; printf("Query : %s\n", sp_search_query(search)); printf("Did you mean : %s\n", sp_search_did_you_mean(search)); printf("Tracks in total: %d\n", sp_search_total_tracks(search)); puts(""); for (i = 0; i < sp_search_num_tracks(search) && i < 10; ++i) print_track(sp_search_track(search, i)); puts(""); for (i = 0; i < sp_search_num_albums(search) && i < 10; ++i) print_album(sp_search_album(search, i)); puts(""); for (i = 0; i < sp_search_num_artists(search) && i < 10; ++i) print_artist(sp_search_artist(search, i)); puts(""); } static void terminate(void) { sp_error error; error = sp_session_logout(g_session); if (SP_ERROR_OK != error) { fprintf(stderr, "failed to log out from Spotify: %s\n", sp_error_message(error)); g_exit_code = 5; return; } } static void search_complete(sp_search *search, void *userdata) { if (search && SP_ERROR_OK == sp_search_error(search)) print_search(search); else fprintf(stderr, "Failed to search: %s\n", sp_error_message(sp_search_error(search))); sp_search_release(g_search); g_search = NULL; terminate(); } void metadata_updated(sp_session *session) { } void session_ready(sp_session *session) { g_search = sp_search_create(session, "year:2003 never", 0, 10, &search_complete, NULL); if (!g_search) { fprintf(stderr, "failed to start search\n"); g_exit_code = 6; return; } g_session = session; } void session_terminated(void) { }