Philipp Hörist pushed to branch master at gajim / gajim
Commits:
71795084 by Philipp Hörist at 2025-11-28T22:18:02+01:00
cfix: AnimatedImage: Better handle missing dependencies
- Check if Gst is installed and abort early if not
- Handle exceptions during pipeline setup
- - - - -
3 changed files:
- gajim/gtk/preview/gif_backend.py
- gajim/gtk/preview/image.py
- gajim/gtk/preview/webp_backend.py
Changes:
=====================================
gajim/gtk/preview/gif_backend.py
=====================================
@@ -87,10 +87,20 @@ def pause(self) -> None:
self.emit("playback-changed", False)
def setup_pipeline(self) -> None:
+ try:
+ self._setup_pipeline()
+ except Exception:
+ log.exception("Unable to play animated image")
+ self._pipeline_setup_failed = True
+ self.emit("pipeline-changed", False)
+ else:
+ self._pipeline_is_setup = True
+ self.emit("pipeline-changed", True)
+
+ def _setup_pipeline(self) -> None:
if self._pipeline_is_setup:
return
- self._pipeline_is_setup = True
self._pipeline = Gst.Pipeline.new()
self._src = Gst.ElementFactory.make("filesrc")
self._decodebin = Gst.ElementFactory.make("decodebin")
@@ -133,7 +143,6 @@ def setup_pipeline(self) -> None:
assert self._sink is not None
self._paintable = self._sink.get_property("paintable")
- self.emit("pipeline-changed", True)
def _on_pad_added(self, _bin: Gst.Bin, pad: Gst.Pad) -> None:
assert pad is not None
=====================================
gajim/gtk/preview/image.py
=====================================
@@ -174,14 +174,14 @@ def _create_thumbnail_finished(
return GLib.SOURCE_REMOVE
def _display_image_preview(self) -> None:
-
- if self._mime_type == "image/webp" and
is_webp_animated(self._orig_path):
- self._display_animated_image_preview(WebPBackend)
- return
-
- if self._mime_type == "image/gif" and is_gif_animated(self._orig_path):
- self._display_animated_image_preview(GifBackend)
- return
+ if app.is_installed("GST"):
+ if self._mime_type == "image/webp" and
is_webp_animated(self._orig_path):
+ self._display_animated_image_preview(WebPBackend)
+ return
+
+ if self._mime_type == "image/gif" and
is_gif_animated(self._orig_path):
+ self._display_animated_image_preview(GifBackend)
+ return
self._display_static_image_preview()
=====================================
gajim/gtk/preview/webp_backend.py
=====================================
@@ -111,6 +111,17 @@ def pause(self) -> None:
self.emit("playback-changed", False)
def setup_pipeline(self) -> None:
+ try:
+ self._setup_pipeline()
+ except Exception:
+ log.exception("Unable to play animated image")
+ self._pipeline_setup_failed = True
+ self.emit("pipeline-changed", False)
+ else:
+ self._pipeline_is_setup = True
+ self.emit("pipeline-changed", True)
+
+ def _setup_pipeline(self) -> None:
if (
self._creating_pipeline
or self._pipeline_is_setup
@@ -140,9 +151,7 @@ def setup_pipeline(self) -> None:
self._sink,
]
if any(elem is None for elem in self._pipeline_elements):
- log.error("Could not set up pipeline for GIF preview")
- self._pipeline_setup_failed = True
- return
+ raise Exception("Could not set up pipeline for GIF preview")
assert self._pipeline is not None
assert self._src is not None
@@ -213,8 +222,8 @@ def _extracting_frames_finished(
self.emit("pipeline-changed", False)
return GLib.SOURCE_REMOVE
- self.emit("pipeline-changed", True)
self._pipeline_is_setup = True
+ self.emit("pipeline-changed", True)
return GLib.SOURCE_REMOVE
def _push_frame(self):
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/7179508412461dc29eef59d840c7cb375613f9f2
--
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/commit/7179508412461dc29eef59d840c7cb375613f9f2
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]