From bf8816f7150a3facb00d41d686312c24aaad7931 Mon Sep 17 00:00:00 2001 From: Sean Krueger Date: Sat, 7 Sep 2024 20:24:10 -0700 Subject: [PATCH] fix(ui): use default audio icon if ffmpeg is absent (#471) * fix(ThumbRenderer): Use audio icon when no ffmpeg When ffmpeg is missing, Popen raises a FileNotFound error. This would be caught as an Unlinked file and use the broken file icon. The exception is now caught and a more appropriate exception is raised in its place. * ruff formatting --- tagstudio/src/qt/helpers/vendored/pydub/audio_segment.py | 9 ++++++--- tagstudio/src/qt/widgets/thumb_renderer.py | 8 +++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/tagstudio/src/qt/helpers/vendored/pydub/audio_segment.py b/tagstudio/src/qt/helpers/vendored/pydub/audio_segment.py index 095aa470..615119f5 100644 --- a/tagstudio/src/qt/helpers/vendored/pydub/audio_segment.py +++ b/tagstudio/src/qt/helpers/vendored/pydub/audio_segment.py @@ -1,7 +1,7 @@ # type: ignore # Copyright (C) 2022 James Robert (jiaaro). # Licensed under the MIT License. -# Vendored from ffmpeg-python and ffmpeg-python PR#790 by amamic1803 +# Vendored from pydub from __future__ import division @@ -729,7 +729,10 @@ class _AudioSegment(object): info = None else: # PATCHED - info = _mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit) + try: + info = _mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit) + except FileNotFoundError: + raise ChildProcessError if info: audio_streams = [x for x in info['streams'] if x['codec_type'] == 'audio'] @@ -1400,4 +1403,4 @@ class _AudioSegment(object): """ fh = self.export() data = base64.b64encode(fh.read()).decode('ascii') - return src.format(base64=data) \ No newline at end of file + return src.format(base64=data) diff --git a/tagstudio/src/qt/widgets/thumb_renderer.py b/tagstudio/src/qt/widgets/thumb_renderer.py index ad139347..fc2d3d50 100644 --- a/tagstudio/src/qt/widgets/thumb_renderer.py +++ b/tagstudio/src/qt/widgets/thumb_renderer.py @@ -565,6 +565,7 @@ class ThumbRenderer(QObject): logging.error( f"[ThumbRenderer][WAVEFORM][ERROR]: Couldn't render waveform for {filepath.name} ({type(e).__name__})" ) + return im def _blender(self, filepath: Path) -> Image.Image: @@ -1057,7 +1058,12 @@ class ThumbRenderer(QObject): size=(adj_size, adj_size), pixel_ratio=pixel_ratio, ) - except (UnidentifiedImageError, DecompressionBombError, ValueError) as e: + except ( + UnidentifiedImageError, + DecompressionBombError, + ValueError, + ChildProcessError, + ) as e: logging.info( f"[ThumbRenderer][ERROR]: Couldn't render thumbnail for {_filepath.name} ({type(e).__name__})" )