Mopidy: Comportement indéfini lors de la suppression de la piste en cours de lecture de la liste des pistes.

Créé le 7 janv. 2017  ·  10Commentaires  ·  Source: mopidy/mopidy

TracklistController.remove() ne supprime actuellement que la piste et déclenche l'événement tracklist_changed :

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

Je ne suis pas sûr qu'il soit logique de continuer à lire la piste en cours si elle vient d'être supprimée de la liste des pistes - il serait peut-être préférable d'appeler stop() ou next() à ce stade à la place ?

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

C-bug A-core

Commentaire le plus utile

MPD supprime la piste, puis passe à la suivante dans la liste de lecture si elle est disponible. Sinon, la lecture s'arrête.

Tous les 10 commentaires

Nous devrions vérifier ce que fait mpd

MPD supprime la piste, puis passe à la suivante dans la liste de lecture si elle est disponible. Sinon, la lecture s'arrête.

Quelqu'un a commencé à corriger ce bug ? Je peux essayer de trouver une solution.

Non, vas-y. Étant donné que personne ne s'est renseigné, je pense que nous pouvons supposer que la mise en miroir du comportement de MPD est raisonnable.

D'accord. Quelques remarques :

  • PlaybackController utilise self._current_tl_track pour trouver d'autres pistes, par exemple next(). Si nous voulons continuer à jouer à partir de la liste des pistes après la suppression des pistes, nous devons associer self._current_tl_track aux pistes restantes de la liste des pistes (qui n'inclut plus _current_tl_track). Une chose assez simple serait de regarder dans le TracklistController.tl_tracks et de jouer la piste avec une valeur tlid supérieure au tlid de _current_tl_track. Faites-moi savoir si j'ai raté quelque chose qui rendrait la mise en œuvre de la lecture de la piste suivante plus simple.
  • PlaybackController._on_about_to_finish() renvoie AttributeError lorsqu'une piste en cours de lecture est supprimée (c'est-à-dire que _on_tracklist_change() devrait au moins s'arrêter() lorsque la piste a été supprimée) :
    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'
  • Remarqué qu'il n'y a pas de tests unitaires pour _on_tracklist_change(), probablement quelques astuces dans les tests de _on_about_to_finish()
  • Contrairement à MPD, VLC arrête la lecture lors de la suppression de la piste pendant la lecture

J'ai créé une branche avec un correctif pour ce problème, qui fonctionne avec toutes les pistes, y compris les flux, où il y avait des problèmes supplémentaires liés à l'envoi de messages de mise en mémoire tampon par gstreamer à l'arrêt. Il échoue actuellement à plusieurs des tests, mais cela fonctionne dans la pratique. Il est basé sur la branche de listes de lecture api web @kingosticks , il inclut donc également cette fonctionnalité. C'est ici https://github.com/fatg3erman/mopidy/tree/fix/consume-current-track si quelqu'un est intéressé à l'essayer pour obtenir plus de tests bêta avant d'essayer de corriger les tests.

En fait, une partie de ce commentaire est absurde :) Ce n'est pas basé sur la branche web-api-playlists, car c'est mpidy-spotify et sans rapport avec ce problème :) Je n'ai pas encore bu assez de thé aujourd'hui....

Je suis en vacances en ce moment mais je peux revoir quand je serai de retour le week-end prochain (si vous le souhaitez et faites une pull request).

Merci. Ajout du PR 1689 pour cela.

toujours reproductible avec 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 : supprimez la piste en cours de lecture et attendez qu'elle se termine

avec ncmpcpp : lecture de plusieurs pistes ; survolez une autre piste qui n'est pas en cours de lecture ; appuyez sur maj-c pour supprimer toutes les pistes sauf survolées ; attendre la fin de la piste en cours.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

jodal picture jodal  ·  13Commentaires

pnijhara picture pnijhara  ·  5Commentaires

handsomegui picture handsomegui  ·  12Commentaires

flyingrub picture flyingrub  ·  15Commentaires

godzillamesel picture godzillamesel  ·  6Commentaires