diff --git a/lbry/extras/daemon/daemon.py b/lbry/extras/daemon/daemon.py index fb111b4e5..d0fc21c99 100644 --- a/lbry/extras/daemon/daemon.py +++ b/lbry/extras/daemon/daemon.py @@ -358,7 +358,7 @@ class Daemon(metaclass=JSONRPCServerType): @classmethod def get_api_definitions(cls): prefix = 'jsonrpc_' - not_grouped = ['routing_table_get'] + not_grouped = ['routing_table_get', 'ffmpeg_find'] api = { 'groups': { group_name[:-len('_DOC')].lower(): getattr(cls, group_name).strip() @@ -765,6 +765,26 @@ class Daemon(metaclass=JSONRPCServerType): asyncio.get_event_loop().call_later(0, shutdown) return "Shutting down" + async def jsonrpc_ffmpeg_find(self): + """ + Get ffmpeg installation information + + Usage: + ffmpeg_find + + Options: + None + + Returns: + (dict) Dictionary of ffmpeg information + { + 'available': (bool) found ffmpeg, + 'which': (str) path to ffmpeg, + 'analyze_audio_volume': (bool) should ffmpeg analyze audio + } + """ + return await self._video_file_analyzer.status(recheck=True) + async def jsonrpc_status(self): """ Get daemon status diff --git a/lbry/file_analysis.py b/lbry/file_analysis.py index f6fd0706f..80d56dbb4 100644 --- a/lbry/file_analysis.py +++ b/lbry/file_analysis.py @@ -19,6 +19,7 @@ class VideoFileAnalyzer: self._available_encoders = "" self._ffmpeg_installed = False self._which = None + self._checked_ffmpeg = False async def _execute(self, command, arguments): args = shlex.split(arguments) @@ -48,18 +49,20 @@ class VideoFileAnalyzer: self._ffmpeg_installed = True log.debug("Using %s at %s", version.splitlines()[0].split(" Copyright")[0], self._which) - async def status(self, reset=False): + async def status(self, reset=False, recheck=False): if reset: self._available_encoders = "" self._ffmpeg_installed = False self._which = None - - installed = True - try: - await self._verify_ffmpeg_installed() - except FileNotFoundError: - installed = False - + if self._checked_ffmpeg and not recheck: + installed = self._ffmpeg_installed + else: + installed = True + try: + await self._verify_ffmpeg_installed() + except FileNotFoundError: + installed = False + self._checked_ffmpeg = True return { "available": installed, "which": self._which,