这个问题听起来很简单,但我找不到检查轨道 uri 是否正确的方法。
例如,通过给定的有效曲目 uri spotify:track:5Z7ygHQo02SUrFmcgpwsKW播放曲目的正常过程是:
1) 通过 sp_link_create_from_string(const char *$track_uri) 获取 sp_link*
2) 通过 sp_link_as_track(sp_link*) 获取 sp_track*
3) sp_track_add_ref(sp_track*)
4) 如果 sp_track_error() 返回 SP_ERROR_OK 或 SP_ERROR_IS_LOADING 但 metadata_updated 和 SP_ERROR_OK 则 sp_session_player_load 和 sp_session_player_play 加载和播放曲目。
5) sp_track_release() 和 sp_session_player_unload() 当它是轨道结束时。
现在,如果用户在 spotify track uri 上打错字并尝试播放spotify:track:5Z7ygHQo02SUrFmcgpwsKQ(最后一个字符Q是错字,应该是W)。过程中所有可能的错误检查都不会返回任何错误:
步骤 1) sp_link 不为 NULL
步骤 2) sp_track* 不为 NULL
步骤 3) 返回 SP_ERROR_OK
步骤 4) sp_track_error() 返回 SP_ERROR_IS_LOADING,metadata_updated 永远不会被调用,当然程序会挂起。
加载轨道之前的检查无法找出轨道 uri 的无效性。API sp_track_availability听起来像是一种方式,但是如果没有加载轨道,它总是会返回 NOT AVAILABLE,但如果轨道 uri 不正确,则永远不会加载轨道。
我是否遗漏了什么或误解了 API?