2012-03-05 83 views
0

我一直在玩libspotify,遇到了一些奇怪的事情。是基于sp_playlistcontainer_move_playlist 0还是基于1的索引参数?他们似乎是既,也许既不:)特别是如果我有三个播放列表,我注意到了以下结果:libspotify API索引参数。基于0还是基于1?

sp_playlistcontainer_move_playlist(手柄,0,3,FALSE)

成功,并在索引0(移动播放列表播放列表列表中的第一个)到播放列表列表的末尾。

sp_playlistcontainer_move_playlist(手柄,0,1,FALSE)

失败,返回SP_ERROR_INVALID_INDATA,根据API规范,这似乎表明我 '尝试将文件夹移动到自己'。从这我猜想,输入(原始)索引是基于0,目标索引是1基于。这很奇怪,但是这

sp_playlistcontainer_move_playlist(手柄,0,2,FALSE)

确实出现了移动第一播放列表(从索引0)到第二插槽播放列表(在什么我会调用索引1,但根据libspotify显然是2)。

当然这也适用

sp_playlistcontainer_move_playlist(手柄,2,0,FALSE)

所以也许目标指数不基于1 ...也许0仅仅是特殊的套管。思考?

回答

0

它是基于0的。

移动操作,总是会以列表的状态索引之前,任何事情做,所以...

  • 移动0到1将被拒绝,因为它实际上是一个无操作。

  • 要第一个(索引0)播放列表移动到第二位置(索引1),你因为你希望它是这是目前指数1播放列表后,实际上搬到指数2,。一旦你拨打电话,libSpotify将通过移动索引0是指数1后“提交”的事务,那么移动都记录下来一个缝隙,以填补在指数留下的空缺差距0.1

+0

所以我猜想目标索引是你希望它在之前的列表中的项目,因此移动0-> 1是没有意义的,因为0已经在1之前,但移动0-> 2是有意义的,因为它意味着插槽1中的项目移动到时隙0,先前在插槽0中的项目移动到插槽1(在2之前)。我猜想还有一件奇怪的事情是,如果我移动到3号插槽(即列表末尾,因为索引2是最后一个'有效'索引),那么我会得到移动的回调,说newPosition是3,即使在现实是2。 – 2012-03-06 17:25:51