#include <stdio.h> #include <spotify/api.h> /* --- Data --- */ extern int g_exit_code; static sp_session *g_session; static sp_albumbrowse *g_albumbrowse; static sp_artistbrowse *g_artistbrowse; static void print_track(sp_track *track) { int duration = sp_track_duration(track); printf(" Track %s [%d:%02d] has %d artist(s), %d%% popularity, %d on disc %d\n", sp_track_name(track), duration / 60000, (duration / 1000) / 60, sp_track_num_artists(track), sp_track_popularity(track), sp_track_index(track), sp_track_disc(track)); } static void print_albumbrowse(sp_albumbrowse *browse) { int i; printf("Album browse of \"%s\" (%d)\n", sp_album_name(sp_albumbrowse_album(browse)), sp_album_year(sp_albumbrowse_album(browse))); for (i = 0; i < sp_albumbrowse_num_copyrights(browse); ++i) printf(" Copyright: %s\n", sp_albumbrowse_copyright(browse, i)); printf(" Tracks: %d\n", sp_albumbrowse_num_tracks(browse)); printf(" Review: %.60s...\n", sp_albumbrowse_review(browse)); puts(""); for (i = 0; i < sp_albumbrowse_num_tracks(browse); ++i) print_track(sp_albumbrowse_track(browse, i)); puts(""); } static void print_artistbrowse(sp_artistbrowse *browse) { int i; printf("Artist browse of \"%s\"\n", sp_artist_name(sp_artistbrowse_artist(browse))); for (i = 0; i < sp_artistbrowse_num_similar_artists(browse); ++i) printf(" Similar artist: %s\n", sp_artist_name(sp_artistbrowse_similar_artist(browse, i))); printf(" Portraits: %d\n", sp_artistbrowse_num_portraits(browse)); printf(" Tracks : %d\n", sp_artistbrowse_num_tracks(browse)); printf(" Biography: %.60s...\n", sp_artistbrowse_biography(browse)); puts(""); for (i = 0; i < sp_artistbrowse_num_tracks(browse); ++i) print_track(sp_artistbrowse_track(browse, i)); puts(""); } static void try_terminate(void) { sp_error error; if (g_albumbrowse || g_artistbrowse) return; 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 album_complete(sp_albumbrowse *browse, void *userdata) { if (browse && SP_ERROR_OK == sp_albumbrowse_error(browse)) print_albumbrowse(browse); else fprintf(stderr, "Failed to browse album: %s\n", sp_error_message(sp_albumbrowse_error(browse))); sp_albumbrowse_release(g_albumbrowse); g_albumbrowse = NULL; try_terminate(); } static void artist_complete(sp_artistbrowse *browse, void *userdata) { if (browse && SP_ERROR_OK == sp_artistbrowse_error(browse)) print_artistbrowse(browse); else fprintf(stderr, "Failed to browse artist: %s\n", sp_error_message(sp_artistbrowse_error(browse))); sp_artistbrowse_release(g_artistbrowse); g_artistbrowse = NULL; try_terminate(); } void metadata_updated(sp_session *session) { } void session_ready(sp_session *session) { sp_link *link = sp_link_create_from_string("spotify:artist:0gxyHStUsqpMadRV0Di1Qt"); sp_artist *artist; sp_album *album; if (!link) { fprintf(stderr, "failed to get link from a Spotify URI\n"); g_exit_code = 6; return; } artist = sp_link_as_artist(link); if (!artist) { fprintf(stderr, "not an artist link\n"); sp_link_release(link); g_exit_code = 7; return; } g_artistbrowse = sp_artistbrowse_create(session, artist, &artist_complete, NULL); sp_link_release(link); if (!g_artistbrowse) { fprintf(stderr, "failed to start artist browse\n"); g_exit_code = 10; return; } link = sp_link_create_from_string("spotify:album:3L0CYQZR9jjFLbyX8ZZ6UP"); if (!link) { fprintf(stderr, "failed to get link from a Spotify URI\n"); g_exit_code = 8; return; } album = sp_link_as_album(link); if (!album) { fprintf(stderr, "not an album link\n"); sp_link_release(link); g_exit_code = 9; return; } g_albumbrowse = sp_albumbrowse_create(session, album, &album_complete, NULL); sp_link_release(link); if (!g_albumbrowse) { fprintf(stderr, "failed to start album browse\n"); g_exit_code = 10; return; } g_session = session; } void session_terminated(void) { }