summaryrefslogtreecommitdiffstats
path: root/cython/imobiledevice.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'cython/imobiledevice.pyx')
-rw-r--r--cython/imobiledevice.pyx94
1 files changed, 66 insertions, 28 deletions
diff --git a/cython/imobiledevice.pyx b/cython/imobiledevice.pyx
index 7190def..befd586 100644
--- a/cython/imobiledevice.pyx
+++ b/cython/imobiledevice.pyx
@@ -18,20 +18,23 @@ cdef extern from "pyerrors.h":
cdef class BaseError(Exception):
cdef dict _lookup_table
cdef int16_t _c_errcode
- cpdef get_message(self)
def __cinit__(self, int16_t errcode):
self._c_errcode = errcode
- Exception.__init__(self, errcode)
-
+
def __nonzero__(self):
return self._c_errcode != 0
- cpdef get_message(self):
- return '%s (%s)' % (self._lookup_table[self._c_errcode], self._c_errcode)
+ property message:
+ def __get__(self):
+ return self._lookup_table[self._c_errcode]
+
+ property code:
+ def __get__(self):
+ return self._c_errcode
def __str__(self):
- return self.get_message()
+ return '%s (%s)' % (self.message, self.code)
def __repr__(self):
return self.__str__()
@@ -55,26 +58,18 @@ cdef extern from "libimobiledevice/libimobiledevice.h":
idevice_event_type event
char *uuid
int conn_type
- ctypedef void (*idevice_event_cb_t) (idevice_event_t *event, void *user_data)
- cdef extern idevice_error_t c_idevice_event_subscribe "idevice_event_subscribe" (idevice_event_cb_t callback, void *user_data)
- cdef extern idevice_error_t c_idevice_event_unsubscribe "idevice_event_unsubscribe" ()
+ ctypedef idevice_event_t* const_idevice_event_t "const idevice_event_t*"
+ ctypedef void (*idevice_event_cb_t) (const_idevice_event_t event, void *user_data)
+ cdef extern idevice_error_t idevice_event_subscribe(idevice_event_cb_t callback, void *user_data)
+ cdef extern idevice_error_t idevice_event_unsubscribe()
+ idevice_error_t idevice_get_device_list(char ***devices, int *count)
+ idevice_error_t idevice_device_list_free(char **devices)
void idevice_set_debug_level(int level)
idevice_error_t idevice_new(idevice_t *device, char *uuid)
idevice_error_t idevice_free(idevice_t device)
idevice_error_t idevice_get_uuid(idevice_t device, char** uuid)
idevice_error_t idevice_get_handle(idevice_t device, uint32_t *handle)
-def set_debug_level(level):
- idevice_set_debug_level(level)
-
-#cdef void idevice_event_cb(idevice_event_t *c_event, void *user_data):
- #event = iDeviceEvent()
- #event._c_event = c_event
- #(<object>user_data)(event)
-
-#def idevice_event_subscribe(callback):
- #c_idevice_event_subscribe(idevice_event_cb, <void*>callback)
-
cdef class iDeviceError(BaseError):
def __cinit__(self, *args, **kwargs):
self._lookup_table = {
@@ -88,8 +83,39 @@ cdef class iDeviceError(BaseError):
}
BaseError.__init__(self, *args, **kwargs)
+def set_debug_level(level):
+ idevice_set_debug_level(level)
+
cdef class iDeviceEvent:
- cdef idevice_event_t* _c_event
+ cdef const_idevice_event_t _c_event
+
+cdef void idevice_event_cb(const_idevice_event_t c_event, void *user_data):
+ cdef iDeviceEvent event = iDeviceEvent()
+ event._c_event = c_event
+ (<object>user_data)(event)
+
+def event_subscribe(callback):
+ cdef iDeviceError err = iDeviceError(idevice_event_subscribe(idevice_event_cb, <void*>callback))
+ if err: raise err
+
+def event_unsubscribe():
+ cdef iDeviceError err = iDeviceError(idevice_event_unsubscribe())
+ if err: raise err
+
+def get_device_list():
+ cdef char** devices
+ cdef int count
+ cdef list result
+ cdef bytes device
+ cdef iDeviceError err = iDeviceError(idevice_get_device_list(&devices, &count))
+
+ result = []
+ for i from 0 <= i < count:
+ device = devices[i]
+ result.append(device)
+
+ idevice_device_list_free(devices)
+ return result
cdef class iDevice:
cdef idevice_t _c_dev
@@ -188,7 +214,7 @@ cdef class LockdownClient:
err = LockdownError(lockdownd_client_free(self._c_client))
if err: raise err
- cpdef start_service(self, service):
+ cpdef int start_service(self, service):
cdef uint16_t port
err = LockdownError(lockdownd_start_service(self._c_client, service, &port))
if err: raise err
@@ -231,9 +257,13 @@ cdef class MobileSyncError(BaseError):
cdef class MobileSyncClient:
cdef mobilesync_client_t _c_client
- def __cinit__(self, iDevice device not None, LockdownClient lockdown not None, *args, **kwargs):
+ def __cinit__(self, iDevice device not None, LockdownClient lockdown=None, *args, **kwargs):
cdef iDevice dev = device
- cdef LockdownClient lckd = lockdown
+ cdef LockdownClient lckd
+ if lockdown is None:
+ lckd = LockdownClient(dev)
+ else:
+ lcdk = lockdown
port = lckd.start_service("com.apple.mobilesync")
err = MobileSyncError(mobilesync_client_new(dev._c_dev, port, &(self._c_client)))
if err: raise err
@@ -286,9 +316,13 @@ cdef class NotificationProxyError(BaseError):
cdef class NotificationProxy:
cdef np_client_t _c_client
- def __cinit__(self, iDevice device not None, LockdownClient lockdown not None, *args, **kwargs):
+ def __cinit__(self, iDevice device not None, LockdownClient lockdown=None, *args, **kwargs):
cdef iDevice dev = device
- cdef LockdownClient lckd = lockdown
+ cdef LockdownClient lckd
+ if lockdown is None:
+ lckd = LockdownClient(dev)
+ else:
+ lckd = lockdown
port = lckd.start_service("com.apple.mobile.notification_proxy")
err = NotificationProxyError(np_client_new(dev._c_dev, port, &(self._c_client)))
if err: raise err
@@ -323,9 +357,13 @@ cdef class SpringboardServicesError(BaseError):
cdef class SpringboardServices:
cdef sbservices_client_t _c_client
- def __cinit__(self, iDevice device not None, LockdownClient lockdown not None, *args, **kwargs):
+ def __cinit__(self, iDevice device not None, LockdownClient lockdown=None, *args, **kwargs):
cdef iDevice dev = device
- cdef LockdownClient lckd = lockdown
+ cdef LockdownClient lckd
+ if lockdown is None:
+ lckd = LockdownClient(dev)
+ else:
+ lckd = lockdown
port = lockdown.start_service("com.apple.springboardservices")
err = SpringboardServicesError(sbservices_client_new(dev._c_dev, port, &(self._c_client)))
if err: raise err