mirror of
https://github.com/jkcoxson/idevice.git
synced 2026-03-02 06:26:15 +01:00
Remove cpp 17 features and implement Rust into CPP
This commit is contained in:
@@ -4,73 +4,80 @@
|
||||
#include <idevice++/provider.hpp>
|
||||
#include <idevice++/usbmuxd.hpp>
|
||||
#include <iostream>
|
||||
#include <optional>
|
||||
#include <plist/plist++.h>
|
||||
|
||||
int main() {
|
||||
idevice_init_logger(Debug, Disabled, NULL);
|
||||
|
||||
IdeviceFFI::FfiError e;
|
||||
std::optional<IdeviceFFI::UsbmuxdConnection> u =
|
||||
IdeviceFFI::UsbmuxdConnection::default_new(0, e);
|
||||
if (!u) {
|
||||
auto u_res = IdeviceFFI::UsbmuxdConnection::default_new(0);
|
||||
if_let_err(u_res, e, {
|
||||
std::cerr << "failed to connect to usbmuxd";
|
||||
std::cerr << e.message;
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
auto& u = u_res.unwrap();
|
||||
|
||||
auto devices = u->get_devices(e);
|
||||
if (!devices) {
|
||||
auto devices_res = u.get_devices();
|
||||
if_let_err(devices_res, e, {
|
||||
std::cerr << "failed to get devices from usbmuxd";
|
||||
std::cerr << e.message;
|
||||
return 1;
|
||||
}
|
||||
if (devices->empty()) {
|
||||
});
|
||||
auto devices = std::move(devices_res).unwrap();
|
||||
|
||||
if (devices.empty()) {
|
||||
std::cerr << "no devices connected";
|
||||
std::cerr << e.message;
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto& dev = (*devices)[0];
|
||||
auto& dev = (devices)[0];
|
||||
|
||||
auto udid = dev.get_udid();
|
||||
if (!udid) {
|
||||
if (udid.is_none()) {
|
||||
std::cerr << "no udid\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto id = dev.get_id();
|
||||
if (!id) {
|
||||
if (id.is_none()) {
|
||||
std::cerr << "no id\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
IdeviceFFI::UsbmuxdAddr addr = IdeviceFFI::UsbmuxdAddr::default_new();
|
||||
auto prov =
|
||||
IdeviceFFI::Provider::usbmuxd_new(std::move(addr), /*tag*/ 0, *udid, *id, "reeeeeeeee", e);
|
||||
if (!prov) {
|
||||
IdeviceFFI::UsbmuxdAddr addr = IdeviceFFI::UsbmuxdAddr::default_new();
|
||||
auto prov_res = IdeviceFFI::Provider::usbmuxd_new(
|
||||
std::move(addr), /*tag*/ 0, udid.unwrap(), id.unwrap(), "reeeeeeeee");
|
||||
if_let_err(prov_res, e, {
|
||||
std::cerr << "provider failed: " << e.message << "\n";
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
auto& prov = prov_res.unwrap();
|
||||
|
||||
auto client = IdeviceFFI::Lockdown::connect(*prov, e);
|
||||
if (!client) {
|
||||
auto client_res = IdeviceFFI::Lockdown::connect(prov);
|
||||
if_let_err(client_res, e, {
|
||||
std::cerr << "lockdown connect failed: " << e.message << "\n";
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
auto& client = client_res.unwrap();
|
||||
|
||||
auto pf = prov->get_pairing_file(e);
|
||||
if (!pf) {
|
||||
auto pf = prov.get_pairing_file();
|
||||
if_let_err(pf, e, {
|
||||
std::cerr << "failed to get pairing file: " << e.message << "\n";
|
||||
return 1;
|
||||
}
|
||||
client->start_session(*pf, e);
|
||||
});
|
||||
client.start_session(pf.unwrap());
|
||||
|
||||
auto values = client->get_value(NULL, NULL, e);
|
||||
if (!values) {
|
||||
std::cerr << "get values failed: " << e.message << "\n";
|
||||
return 1;
|
||||
}
|
||||
PList::Dictionary res = PList::Dictionary(*values);
|
||||
std::cout << res.ToXml();
|
||||
auto values = client.get_value(NULL, NULL);
|
||||
match_result(
|
||||
values,
|
||||
ok_val,
|
||||
{
|
||||
PList::Dictionary res = PList::Dictionary(ok_val);
|
||||
std::cout << res.ToXml();
|
||||
},
|
||||
e,
|
||||
{
|
||||
std::cerr << "get values failed: " << e.message << "\n";
|
||||
return 1;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user