Mopidy: Perilaku tidak terdefinisi saat menghapus trek yang sedang diputar dari daftar lagu.

Dibuat pada 7 Jan 2017  ·  10Komentar  ·  Sumber: mopidy/mopidy

TracklistController.remove() saat ini hanya menghapus trek dan memicu acara tracklist_changed :

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

Saya tidak yakin apakah masuk akal untuk terus memutar trek saat ini jika trek baru saja dihapus dari daftar trek - mungkin lebih baik untuk memanggil stop() atau next() pada saat itu saja?

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

C-bug A-core

Komentar yang paling membantu

MPD menghapus trek dan kemudian melompat ke trek berikutnya dalam daftar putar jika tersedia. Jika tidak, pemutaran akan berhenti.

Semua 10 komentar

Kita harus memeriksa apa yang dilakukan mpd

MPD menghapus trek dan kemudian melompat ke trek berikutnya dalam daftar putar jika tersedia. Jika tidak, pemutaran akan berhenti.

Adakah yang mulai memperbaiki bug ini? Saya bisa mencoba memberikan solusi.

Tidak, lakukanlah. Karena tidak ada yang berbicara, saya pikir kita dapat menganggap mirroring perilaku MPD masuk akal.

Oke. Beberapa pengamatan:

  • PlaybackController menggunakan self._current_tl_track untuk menemukan trek lain, misalnya next(). Jika kita ingin terus memutar dari daftar lagu setelah penghapusan trek, maka kita perlu menghubungkan self._current_tl_track ke trek yang tersisa di daftar trek (yang tidak lagi menyertakan _current_tl_track). Hal yang cukup sederhana adalah melihat di TracklistController.tl_tracks dan memutar trek dengan nilai tlid lebih tinggi daripada tlid _current_tl_track. Beri tahu saya jika saya melewatkan sesuatu yang akan membuat pelaksanaan memainkan trek berikutnya lebih lurus ke depan.
  • PlaybackController._on_about_to_finish() menampilkan AttributeError saat trek yang diputar dihapus (yaitu _on_tracklist_change() setidaknya harus stop() saat trek telah dihapus):
    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'
  • Perhatikan bahwa tidak ada pengujian unit untuk _on_tracklist_change(), mungkin beberapa petunjuk dalam pengujian _on_about_to_finish()
  • Berbeda dengan MPD, VLC berhenti bermain pada penghapusan trek selama pemutaran

Saya telah membuat cabang dengan perbaikan untuk masalah ini, yang berfungsi dengan semua trek termasuk aliran, di mana ada beberapa masalah tambahan yang berkaitan dengan gstreamer mengirim pesan buffering saat berhenti. Saat ini gagal beberapa tes tetapi berfungsi dalam praktik. Ini didasarkan pada cabang daftar putar api web @kingosticks , jadi itu juga termasuk fitur itu. Ada di sini https://github.com/fatg3erman/mopidy/tree/fix/consume-current-track jika ada yang tertarik mencobanya untuk mendapatkan lebih banyak pengujian beta sebelum saya mencoba memperbaiki tes.

Sebenarnya sebagian dari komentar itu adalah omong kosong :) Ini tidak didasarkan pada cabang web-api-playlists, karena itu mopidy-spotify dan tidak ada hubungannya dengan masalah ini :) Saya belum cukup minum teh hari ini....

Saya sedang berlibur sekarang tetapi dapat meninjau ketika saya kembali akhir pekan depan (jika Anda mau dan membuat permintaan tarik).

Terima kasih. Menambahkan PR 1689 untuk ini.

masih dapat direproduksi dengan 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: hapus trek yang sedang diputar dan tunggu sampai selesai

dengan ncmpcpp: mainkan banyak trek; arahkan kursor ke trek lain yang sedang tidak diputar; tekan shift-c untuk menghapus semua kecuali trek yang melayang; menunggu trek saat ini selesai.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat