Support for default media player volume

This commit is contained in:
Fabio Manganiello 2020-02-21 18:40:46 +01:00
parent 70fe2459de
commit a9dbda455f
7 changed files with 29 additions and 4 deletions

View File

@ -3,6 +3,8 @@ import functools
import os import os
import queue import queue
import re import re
from typing import Optional, List, Dict, Union
import requests import requests
import subprocess import subprocess
import tempfile import tempfile
@ -69,20 +71,23 @@ class MediaPlugin(Plugin):
_supported_media_types = ['file', 'torrent', 'youtube'] _supported_media_types = ['file', 'torrent', 'youtube']
_default_search_timeout = 60 # 60 seconds _default_search_timeout = 60 # 60 seconds
def __init__(self, media_dirs=None, download_dir=None, env=None, def __init__(self,
media_dirs: Optional[List[str]] = None,
download_dir: Optional[str] = None,
env: Optional[Dict[str, str]] = None,
volume: Optional[Union[float, int]] = None,
*args, **kwargs): *args, **kwargs):
""" """
:param media_dirs: Directories that will be scanned for media files when :param media_dirs: Directories that will be scanned for media files when
a search is performed (default: none) a search is performed (default: none)
:type media_dirs: list
:param download_dir: Directory where external resources/torrents will be :param download_dir: Directory where external resources/torrents will be
downloaded (default: ~/Downloads) downloaded (default: ~/Downloads)
:type download_dir: str
:param env: Environment variables key-values to pass to the :param env: Environment variables key-values to pass to the
player executable (e.g. DISPLAY, XDG_VTNR, PULSE_SINK etc.) player executable (e.g. DISPLAY, XDG_VTNR, PULSE_SINK etc.)
:type env: dict
:param volume: Default volume for the player (default: None, maximum volume).
""" """
super().__init__(**kwargs) super().__init__(**kwargs)
@ -134,6 +139,7 @@ class MediaPlugin(Plugin):
os.makedirs(self.download_dir, exist_ok=True) os.makedirs(self.download_dir, exist_ok=True)
self.media_dirs.add(self.download_dir) self.media_dirs.add(self.download_dir)
self.volume = volume
self._videos_queue = [] self._videos_queue = []
self._youtube_proc = None self._youtube_proc = None

View File

@ -318,6 +318,10 @@ class MediaChromecastPlugin(MediaPlugin):
mc.register_status_listener(self.SubtitlesAsyncHandler(mc, subtitle_id)) mc.register_status_listener(self.SubtitlesAsyncHandler(mc, subtitle_id))
mc.block_until_active() mc.block_until_active()
if self.volume:
self.set_volume(volume=self.volume, chromecast=chromecast)
return self.status(chromecast=chromecast) return self.status(chromecast=chromecast)
@classmethod @classmethod

View File

@ -173,6 +173,9 @@ class MediaKodiPlugin(MediaPlugin):
resource = resource[7:] resource = resource[7:]
result = self._get_kodi().Player.Open(item={'file': resource}) result = self._get_kodi().Player.Open(item={'file': resource})
if self.volume:
self.set_volume(volume=int(self.volume))
return self._build_result(result) return self._build_result(result)
@action @action

View File

@ -268,6 +268,10 @@ class MediaMplayerPlugin(MediaPlugin):
self._exec('loadfile', resource, mplayer_args=mplayer_args) self._exec('loadfile', resource, mplayer_args=mplayer_args)
self._post_event(MediaPlayEvent, resource=resource) self._post_event(MediaPlayEvent, resource=resource)
if self.volume:
self.set_volume(volume=self.volume)
return self.status() return self.status()
@action @action

View File

@ -140,6 +140,9 @@ class MediaMpvPlugin(MediaPlugin):
resource = resource[7:] resource = resource[7:]
self._player.play(resource) self._player.play(resource)
if self.volume:
self.set_volume(volume=self.volume)
return self.status() return self.status()
@action @action

View File

@ -82,6 +82,9 @@ class MediaOmxplayerPlugin(MediaPlugin):
self.logger.exception(e) self.logger.exception(e)
self._player.pause() self._player.pause()
if self.volume:
self.set_volume(volume=self.volume)
self._player.play() self._player.play()
return self.status() return self.status()

View File

@ -167,6 +167,8 @@ class MediaVlcPlugin(MediaPlugin):
self._player.video_set_subtitle_file(subtitles) self._player.video_set_subtitle_file(subtitles)
self._player.play() self._player.play()
if self.volume:
self.set_volume(volume=self.volume)
if fullscreen or self._default_fullscreen: if fullscreen or self._default_fullscreen:
self.set_fullscreen(True) self.set_fullscreen(True)