首页 文章

libspotify:有时创建的播放列表没有名称

提问于
浏览
1

我使用的是最新版本的libspotify API(12.1.51) . 我正在使用C#和libspotify.NET(一个用于libspotify的简单互操作包装器库)进行编码 . 我已经构建了一个使用libspotify API创建播放列表的程序 . 我正在使用最新的Windows原生Spotify客户端来检查我创建的播放列表 .

我已经构建了一个等待播放列表名称和轨道URI列表或一个专辑URI的程序,并创建相应的播放列表 . 如果提供了专辑URI,则该专辑中的所有曲目将被添加到新的播放列表中,否则将提供所提供的曲目URI列表来创建新的播放列表 . 程序一直等到回调

playlist_update_in_progress

在接受要创建的新播放列表之前调用并且done参数等于true .

它运行良好,但有时播放列表创建时没有名称,但确实有所有轨道 . 我可以告诉程序创建完全相同的没有名字的播放列表,它可能会第二次工作 . 它是随机发生的,但我注意到如果我创建大约200个播放列表,那么可能有5-10个播放列表没有名字 . 我可以在程序运行时看到Spotify客户端中添加的播放列表,并创建播放列表并随机查看没有名称的播放列表 . 播放列表几乎在调用回调的同时出现,并且完成等于true(当然,并非总是存在延迟) . 我尝试手动重命名Spotify客户端for Windows中的播放列表没有问题(如果你愿意,播放列表名称长度为0或空字符串) . 本机Spotify客户端甚至不允许空播放列表名称 .

我用:

sp_playlistcontainer_add_new_playlist

添加一个新的播放列表,我尝试使用IntPtr和一个C#字符串传递给它 . 尝试了两个:

[DllImport("libspotify")]
public static extern IntPtr sp_playlistcontainer_add_new_playlist(IntPtr playlistContainerPtr, string name);

[DllImport("libspotify")]
public static extern IntPtr sp_playlistcontainer_add_new_playlist(IntPtr playlistContainerPtr, IntPtr namePtr);

我也试过了

sp_playlist_rename

多次重命名播放列表(作为某种修复)没有成功 . 我不确切知道在创建播放列表时服务器上发生了什么 . 这是一个错误还是发生了什么?

我真的尝试了很多黑客来完成这项工作,但无济于事 .

关于该计划的更多信息:

首先它连接到Spotify,然后等待一些控制台输入 . 它检查以下字符串的输入:

要使用名称和曲目列表创建播放列表:

createplaylistfromtracks "Tracks playlist" spotify:track:36MuLw248uzLPtrJ6073ZR spotify:track:5WPkvx0MARhlWhXp1sJg4k spotify:track:1VrdbSFVU9wJkuDM2sWYVe spotify:track:66RG0BBwpQqHxZs06UUyeo spotify:track:0zp3uPuhnARR1XYsgg5JLV

并使用相册URI中的名称和曲目列表创建播放列表:

createplaylistfromalbum "Album playlist" spotify:album:5rVwDKRKa1FjDlLofDZyRb

然后程序解析输入并创建播放列表并设置标志Busy = true,以便控制台在Busy = false之前不会读取任何输入,这在调用playlist_update_in_progress回调并且为true时发生 . 然后再次读取输入...

任何帮助将受到高度赞赏 .

1 回答

  • 0

    我们有许多应用程序在内部和外部运行libspotify,我们没有像库这样的问题,这表明这不是libspotify中的错误 .

    一些可能导致这种情况发生的指针:

    • 确保正确管理线程 . 当你得到一个 notify_main_thread() 调用(它到达某个后台线程)时,你必须从主线程异步调用 sp_sesion_process_events() ,所以你需要确保're marshalling this over to the main thread properly. If this process isn' t正常工作,东西会开始表现得很奇怪 .

    • 由于您正在执行许多操作,请确保libspotify有时间将所有更改与服务同步 . playlist_update_in_progress 旨在在播放列表发生多个突变时通知您,并且当更改从其他地方传入时通常很有用 . 相反,你需要 playlist_state_changed 来听取这样的变化(通常,在重命名后,我相信播放列表在应用更改时进入"loading"状态,然后在完成后退出(即 sp_playlist_is_loading 再次返回 false ) .

    • 此外,当您退出应用程序时,请确保执行 sp_session_logout() 调用并等待 logged_out 回调被触发,然后退出 . 如果不这样做,某些更改可能无法与服务同步 .

相关问题