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]

Reply via email to