fix(theme): stream video conversion progress and auto-play v1 theme media

This commit is contained in:
HorizonCode committed 2026-11-01 13:00:58 +01:00
1 parent 62b31169cc
commit 7332618e85
6 files changed
+274 -35

No files matched your search

+61 -1
View File
@@ -106,7 +106,9 @@ pub fn allow_media_autoplay(window: &tauri::WebviewWindow) -> Result<(), String>
let configuration: *mut AnyObject = msg_send![webview, configuration];
if configuration.is_null() {
return;
} // WKAudiovisualMediaTypesNone. This is a public WKWebView setting.
}
// WKAudiovisualMediaTypesNone. This is a public WKWebView setting.
let _: () =
msg_send![configuration, setMediaTypesRequiringUserActionForPlayback: 0usize];
let current: usize = msg_send![configuration, mediaTypesRequiringUserActionForPlayback];
@@ -114,6 +116,64 @@ pub fn allow_media_autoplay(window: &tauri::WebviewWindow) -> Result<(), String>
target: "launcher",
"Theme media autoplay policy: {current}"
);
// Configure webpage preferences for unconditional media autoplay
let default_preferences: *mut AnyObject = msg_send![configuration, defaultWebpagePreferences];
if !default_preferences.is_null() {
let sel = objc2::sel!(_setAutoplayPolicy:);
let responds: bool = msg_send![default_preferences, respondsToSelector: sel];
if responds {
// 1 = _WKWebsiteAutoplayPolicyAllow (allow autoplay unconditionally)
let _: () = msg_send![default_preferences, _setAutoplayPolicy: 1isize];
log::debug!(target: "launcher", "Set WKWebpagePreferences._setAutoplayPolicy to Allow (1)");
}
}
// Configure WKPreferences
let preferences: *mut AnyObject = msg_send![configuration, preferences];
if !preferences.is_null() {
let sel_audio = objc2::sel!(_setRequiresUserGestureForAudioPlayback:);
let responds: bool = msg_send![preferences, respondsToSelector: sel_audio];
if responds {
let _: () = msg_send![preferences, _setRequiresUserGestureForAudioPlayback: false];
}
let sel_video = objc2::sel!(_setRequiresUserGestureForVideoPlayback:);
let responds: bool = msg_send![preferences, respondsToSelector: sel_video];
if responds {
let _: () = msg_send![preferences, _setRequiresUserGestureForVideoPlayback: false];
}
let sel_inline = objc2::sel!(_setAllowsInlineMediaPlayback:);
let responds: bool = msg_send![preferences, respondsToSelector: sel_inline];
if responds {
let _: () = msg_send![preferences, _setAllowsInlineMediaPlayback: true];
}
let sel_inline_req = objc2::sel!(_setInlineMediaPlaybackRequiresPlaysInlineAttribute:);
let responds: bool = msg_send![preferences, respondsToSelector: sel_inline_req];
if responds {
let _: () = msg_send![preferences, _setInlineMediaPlaybackRequiresPlaysInlineAttribute: false];
}
let sel_invis = objc2::sel!(_setInvisibleMediaAutoplayNotPermitted:);
let responds: bool = msg_send![preferences, respondsToSelector: sel_invis];
if responds {
let _: () = msg_send![preferences, _setInvisibleMediaAutoplayNotPermitted: false];
}
}
let sel_media_load = objc2::sel!(_setMediaDataLoadsAutomatically:);
let responds: bool = msg_send![configuration, respondsToSelector: sel_media_load];
if responds {
let _: () = msg_send![configuration, _setMediaDataLoadsAutomatically: true];
}
let sel_audio_action = objc2::sel!(_setRequiresUserActionForAudioPlayback:);
let responds: bool = msg_send![configuration, respondsToSelector: sel_audio_action];
if responds {
let _: () = msg_send![configuration, _setRequiresUserActionForAudioPlayback: false];
}
})
.map_err(|error| format!("Could not enable theme media autoplay: {error}"))
}