Files
benthicbloom/lib/gstreamerAvailability.js
T
Claude f7c05c2c76 Fix false-positive "GStreamer Not Found" warning in Preferences
The Preferences window's availability probe (added to surface missing
GStreamer deps in-UI) reused loadGstreamerModules(), which also checks
for Cogl. Cogl is Mutter's private library — its typelib is only
reachable from inside the actual gnome-shell process (which gets a
private GI search path), never from the separate, plain-GTK4
Preferences process. So the check always failed there with "Requiring
Cogl ... not found" even when live wallpapers were working correctly
in the real shell process, as confirmed by a user report where the
extension's own log showed live wallpaper playback starting cleanly
while Preferences simultaneously claimed GStreamer was missing.

Split into loadGstreamerModules() (Gst+GstApp+Cogl, used only by
liveWallpaper.js in the shell process) and a new lighter
checkGstreamerBaseAvailable() (Gst+GstApp only) for prefs.js, with a
note in the UI that a clean check there isn't a full guarantee since
the private half can't be verified from that process.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RDqbdjsiisSU7CbQke4g8
2026-08-04 00:36:48 +00:00

53 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Loads the GObject-Introspection bindings the live wallpaper feature needs
* (Gst, GstApp for the appsink signals, Cogl for uploading decoded frames)
* and initializes GStreamer. Used by liveWallpaper.js, which only ever runs
* inside the gnome-shell process itself.
*
* Cogl is Mutter's *private* library: its typelib is only reachable from
* gnome-shell's own process (which gets a private search path), never from
* an ordinary GTK application. Do NOT reuse this for a diagnostic check in
* prefs.js — that runs in a separate, plain GTK4 process where importing
* Cogl will *always* fail regardless of whether live wallpapers actually
* work, producing a false "not found" report. Use
* checkGstreamerBaseAvailable() there instead.
*/
export async function loadGstreamerModules() {
const [{default: Gst}, , {default: Cogl}] = await Promise.all([
import('gi://Gst?version=1.0'),
import('gi://GstApp?version=1.0'),
import('gi://Cogl'),
]);
if (!Gst.is_initialized())
Gst.init(null);
return {Gst, Cogl};
}
/**
* Lighter check for prefs.js: confirms the system-wide GStreamer packages
* (Gst core + the "app" plugin providing GstApp) are installed, without
* touching Cogl. This can't fully confirm live wallpapers will work (that
* also needs Cogl, only checkable from inside gnome-shell itself), but a
* failure here is a genuine, actionable problem, unlike a Cogl probe.
*/
export async function checkGstreamerBaseAvailable() {
const [{default: Gst}] = await Promise.all([
import('gi://Gst?version=1.0'),
import('gi://GstApp?version=1.0'),
]);
if (!Gst.is_initialized())
Gst.init(null);
}
export const GSTREAMER_INSTALL_HINT =
'Install GStreamer’s "base" and "good" plugin sets (with their GObject-Introspection data), ' +
'which provide playback and GIF decoding:\n' +
'• Arch: sudo pacman -S gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav\n' +
'• Debian/Ubuntu: sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good ' +
'gir1.2-gst-plugins-base-1.0\n' +
'• Fedora: sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gobject-introspection\n' +
'Then restart GNOME Shell (log out and back in on Wayland).';