From 2f1ad86f18314b332ca0c0214dc92584fe11b2c2 Mon Sep 17 00:00:00 2001 From: uncor3 Date: Fri, 22 May 2026 12:14:21 +0000 Subject: [PATCH] implement create_service_manager in service_factory --- src/service_factory.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/service_factory.rs b/src/service_factory.rs index a84b8bf..11a89a0 100644 --- a/src/service_factory.rs +++ b/src/service_factory.rs @@ -1,4 +1,5 @@ use crate::device_ctx; +use crate::service_manager::ServiceManager; use crate::utils::{empty_qjsvalue, engine_ptr_new_object, vend_app_documents}; use crate::{afc_services::AfcServices, run_sync}; @@ -21,6 +22,7 @@ pub struct ServiceFactory { create_afc_client: qt_method!(fn(&self, udid: QString, afc2: bool) -> QJSValue), create_hause_arrest_afc_client: qt_method!(fn(&self, udid: QString, bundle_id: QString) -> QJSValue), + create_service_manager: qt_method!(fn(&self, udid: QString, ios_version: u32) -> QJSValue), } impl ServiceFactory { @@ -30,6 +32,7 @@ impl ServiceFactory { engine_ptr, create_afc_client: Default::default(), create_hause_arrest_afc_client: Default::default(), + create_service_manager: Default::default(), } } @@ -116,4 +119,25 @@ impl ServiceFactory { } } } + + fn create_service_manager(&self, udid: QString, ios_version: u32) -> QJSValue { + let engine_ptr: *mut c_void = self.engine_ptr; + if engine_ptr.is_null() { + eprintln!("ServiceFactory: engine_ptr is null"); + return empty_qjsvalue(); + } + let udid_clone = udid.to_string(); + let maybe_device = run_sync(async move { device_ctx::get_device_opt(udid).await }); + match maybe_device { + Some(dev) => { + let mng = ServiceManager::from_device(dev, udid_clone, ios_version); + let obj_ptr = qmetaobject::into_leaked_cpp_ptr(mng); + engine_ptr_new_object(engine_ptr, obj_ptr) + } + None => { + println!("No device in create_service_manager"); + empty_qjsvalue() + } + } + } }