forked from platypush/platypush
Added get_default_media_plugin
utility.
This commit is contained in:
parent
680de865c4
commit
2670d40094
3 changed files with 41 additions and 10 deletions
|
@ -151,14 +151,14 @@ class MediaPlugin(Plugin, ABC):
|
||||||
'f4b',
|
'f4b',
|
||||||
}
|
}
|
||||||
|
|
||||||
_supported_media_plugins = {
|
supported_media_plugins = [
|
||||||
'media.mplayer',
|
'media.mplayer',
|
||||||
'media.omxplayer',
|
'media.omxplayer',
|
||||||
'media.mpv',
|
'media.mpv',
|
||||||
'media.vlc',
|
'media.vlc',
|
||||||
'media.chromecast',
|
'media.chromecast',
|
||||||
'media.gstreamer',
|
'media.gstreamer',
|
||||||
}
|
]
|
||||||
|
|
||||||
_supported_media_types = ['file', 'jellyfin', 'plex', 'torrent', 'youtube']
|
_supported_media_types = ['file', 'jellyfin', 'plex', 'torrent', 'youtube']
|
||||||
_default_search_timeout = 60 # 60 seconds
|
_default_search_timeout = 60 # 60 seconds
|
||||||
|
@ -217,7 +217,7 @@ class MediaPlugin(Plugin, ABC):
|
||||||
if self.__class__.__name__ == 'MediaPlugin':
|
if self.__class__.__name__ == 'MediaPlugin':
|
||||||
# Abstract class, initialize with the default configured player
|
# Abstract class, initialize with the default configured player
|
||||||
for plugin_name in Config.get_plugins().keys():
|
for plugin_name in Config.get_plugins().keys():
|
||||||
if plugin_name in self._supported_media_plugins:
|
if plugin_name in self.supported_media_plugins:
|
||||||
player = get_plugin(plugin_name)
|
player = get_plugin(plugin_name)
|
||||||
if player and player.is_local():
|
if player and player.is_local():
|
||||||
# Local players have priority as default if configured
|
# Local players have priority as default if configured
|
||||||
|
|
|
@ -37,7 +37,7 @@ class MediaWebtorrentPlugin(MediaPlugin):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_supported_media_plugins = {
|
supported_media_plugins = {
|
||||||
'media.mplayer',
|
'media.mplayer',
|
||||||
'media.omxplayer',
|
'media.omxplayer',
|
||||||
'media.mpv',
|
'media.mpv',
|
||||||
|
@ -103,7 +103,7 @@ class MediaWebtorrentPlugin(MediaPlugin):
|
||||||
def _init_media_player(self):
|
def _init_media_player(self):
|
||||||
self._media_plugin = None
|
self._media_plugin = None
|
||||||
|
|
||||||
for plugin_name in self._supported_media_plugins:
|
for plugin_name in self.supported_media_plugins:
|
||||||
try:
|
try:
|
||||||
if Config.get(plugin_name):
|
if Config.get(plugin_name):
|
||||||
self._media_plugin = get_plugin(plugin_name)
|
self._media_plugin = get_plugin(plugin_name)
|
||||||
|
@ -113,11 +113,9 @@ class MediaWebtorrentPlugin(MediaPlugin):
|
||||||
|
|
||||||
if not self._media_plugin:
|
if not self._media_plugin:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
(
|
'No media player specified and no '
|
||||||
'No media player specified and no '
|
+ 'compatible media plugin configured - '
|
||||||
+ 'compatible media plugin configured - '
|
+ f'supported media plugins: {self.supported_media_plugins}'
|
||||||
+ 'supported media plugins: {}'
|
|
||||||
).format(self._supported_media_plugins)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def _read_process_line(self):
|
def _read_process_line(self):
|
||||||
|
|
33
platypush/utils/media.py
Normal file
33
platypush/utils/media.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from platypush.config import Config
|
||||||
|
from platypush.context import get_plugin
|
||||||
|
from platypush.plugins.media import MediaPlugin
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_media_plugin() -> MediaPlugin:
|
||||||
|
"""
|
||||||
|
Get the default media plugin based on the current configuration.
|
||||||
|
"""
|
||||||
|
|
||||||
|
enabled_plugins: List[MediaPlugin] = []
|
||||||
|
cfg = Config.get() or {}
|
||||||
|
|
||||||
|
for plugin_name in MediaPlugin.supported_media_plugins:
|
||||||
|
try:
|
||||||
|
plugin = get_plugin(plugin_name)
|
||||||
|
if plugin and plugin_name in cfg and not cfg[plugin_name].get('disabled'):
|
||||||
|
enabled_plugins.append(plugin)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
local_plugins = [plugin for plugin in enabled_plugins if plugin.is_local()]
|
||||||
|
|
||||||
|
if local_plugins:
|
||||||
|
return local_plugins[0]
|
||||||
|
|
||||||
|
assert (
|
||||||
|
enabled_plugins
|
||||||
|
), f'No media plugin is enabled. Supported plugins: {MediaPlugin.supported_media_plugins}'
|
||||||
|
|
||||||
|
return enabled_plugins[0]
|
Loading…
Reference in a new issue