use crate::{Browser, BrowserOptions, Error, ErrorKind, Result, TargetType};
use objc::{class, msg_send, runtime::Object, sel, sel_impl};
pub(super) fn open_browser_internal(
_browser: Browser,
target: &TargetType,
options: &BrowserOptions,
) -> Result<()> {
let url = target.get_http_url()?;
if options.dry_run {
return Ok(());
}
unsafe {
let app: *mut Object = msg_send![class!(UIApplication), sharedApplication];
if app.is_null() {
return Err(Error::new(
ErrorKind::Other,
"UIApplication is null, can't open url",
));
}
let url_cstr = std::ffi::CString::new(url).unwrap();
let url_string: *mut Object = msg_send![class!(NSString), stringWithUTF8String: url_cstr];
let url_object: *mut Object = msg_send![class!(NSURL), URLWithString: url_string];
let null_ptr = std::ptr::null_mut::<Object>();
let () = msg_send![app, openURL: url_object options: {} completionHandler: null_ptr];
Ok(())
}
}