#[swift_bridge::bridge]
mod bridge {
pub enum ToastIcon {
Success,
Error,
Loading,
None,
}
pub enum ToastPosition {
Top,
Center,
Bottom,
}
#[swift_bridge(swift_repr = "struct")]
pub struct ToastOptions {
pub title: String,
pub icon: ToastIcon,
pub image: String,
pub duration: f64,
pub mask: bool,
pub position: ToastPosition,
}
#[swift_bridge(swift_repr = "struct")]
pub struct ModalOptions {
pub title: String,
pub content: String,
pub show_cancel: bool,
pub cancel_text: String,
pub cancel_color: String,
pub confirm_text: String,
pub confirm_color: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct ActionSheetOptions {
pub options: Vec<String>,
pub cancel_text: String,
pub item_color: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct ModalResult {
pub confirm: bool,
pub cancel: bool,
}
pub enum PopupPositionBridge {
Center,
Bottom,
Left,
Right,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SwiftImageInfoResult {
pub success: bool,
pub error: String,
pub width: u32,
pub height: u32,
pub mime_type: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SwiftCompressImageResult {
pub success: bool,
pub error: String,
pub path: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SwiftVideoInfoResult {
pub success: bool,
pub error: String,
pub width: u32,
pub height: u32,
pub duration_ms: u64,
pub rotation: i32,
pub has_rotation: bool,
pub bitrate: u64,
pub has_bitrate: bool,
pub fps: f32,
pub has_fps: bool,
pub mime_type: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SwiftVideoThumbnailResult {
pub success: bool,
pub error: String,
pub path: String,
pub width: u32,
pub height: u32,
pub mime_type: String,
}
#[swift_bridge(swift_repr = "struct")]
pub struct SwiftCompressVideoResult {
pub success: bool,
pub error: String,
pub path: String,
pub width: u32,
pub height: u32,
pub duration_ms: u64,
pub size: u64,
pub mime_type: String,
}
extern "Swift" {
#[swift_bridge(swift_name = "LxApp.openLxApp")]
fn open_lxapp(
appid: &str,
path: &str,
session_id: u64,
presentation: i32,
panel_id: &str,
) -> bool;
#[swift_bridge(swift_name = "LxApp.closeLxApp")]
fn close_lxapp(appid: &str, session_id: u64) -> bool;
#[swift_bridge(swift_name = "LxApp.navigate")]
fn navigate(appid: &str, path: &str, animation_type: i32) -> bool;
#[swift_bridge(swift_name = "LxApp.updateTabBarUI")]
fn update_tabbar_ui(appid: &str) -> bool;
#[swift_bridge(swift_name = "LxApp.updateNavBarUI")]
fn update_navbar_ui(appid: &str) -> bool;
#[swift_bridge(swift_name = "LxApp.updateOrientationUI")]
fn update_orientation_ui(appid: &str) -> bool;
#[swift_bridge(swift_name = "LxApp.openUrl")]
fn open_url(owner_appid: &str, owner_session_id: u64, url: &str, target: i32) -> bool;
#[swift_bridge(swift_name = "LxApp.isPushEnabled")]
fn is_push_enabled() -> bool;
#[swift_bridge(swift_name = "LxApp.showToast")]
fn show_toast(options: ToastOptions);
#[swift_bridge(swift_name = "LxApp.hideToast")]
fn hide_toast();
#[swift_bridge(swift_name = "LxApp.showModal")]
fn show_modal(options: ModalOptions, callback_id: u64);
#[swift_bridge(swift_name = "LxApp.showActionSheet")]
fn show_action_sheet(options: ActionSheetOptions, callback_id: u64);
#[swift_bridge(swift_name = "LxApp.showPopup")]
fn show_popup(
appid: &str,
path: &str,
width_ratio: f64,
height_ratio: f64,
position: PopupPositionBridge,
) -> bool;
#[swift_bridge(swift_name = "LxApp.hidePopup")]
fn hide_popup(appid: &str) -> bool;
#[swift_bridge(swift_name = "LxAppMedia.previewMedia")]
fn preview_media(items_json: &str, callback_id: u64) -> bool;
#[swift_bridge(swift_name = "LxAppMedia.cancelPreview")]
fn cancel_preview_media(callback_id: u64) -> bool;
#[swift_bridge(swift_name = "LxApp.reviewDocument")]
fn review_document(file_path: &str, mime_type: &str, show_menu: bool) -> bool;
#[swift_bridge(swift_name = "LxApp.openDocumentExternal")]
fn open_document_external(file_path: &str, mime_type: &str, show_menu: bool) -> bool;
#[swift_bridge(swift_name = "LxApp.revealInFileManager")]
fn reveal_in_file_manager(path: &str) -> bool;
#[swift_bridge(swift_name = "LxAppMedia.chooseMedia")]
fn choose_media(
max_count: u32,
mode: &str,
source_types_json: &str,
camera_facing: &str,
max_duration: Option<u32>,
callback_id: u64,
) -> bool;
#[swift_bridge(swift_name = "LxAppMedia.scanCode")]
fn scan_code(scan_types_json: &str, only_from_camera: bool, callback_id: u64) -> bool;
#[swift_bridge(swift_name = "LxAppMedia.copyAlbumMediaToFile")]
fn copy_album_media_to_file(uri: &str, destination_path: &str, media_type: i32) -> bool;
#[swift_bridge(swift_name = "LxAppMedia.getImageInfo")]
fn get_image_info(uri: &str) -> SwiftImageInfoResult;
#[swift_bridge(swift_name = "LxAppMedia.compressImage")]
fn compress_image(
source_uri: &str,
quality: i32,
target_width: i32,
target_height: i32,
output_path: &str,
) -> SwiftCompressImageResult;
#[swift_bridge(swift_name = "LxAppMedia.getVideoInfo")]
fn get_video_info(uri: &str) -> SwiftVideoInfoResult;
#[swift_bridge(swift_name = "LxAppMedia.extractVideoThumbnail")]
fn extract_video_thumbnail(
source_uri: &str,
quality: i32,
target_width: i32,
target_height: i32,
time_ms: i64,
output_path: &str,
) -> SwiftVideoThumbnailResult;
#[swift_bridge(swift_name = "LxAppMedia.compressVideo")]
fn compress_video(
source_uri: &str,
quality: Option<&str>,
bitrate_kbps: u32,
fps: u32,
resolution_ratio: f32,
output_path: &str,
) -> SwiftCompressVideoResult;
#[swift_bridge(swift_name = "LxAppVideo.setVideoPlayerCallback")]
fn set_video_player_callback(component_id: &str, callback_id: u64) -> bool;
#[swift_bridge(swift_name = "LxAppVideo.dispatchVideoCommand")]
fn dispatch_video_command(component_id: &str, name: &str, params_json: &str) -> bool;
#[swift_bridge(swift_name = "LxAppVideo.createStreamDecoder")]
fn create_stream_decoder(component_id: &str) -> bool;
#[swift_bridge(swift_name = "LxAppVideo.configureStreamVideo")]
fn configure_stream_video(component_id: &str, config_json: &str) -> bool;
#[swift_bridge(swift_name = "LxAppVideo.configureStreamAudio")]
fn configure_stream_audio(component_id: &str, config_json: &str) -> bool;
#[swift_bridge(swift_name = "LxAppVideo.pushStreamVideo")]
fn push_stream_video(
component_id: &str,
data: Vec<u8>,
dts_ms: u32,
pts_ms: u32,
keyframe: bool,
) -> bool;
#[swift_bridge(swift_name = "LxAppVideo.pushStreamAudio")]
fn push_stream_audio(component_id: &str, data: Vec<u8>, dts_ms: u32, pts_ms: u32) -> bool;
#[swift_bridge(swift_name = "LxAppVideo.stopStreamDecoder")]
fn stop_stream_decoder(component_id: &str) -> bool;
#[swift_bridge(swift_name = "LxApp.startPullDownRefresh")]
fn start_pull_down_refresh(appid: &str, path: &str) -> bool;
#[swift_bridge(swift_name = "LxApp.stopPullDownRefresh")]
fn stop_pull_down_refresh(appid: &str, path: &str) -> bool;
#[swift_bridge(swift_name = "LxAppCapsuleButtons.getCapsuleRect")]
fn get_capsule_rect(callback_id: u64);
#[swift_bridge(swift_name = "LxAppWifi.startWifi")]
fn start_wifi(callback_id: u64);
#[swift_bridge(swift_name = "LxAppWifi.stopWifi")]
fn stop_wifi(callback_id: u64);
#[swift_bridge(swift_name = "LxAppWifi.connectWifi")]
fn connect_wifi(callback_id: u64, ssid: &str, password: Option<&str>);
#[swift_bridge(swift_name = "LxAppWifi.getWifiList")]
fn get_wifi_list(callback_id: u64);
#[swift_bridge(swift_name = "LxAppWifi.getConnectedWifi")]
fn get_connected_wifi(callback_id: u64);
#[swift_bridge(swift_name = "LxAppWifi.isWifiEnabled")]
fn is_wifi_enabled() -> bool;
#[swift_bridge(swift_name = "LxAppWifi.addWifiStateListener")]
fn add_wifi_state_listener(callback_id: u64);
#[swift_bridge(swift_name = "LxAppWifi.removeWifiStateListener")]
fn remove_wifi_state_listener(callback_id: u64);
#[swift_bridge(swift_name = "LxAppNetwork.getNetworkInfo")]
fn get_network_info(callback_id: u64);
#[swift_bridge(swift_name = "LxAppNetwork.addNetworkChangeListener")]
fn add_network_change_listener(callback_id: u64);
#[swift_bridge(swift_name = "LxAppNetwork.removeNetworkChangeListener")]
fn remove_network_change_listener(callback_id: u64);
}
}
#[cfg(target_os = "macos")]
pub use bridge::reveal_in_file_manager;
pub use bridge::{
ActionSheetOptions, ModalOptions, PopupPositionBridge, ToastIcon, ToastOptions, ToastPosition,
cancel_preview_media, close_lxapp, hide_popup, hide_toast, navigate, open_document_external,
open_lxapp, open_url, preview_media, review_document, show_action_sheet, show_modal,
show_popup, show_toast, update_navbar_ui, update_orientation_ui, update_tabbar_ui,
};
#[cfg(any(target_os = "ios", target_os = "macos"))]
#[allow(unused_imports)]
pub use bridge::{
compress_image, compress_video, configure_stream_audio, configure_stream_video,
copy_album_media_to_file, create_stream_decoder, extract_video_thumbnail, get_capsule_rect,
get_image_info, get_video_info, push_stream_audio, push_stream_video, scan_code,
stop_stream_decoder,
};
#[cfg(any(target_os = "ios", target_os = "macos"))]
#[allow(unused_imports)]
pub use bridge::{dispatch_video_command, set_video_player_callback};
#[cfg(any(target_os = "ios", target_os = "macos"))]
#[allow(unused_imports)]
pub use bridge::{choose_media, start_pull_down_refresh, stop_pull_down_refresh};
#[cfg(any(target_os = "ios", target_os = "macos"))]
#[allow(unused_imports)]
pub use bridge::{
add_wifi_state_listener, connect_wifi, get_connected_wifi, get_wifi_list, is_wifi_enabled,
remove_wifi_state_listener, start_wifi, stop_wifi,
};
#[cfg(any(target_os = "ios", target_os = "macos"))]
#[allow(unused_imports)]
pub use bridge::{add_network_change_listener, get_network_info, remove_network_change_listener};