Mopidy: Undefiniertes Verhalten beim Entfernen des aktuell wiedergegebenen Titels aus der Titelliste.

Erstellt am 7. Jan. 2017  ·  10Kommentare  ·  Quelle: mopidy/mopidy

TracklistController.remove() momentan nur den Track und löst das tracklist_changed Event aus:

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

Ich bin mir nicht sicher, ob es sinnvoll ist, den aktuellen Track weiter abzuspielen, wenn er gerade aus der Trackliste entfernt wurde - vielleicht wäre es besser, stattdessen stop() oder next() aufzurufen?

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

C-bug A-core

Hilfreichster Kommentar

MPD entfernt den Track und springt dann zum nächsten in der Playlist, falls verfügbar. Andernfalls stoppt die Wiedergabe.

Alle 10 Kommentare

Wir sollten überprüfen, was mpd macht

MPD entfernt den Track und springt dann zum nächsten in der Playlist, falls verfügbar. Andernfalls stoppt die Wiedergabe.

Hat jemand angefangen, diesen Fehler zu beheben? Ich kann versuchen, eine Lösung zu finden.

Nein, mach es. Da sich niemand gemeldet hat, können wir davon ausgehen, dass es vernünftig ist, das Verhalten von MPD zu spiegeln.

Okay. Einige Beobachtungen:

  • PlaybackController verwendet self._current_tl_track, um andere Spuren zu finden, zum Beispiel next(). Wenn wir nach dem Löschen des Tracks weiterhin von der Trackliste abspielen möchten, müssen wir self._current_tl_track mit den verbleibenden Tracks in der Trackliste verknüpfen (die _current_tl_track nicht mehr enthält). Eine ganz einfache Sache wäre, in der TracklistController.tl_tracks nachzusehen und den Track mit einem höheren tlid-Wert als dem tlid von _current_tl_track abzuspielen. Lassen Sie mich wissen, wenn ich etwas verpasst habe, das die Implementierung des nächsten Tracks einfacher machen würde.
  • PlaybackController._on_about_to_finish() wirft AttributeError, wenn ein abgespielter Track gelöscht wird (dh _on_tracklist_change() sollte zumindest stoppen() wenn Track entfernt wurde):
    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'
  • Ich habe festgestellt, dass es keine Unit-Tests für _on_tracklist_change() gibt, wahrscheinlich einige Hinweise in den Tests von _on_about_to_finish()
  • Im Gegensatz zu MPD stoppt VLC die Wiedergabe beim Löschen eines Tracks während der Wiedergabe

Ich habe einen Zweig mit einem Fix für dieses Problem erstellt, der mit allen Tracks einschließlich Streams funktioniert, wo es einige zusätzliche Probleme im Zusammenhang mit dem Senden von Puffernachrichten durch gstreamer beim Stoppen gab. Es besteht derzeit mehrere Tests nicht, aber es funktioniert in der Praxis. Es basiert auf dem @kingosticks- Web-API-Wiedergabelistenzweig, sodass es auch diese Funktion enthält. Es ist hier https://github.com/fatg3erman/mopidy/tree/fix/consume-current-track, wenn jemand daran interessiert ist, es auszuprobieren, um weitere Betatests zu erhalten, bevor ich versuche, die Tests zu beheben.

Eigentlich ist ein Teil dieses Kommentars Unsinn :) Er basiert nicht auf dem Web-Api-Playlists-Zweig, denn das ist mopidy-spotify und hat nichts mit diesem Problem zu tun :) Ich habe heute noch nicht genug Tee getrunken....

Ich bin gerade im Urlaub, kann aber nächstes Wochenende nachsehen, wenn ich wieder da bin (wenn Sie möchten und eine Pull-Anfrage stellen).

Vielen Dank. Dazu PR 1689 hinzugefügt.

noch reproduzierbar mit 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: Entfernen Sie den aktuell wiedergegebenen Titel und warten Sie, bis er fertig ist

mit ncmpcpp: mehrere Tracks abspielen; Bewegen Sie den Mauszeiger über einen anderen Titel, der derzeit nicht abgespielt wird; drücken Sie Shift-c, um alle Tracks mit Ausnahme der darüber schwebenden Tracks zu entfernen; Warten Sie, bis der aktuelle Titel beendet ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

zopyx picture zopyx  ·  4Kommentare

godzillamesel picture godzillamesel  ·  6Kommentare

szuniverse picture szuniverse  ·  13Kommentare

jodal picture jodal  ·  15Kommentare

weilbith picture weilbith  ·  7Kommentare