forked from platypush/platypush
Fixed some media plugins inconsistencies
- Removed replication of logic between media.get_youtube_url (action) and media.get_youtube_video_url (internal method) - Added differentiation between MediaPlayEvent and MediaResumeEvent
This commit is contained in:
parent
cb4cfa40d8
commit
4a5bb766af
4 changed files with 18 additions and 10 deletions
|
@ -54,6 +54,15 @@ class MediaPauseEvent(MediaEvent):
|
||||||
super().__init__(*args, player=player, plugin=plugin, **kwargs)
|
super().__init__(*args, player=player, plugin=plugin, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MediaResumeEvent(MediaEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a media playback is resumed
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, player=None, plugin=None, *args, **kwargs):
|
||||||
|
super().__init__(*args, player=player, plugin=plugin, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class MediaSeekEvent(MediaEvent):
|
class MediaSeekEvent(MediaEvent):
|
||||||
"""
|
"""
|
||||||
Event triggered when the time position in the media changes
|
Event triggered when the time position in the media changes
|
||||||
|
|
|
@ -501,8 +501,10 @@ class MediaPlugin(Plugin, ABC):
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
return YoutubeMediaSearcher()._youtube_search_html_parse(query)
|
return YoutubeMediaSearcher()._youtube_search_html_parse(query)
|
||||||
|
|
||||||
def get_youtube_video_url(self, url):
|
def get_youtube_video_url(self, url, youtube_format: Optional[str] = None):
|
||||||
youtube_dl = subprocess.Popen(['youtube-dl', '-f', self.youtube_format, '-g', url], stdout=subprocess.PIPE)
|
ytdl_cmd = ['youtube-dl', '-f', youtube_format or self.youtube_format, '-g', url]
|
||||||
|
self.logger.info(f'Executing command {" ".join(ytdl_cmd)}')
|
||||||
|
youtube_dl = subprocess.Popen(ytdl_cmd, stdout=subprocess.PIPE)
|
||||||
url = youtube_dl.communicate()[0].decode().strip()
|
url = youtube_dl.communicate()[0].decode().strip()
|
||||||
youtube_dl.wait()
|
youtube_dl.wait()
|
||||||
return url
|
return url
|
||||||
|
@ -529,11 +531,7 @@ class MediaPlugin(Plugin, ABC):
|
||||||
youtube_id = self.get_youtube_id(url)
|
youtube_id = self.get_youtube_id(url)
|
||||||
if youtube_id:
|
if youtube_id:
|
||||||
url = 'https://www.youtube.com/watch?v={}'.format(youtube_id)
|
url = 'https://www.youtube.com/watch?v={}'.format(youtube_id)
|
||||||
proc = subprocess.Popen([
|
return self.get_youtube_video_url(url, youtube_format=youtube_format)
|
||||||
'youtube-dl', '-f', youtube_format or self.youtube_format, '-g', url], stdout=subprocess.PIPE
|
|
||||||
)
|
|
||||||
raw_url = proc.stdout.read().decode("utf-8", "strict")[:-1]
|
|
||||||
return raw_url if raw_url else url
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def get_youtube_info(self, url):
|
def get_youtube_info(self, url):
|
||||||
|
|
|
@ -158,7 +158,7 @@ class MediaKodiPlugin(MediaPlugin):
|
||||||
youtube_id = self.get_youtube_id(resource)
|
youtube_id = self.get_youtube_id(resource)
|
||||||
if youtube_id:
|
if youtube_id:
|
||||||
try:
|
try:
|
||||||
resource = self.get_youtube_url('https://www.youtube.com/watch?v=' + youtube_id).output
|
resource = self.get_youtube_url(youtube_id).output
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.warning('youtube-dl error, falling back to Kodi YouTube plugin: {}'.format(str(e)))
|
self.logger.warning('youtube-dl error, falling back to Kodi YouTube plugin: {}'.format(str(e)))
|
||||||
resource = 'plugin://plugin.video.youtube/?action=play_video&videoid=' + youtube_id
|
resource = 'plugin://plugin.video.youtube/?action=play_video&videoid=' + youtube_id
|
||||||
|
|
|
@ -4,7 +4,7 @@ import threading
|
||||||
from platypush.context import get_bus
|
from platypush.context import get_bus
|
||||||
from platypush.plugins.media import PlayerState, MediaPlugin
|
from platypush.plugins.media import PlayerState, MediaPlugin
|
||||||
from platypush.message.event.media import MediaPlayEvent, MediaPlayRequestEvent, \
|
from platypush.message.event.media import MediaPlayEvent, MediaPlayRequestEvent, \
|
||||||
MediaPauseEvent, MediaStopEvent, NewPlayingMediaEvent, MediaSeekEvent
|
MediaPauseEvent, MediaStopEvent, NewPlayingMediaEvent, MediaSeekEvent, MediaResumeEvent
|
||||||
|
|
||||||
from platypush.plugins import action
|
from platypush.plugins import action
|
||||||
|
|
||||||
|
@ -81,10 +81,11 @@ class MediaMpvPlugin(MediaPlugin):
|
||||||
title=self._player.filename)
|
title=self._player.filename)
|
||||||
elif evt == Event.PLAYBACK_RESTART:
|
elif evt == Event.PLAYBACK_RESTART:
|
||||||
self._playback_rebounce_event.set()
|
self._playback_rebounce_event.set()
|
||||||
|
self._post_event(MediaPlayEvent, resource=self._get_current_resource(), title=self._player.filename)
|
||||||
elif evt == Event.PAUSE:
|
elif evt == Event.PAUSE:
|
||||||
self._post_event(MediaPauseEvent, resource=self._get_current_resource(), title=self._player.filename)
|
self._post_event(MediaPauseEvent, resource=self._get_current_resource(), title=self._player.filename)
|
||||||
elif evt == Event.UNPAUSE:
|
elif evt == Event.UNPAUSE:
|
||||||
self._post_event(MediaPlayEvent, resource=self._get_current_resource(), title=self._player.filename)
|
self._post_event(MediaResumeEvent, resource=self._get_current_resource(), title=self._player.filename)
|
||||||
elif evt == Event.SHUTDOWN or evt == Event.IDLE or (
|
elif evt == Event.SHUTDOWN or evt == Event.IDLE or (
|
||||||
evt == Event.END_FILE and event.get('event', {}).get('reason') in
|
evt == Event.END_FILE and event.get('event', {}).get('reason') in
|
||||||
[EndFile.EOF, EndFile.ABORTED, EndFile.QUIT]):
|
[EndFile.EOF, EndFile.ABORTED, EndFile.QUIT]):
|
||||||
|
|
Loading…
Reference in a new issue