-
Notifications
You must be signed in to change notification settings - Fork 51
fix(tauri): appimage builds and media loading #850
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: feat/tauri-integration
Are you sure you want to change the base?
Changes from all commits
5dc8487
2c38acb
7d49e48
d780c45
68d02a1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,6 +4,8 @@ | |
| fn main() { | ||
| #[cfg(target_os = "linux")] | ||
| unsafe { | ||
| use std::path::{Path, PathBuf}; | ||
|
|
||
| // Tao/Tauri Wayland decorations are don't respect server side decorations, forcing GTK onto X11/XWayland for now. | ||
| // https://github.com/tauri-apps/tao/issues/1046 | ||
| // https://github.com/tauri-apps/tauri/issues/11856 | ||
|
|
@@ -16,6 +18,62 @@ fn main() { | |
| if std::env::var_os("__NV_DISABLE_EXPLICIT_SYNC").is_none() { | ||
| std::env::set_var("__NV_DISABLE_EXPLICIT_SYNC", "1"); | ||
| } | ||
|
|
||
| // WebKit2GTK can hit compositor/DMABUF bugs | ||
| // https://github.com/tauri-apps/tauri/issues/14424 | ||
| // https://github.com/tauri-apps/tauri/issues/9394 | ||
| if std::env::var_os("WEBKIT_DISABLE_COMPOSITING_MODE").is_none() { | ||
| std::env::set_var("WEBKIT_DISABLE_COMPOSITING_MODE", "1"); | ||
| } | ||
| if std::env::var_os("WEBKIT_DISABLE_DMABUF_RENDERER").is_none() { | ||
| std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); | ||
| } | ||
|
|
||
| // AppImage can fail to discover host GStreamer plugins/scanner. Probe | ||
| // common distro layouts, but don't override explicit user config. | ||
| // Not finding these plugings prevents Sable from launching correctly. | ||
| // Maybe there's a better way to do this? | ||
| let plugin_dirs = [ | ||
| "/usr/lib/gstreamer-1.0", | ||
| "/usr/lib64/gstreamer-1.0", | ||
| "/usr/local/lib/gstreamer-1.0", | ||
| "/usr/local/lib64/gstreamer-1.0", | ||
| "/usr/lib/x86_64-linux-gnu/gstreamer-1.0", | ||
| "/usr/lib/aarch64-linux-gnu/gstreamer-1.0", | ||
| "/run/host/usr/lib/gstreamer-1.0", | ||
| "/run/host/usr/lib64/gstreamer-1.0", | ||
| ]; | ||
| let resolved_plugin_dir = plugin_dirs.iter().find(|dir| Path::new(dir).exists()); | ||
|
|
||
| if std::env::var_os("GST_PLUGIN_SYSTEM_PATH_1_0").is_none() { | ||
| if let Some(dir) = resolved_plugin_dir { | ||
| std::env::set_var("GST_PLUGIN_SYSTEM_PATH_1_0", dir); | ||
| } | ||
| } | ||
| if std::env::var_os("GST_PLUGIN_PATH_1_0").is_none() { | ||
| if let Some(dir) = resolved_plugin_dir { | ||
| std::env::set_var("GST_PLUGIN_PATH_1_0", dir); | ||
| } | ||
| } | ||
| if std::env::var_os("GST_PLUGIN_SCANNER").is_none() { | ||
| let mut scanner_candidates: Vec<PathBuf> = vec![ | ||
| PathBuf::from("/usr/lib/gstreamer-1.0/gst-plugin-scanner"), | ||
| PathBuf::from("/usr/lib64/gstreamer-1.0/gst-plugin-scanner"), | ||
| PathBuf::from("/usr/libexec/gstreamer-1.0/gst-plugin-scanner"), | ||
| PathBuf::from("/usr/lib/x86_64-linux-gnu/gstreamer-1.0/gst-plugin-scanner"), | ||
| PathBuf::from("/usr/lib/aarch64-linux-gnu/gstreamer-1.0/gst-plugin-scanner"), | ||
| PathBuf::from("/run/host/usr/lib/gstreamer-1.0/gst-plugin-scanner"), | ||
| PathBuf::from("/run/host/usr/lib64/gstreamer-1.0/gst-plugin-scanner"), | ||
| ]; | ||
|
|
||
| if let Some(path_env) = std::env::var_os("PATH") { | ||
| scanner_candidates.extend(std::env::split_paths(&path_env).map(|p| p.join("gst-plugin-scanner"))); | ||
| } | ||
|
|
||
| if let Some(scanner) = scanner_candidates.iter().find(|path| path.exists()) { | ||
| std::env::set_var("GST_PLUGIN_SCANNER", scanner.as_os_str()); | ||
| } | ||
| } | ||
|
Comment on lines
+32
to
+76
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. instead of this, we should just enable |
||
| } | ||
|
|
||
| app_lib::run(); | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -10,11 +10,24 @@ async function openCache(): Promise<Cache | undefined> { | |
| } | ||
| } | ||
|
|
||
| function getCacheRequest(url: string): Request { | ||
| const isAbsoluteHttpUrl = /^https?:\/\//i.test(url); | ||
| if (!isAbsoluteHttpUrl) { | ||
| return new Request(`https://sable-media-cache.invalid/${encodeURIComponent(url)}`); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. what does this do? |
||
| } | ||
|
|
||
| try { | ||
| return new Request(url); | ||
| } catch { | ||
| return new Request(`https://sable-media-cache.invalid/${encodeURIComponent(url)}`); | ||
| } | ||
| } | ||
|
|
||
| export async function getFromMediaCache(url: string): Promise<Blob | undefined> { | ||
| const cache = await openCache(); | ||
| if (!cache) return undefined; | ||
| try { | ||
| const response = await cache.match(url); | ||
| const response = await cache.match(getCacheRequest(url)); | ||
| if (!response) return undefined; | ||
| return await response.blob(); | ||
| } catch { | ||
|
|
@@ -43,7 +56,7 @@ export async function putInMediaCache(url: string, blob: Blob): Promise<void> { | |
| if (!cache) return; | ||
| try { | ||
| await cache.put( | ||
| url, | ||
| getCacheRequest(url), | ||
| new Response(blob, { | ||
| headers: { 'Content-Type': blob.type || 'application/octet-stream' }, | ||
| }) | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is already handled by
__NV_DISABLE_EXPLICIT_SYNCno? what's the exact error/bug here? tauri-apps/tauri#9394 (comment)