Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "world-monitor",
"private": true,
"version": "2.5.11",
"version": "2.5.12",
"license": "AGPL-3.0-only",
"type": "module",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "world-monitor"
version = "2.5.11"
version = "2.5.12"
description = "World Monitor desktop application"
authors = ["World Monitor"]
edition = "2021"
Expand Down
31 changes: 31 additions & 0 deletions src-tauri/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1178,6 +1178,37 @@ fn main() {
if env::var_os("GTK_IM_MODULE").is_none() {
unsafe { env::set_var("GTK_IM_MODULE", "gtk-im-context-simple") };
}

// The linuxdeploy GStreamer hook force-overrides GST_PLUGIN_SYSTEM_PATH_1_0
// and GST_PLUGIN_PATH_1_0 to only contain bundled plugins. The AppImage
// bundles GStreamer from the CI build system (Ubuntu 24.04, GStreamer 1.24)
// but does NOT bundle codec plugins (gst-libav, fakevideosink from
// gst-plugins-bad). On hosts with newer GStreamer (e.g. Arch with 1.28),
// the bundled-only path means host plugins are invisible → WebKit can't
// play video. Append host plugin directories as fallback so the system's
// codec plugins are discoverable.
let host_gst_dirs = [
"/usr/lib/x86_64-linux-gnu/gstreamer-1.0",
"/usr/lib/gstreamer-1.0",
"/usr/lib64/gstreamer-1.0",
"/usr/lib/aarch64-linux-gnu/gstreamer-1.0",
];
let existing: Vec<String> = host_gst_dirs
.iter()
.filter(|d| std::path::Path::new(d).is_dir())
.map(|d| d.to_string())
.collect();
if !existing.is_empty() {
let suffix = existing.join(":");
for var in ["GST_PLUGIN_PATH_1_0", "GST_PLUGIN_SYSTEM_PATH_1_0"] {
let current = env::var(var).unwrap_or_default();
if !current.is_empty() {
unsafe { env::set_var(var, format!("{current}:{suffix}")) };
} else {
unsafe { env::set_var(var, &suffix) };
}
}
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
"$schema": "https://schema.tauri.app/config/2",
"productName": "World Monitor",
"mainBinaryName": "world-monitor",
"version": "2.5.11",
"version": "2.5.12",
"identifier": "app.worldmonitor.desktop",
"build": {
"beforeDevCommand": "npm run build:sidecar-sebuf && npm run dev",
"beforeBuildCommand": "npm run build:desktop",
"frontendDist": "../dist",
"devUrl": "http://localhost:5173"
"devUrl": "http://localhost:3000"
},
"app": {
"windows": [
Expand Down
17 changes: 10 additions & 7 deletions src/live-channels-window.ts
Original file line number Diff line number Diff line change
Expand Up @@ -403,16 +403,19 @@ export function initLiveChannelsWindow(containerEl?: HTMLElement): void {
try {
const baseUrl = isDesktopRuntime() ? getRemoteApiBaseUrl() : '';
const res = await fetch(`${baseUrl}/api/youtube/live?channel=${encodeURIComponent(handle)}`);
const data = await res.json();
if (!data.channelExists) {
if (handleInput) {
handleInput.classList.add('invalid');
handleInput.setAttribute('title', t('components.liveNews.channelNotFound') ?? 'YouTube channel not found');
if (res.ok) {
const data = await res.json();
if (data.channelExists === false && !data.error) {
if (handleInput) {
handleInput.classList.add('invalid');
handleInput.setAttribute('title', t('components.liveNews.channelNotFound') ?? 'YouTube channel not found');
}
return;
}
return;
}
// Non-OK status (429, 5xx) or ambiguous response — allow adding anyway
} catch (e) {
// Network error — allow adding anyway (offline tolerance)
// Network/parse error — allow adding anyway (offline tolerance)
console.warn('[LiveChannels] YouTube validation failed, allowing add:', e);
} finally {
if (addBtn) {
Expand Down