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๋ฅผ ์‚ดํŽด๋ณด๊ณ  _current_tl_track์˜ tlid๋ณด๋‹ค ๋†’์€ 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 ์›น API ์žฌ์ƒ ๋ชฉ๋ก ๋ถ„๊ธฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๊ธฐ๋Šฅ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ๋” ๋งŽ์€ ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด 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 ๋“ฑ๊ธ‰