// Loads track if metadata exists, otherwise load the metadata static void load_track_or_metadata(sp_session *session, sp_track *track, const char *uri) { if (track != NULL) { if (s_is_playing) sp_session_player_play(session, false); sp_session_player_unload(session); sp_track_release(track); } track = sp_link_as_track(sp_link_create_from_string(uri)); set_track(track); sp_track_add_ref(track); s_player_position = 0; s_current_uri = uri; // either the track is already cached and can be used or we need to wait for the metadata callback if (sp_track_is_loaded(track)) load_and_play_track(session, track); else s_is_waiting_for_metadata = true; }
// Load the track if the metadata update was concerning the track void load_and_play_track_after_metadata_updated(list<int> int_params, list<string> string_params, sp_session *session, sp_track *track) { if (s_is_waiting_for_metadata == true && sp_track_is_loaded(track)) { s_is_waiting_for_metadata = false; load_and_play_track(session, track); } }