Mopidy: Comportamiento indefinido al eliminar la pista que se está reproduciendo actualmente de la lista de pistas.

Creado en 7 ene. 2017  ·  10Comentarios  ·  Fuente: mopidy/mopidy

TracklistController.remove() actualmente solo elimina la pista y activa el evento tracklist_changed :

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

No estoy seguro de que tenga sentido seguir reproduciendo la pista actual si se acaba de eliminar de la lista de pistas; ¿quizás sería mejor llamar stop() o next() en ese momento?

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

C-bug A-core

Comentario más útil

MPD elimina la pista y luego salta a la siguiente en la lista de reproducción si está disponible. De lo contrario, la reproducción se detiene.

Todos 10 comentarios

Deberíamos comprobar lo que hace MPD

MPD elimina la pista y luego salta a la siguiente en la lista de reproducción si está disponible. De lo contrario, la reproducción se detiene.

¿Alguien empezó a arreglar este error? Puedo intentar encontrar una solución.

No, adelante. Dado que nadie ha intervenido, creo que podemos asumir que reflejar el comportamiento de MPD es razonable.

Está bien. Algunas observaciones:

  • PlaybackController usa self._current_tl_track para buscar otras pistas, por ejemplo next (). Si queremos seguir reproduciendo desde la lista de pistas después de la eliminación de la pista, entonces debemos relacionar self._current_tl_track con las pistas restantes en la lista de pistas (que ya no incluye _current_tl_track). Una cosa bastante simple sería buscar en TracklistController.tl_tracks y reproducir la pista con un valor tlid mayor que el tlid de _current_tl_track. Avísame si me he perdido algo que haría que la implementación de la reproducción de la siguiente pista fuera más sencilla.
  • PlaybackController._on_about_to_finish () arroja AttributeError cuando se elimina una pista en reproducción (es decir, _on_tracklist_change () debería al menos detenerse () cuando se eliminó la pista):
    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'
  • Noté que no hay pruebas unitarias para _on_tracklist_change (), probablemente algunas sugerencias en las pruebas de _on_about_to_finish ()
  • A diferencia de MPD, VLC deja de reproducirse al eliminar la pista durante la reproducción

Creé una rama con una solución para este problema, que funciona con todas las pistas, incluidas las transmisiones, donde hubo algunos problemas adicionales relacionados con el envío de mensajes de almacenamiento en búfer de gstreamer al detenerse. Actualmente falla varias de las pruebas pero funciona en la práctica. Se basa en la rama de listas de reproducción de la API web @kingosticks , por lo que también incluye esa función. Está aquí https://github.com/fatg3erman/mopidy/tree/fix/consume-current-track si alguien está interesado en probarlo para obtener más pruebas beta antes de intentar corregir las pruebas.

En realidad, parte de ese comentario es una tontería :) No se basa en la rama web-api-playlists, porque eso es mopidy-spotify y no está relacionado con este problema :) No he bebido suficiente té todavía hoy ...

Estoy de vacaciones en este momento, pero puedo revisar cuando regrese el próximo fin de semana (si lo desea y hacer una solicitud de extracción).

Gracias. Se agregó PR 1689 para esto.

aún reproducible con 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: elimina la pista que se está reproduciendo actualmente y espera a que termine

con ncmpcpp: reproduce varias pistas; coloque el cursor sobre cualquier otra pista que no se esté reproduciendo actualmente; presione shift-c para eliminar todas las pistas excepto las que se desplazan sobre ellas; Espere a que termine la pista actual.

¿Fue útil esta página
0 / 5 - 0 calificaciones