Mopidy: 从曲目列表中删除当前播放的曲目时未定义的行为。

创建于 2017-01-07  ·  10评论  ·  资料来源: mopidy/mopidy

TracklistController.remove()目前只是移除轨道并触发tracklist_changed事件:

https://github.com/mopidy/mopidy/blob/2b7f12b8542d04190a85ed890edac1ce9192d9e8/mopidy/core/tracklist.py#L567 -L572

我不确定如果它刚刚从曲目列表中删除,继续播放当前曲目是否有意义 - 也许此时调用stop()next()会更好?

https://github.com/mopidy/mopidy/blob/2b7f12b8542d04190a85ed890edac1ce9192d9e8/mopidy/core/playback.py#L304 -L305

C-bug A-core

最有用的评论

MPD 删除曲目,然后跳转到播放列表中的下一个(如果可用)。 否则播放停止。

所有10条评论

我们应该检查 mpd 做了什么

MPD 删除曲目,然后跳转到播放列表中的下一个(如果可用)。 否则播放停止。

有人开始修复这个错误吗? 我可以尝试想出一个解决方案。

不行,加油由于没有人提出意见,我认为我们可以假设镜像 MPD 的行为是合理的。

好的。 一些观察:

  • PlaybackController 使用 self._current_tl_track 来查找其他曲目,例如 next()。 如果我们想在曲目删除后继续从曲目列表播放,那么我们需要将 self._current_tl_track 与曲目列表中的剩余曲目(不再包括 _current_tl_track )相关联。 一个非常简单的事情是查看 TracklistController.tl_tracks 并播放 tlid 值高于 _current_tl_track 的 tlid 的曲目。 让我知道我是否遗漏了一些会使播放下一个曲目的实施更加直接的东西。
  • PlaybackController._on_about_to_finish() 在播放曲目被删除时抛出 AttributeError (即 _on_tracklist_change() 在曲目被删除时至少应该 stop() ):
    File "/home/aj/mopidy-dev/mopidy/mopidy/core/playback.py", line 270, in _on_about_to_finish self._last_position = self._current_tl_track.track.length AttributeError: 'NoneType' object has no attribute 'track'
  • 注意到 _on_tracklist_change() 没有单元测试,可能在 _on_about_to_finish() 的测试中有一些提示
  • 与 MPD 相比,VLC 在播放过程中删除曲目时停止播放

我已经创建了一个分支来解决这个问题,它适用于包括流在内的所有轨道,其中存在一些与 gstreamer 在停止时发送缓冲消息有关的其他问题。 它目前未能通过多项测试,但它在实践中有效。 它基于@kingosticks web api 播放列表分支,因此它还包含该功能。 如果有人有兴趣尝试在我尝试修复测试之前进行更多 Beta 测试,请访问https://github.com/fatg3erman/mopidy/tree/fix/consume-current-track

实际上,该评论的一部分是无稽之谈:) 它不是基于 web-api-playlists 分支,因为那是 mopidy-spotify 并且与此问题无关:) 我今天还没有喝足够的茶....

我现在正在度假,但可以在下周末回来时进行查看(如果您愿意并提出请求)。

谢谢。 为此添加了 PR 1689。

仍然可以使用 mopidy 3.0.1 重现

Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/mopidy/audio/actor.py", line 559, in _on_about_to_finish
    self._about_to_finish_callback()
  File "/usr/lib/python3.7/site-packages/mopidy/core/playback.py", line 178, in _on_about_to_finish_callback
    kwargs={},
  File "/usr/lib/python3.7/site-packages/pykka/_ref.py", line 114, in ask
    return future.get(timeout=timeout)
  File "/usr/lib/python3.7/site-packages/pykka/_threading.py", line 45, in get
    _compat.reraise(*self._data['exc_info'])
  File "/usr/lib/python3.7/site-packages/pykka/_compat/__init__.py", line 29, in reraise
    raise value
  File "/usr/lib/python3.7/site-packages/pykka/_actor.py", line 193, in _actor_loop
    response = self._handle_receive(envelope.message)
  File "/usr/lib/python3.7/site-packages/pykka/_actor.py", line 299, in _handle_receive
    return callee(*message.args, **message.kwargs)
  File "/usr/lib/python3.7/site-packages/mopidy/core/playback.py", line 190, in _on_about_to_finish
    self._last_position = self._current_tl_track.track.length
AttributeError: 'NoneType' object has no attribute 'track'

STR:删除当前播放的曲目并等待它完成

使用 ncmpcpp:播放多首曲目; 将鼠标悬停在当前未播放的任何其他曲目上; 按 shift-c 删除所有但悬停的轨道; 等待当前曲目完成。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ecoCuyo picture ecoCuyo  ·  3评论

szuniverse picture szuniverse  ·  13评论

godzillamesel picture godzillamesel  ·  6评论

altano picture altano  ·  6评论

jodal picture jodal  ·  15评论