summaryrefslogtreecommitdiffstats
path: root/cython/imobiledevice.pyx
diff options
context:
space:
mode:
authorGravatar Bryan Forbes2010-04-01 01:09:52 -0500
committerGravatar Martin Szulecki2012-03-20 23:25:55 +0100
commitacac4f819ccafa6f6bb945626f2e21ec2b75074b (patch)
treefc6881c387ee1e4527ed2b3ca73d1059bc8fc4f2 /cython/imobiledevice.pyx
parentaf06ff22149191c056804e7fec9c1a6880a06872 (diff)
downloadlibimobiledevice-acac4f819ccafa6f6bb945626f2e21ec2b75074b.tar.gz
libimobiledevice-acac4f819ccafa6f6bb945626f2e21ec2b75074b.tar.bz2
Cleaned up Makefile.am.
Added the cython m4 files. Cleaned up afc.pxi. Make sure the event callback and installation proxy callback aquire the GIL. Implemented some cleanup before the error handlers raise.
Diffstat (limited to 'cython/imobiledevice.pyx')
-rw-r--r--cython/imobiledevice.pyx35
1 files changed, 27 insertions, 8 deletions
diff --git a/cython/imobiledevice.pyx b/cython/imobiledevice.pyx
index dc0fb88..b57db04 100644
--- a/cython/imobiledevice.pyx
+++ b/cython/imobiledevice.pyx
@@ -67,27 +67,40 @@ cdef class iDeviceError(BaseError):
67 } 67 }
68 BaseError.__init__(self, *args, **kwargs) 68 BaseError.__init__(self, *args, **kwargs)
69 69
70cpdef set_debug_level(int level): 70def set_debug_level(int level):
71 idevice_set_debug_level(level) 71 idevice_set_debug_level(level)
72 72
73cdef class iDeviceEvent: 73cdef class iDeviceEvent:
74 def __init__(self, *args, **kwargs): 74 def __init__(self, *args, **kwargs):
75 raise TypeError("iDeviceEvent cannot be instantiated") 75 raise TypeError("iDeviceEvent cannot be instantiated")
76 76
77cdef void idevice_event_cb(const_idevice_event_t c_event, void *user_data): 77 def __str__(self):
78 return 'iDeviceEvent: %s (%s)' % (self.event == IDEVICE_DEVICE_ADD and 'Add' or 'Remove', self.uuid)
79
80 property event:
81 def __get__(self):
82 return self._c_event.event
83 property uuid:
84 def __get__(self):
85 return self._c_event.uuid
86 property conn_type:
87 def __get__(self):
88 return self._c_event.conn_type
89
90cdef void idevice_event_cb(const_idevice_event_t c_event, void *user_data) with gil:
78 cdef iDeviceEvent event = iDeviceEvent.__new__(iDeviceEvent) 91 cdef iDeviceEvent event = iDeviceEvent.__new__(iDeviceEvent)
79 event._c_event = c_event 92 event._c_event = c_event
80 (<object>user_data)(event) 93 (<object>user_data)(event)
81 94
82cpdef event_subscribe(object callback): 95def event_subscribe(object callback):
83 cdef iDeviceError err = iDeviceError(idevice_event_subscribe(idevice_event_cb, <void*>callback)) 96 cdef iDeviceError err = iDeviceError(idevice_event_subscribe(idevice_event_cb, <void*>callback))
84 if err: raise err 97 if err: raise err
85 98
86cpdef event_unsubscribe(): 99def event_unsubscribe():
87 cdef iDeviceError err = iDeviceError(idevice_event_unsubscribe()) 100 cdef iDeviceError err = iDeviceError(idevice_event_unsubscribe())
88 if err: raise err 101 if err: raise err
89 102
90cpdef get_device_list(): 103def get_device_list():
91 cdef: 104 cdef:
92 char** devices 105 char** devices
93 int count 106 int count
@@ -214,10 +227,14 @@ cdef class LockdownError(BaseError):
214 BaseError.__init__(self, *args, **kwargs) 227 BaseError.__init__(self, *args, **kwargs)
215 228
216cdef class LockdownClient(Base): 229cdef class LockdownClient(Base):
217 def __cinit__(self, iDevice device not None, char *label=NULL, *args, **kwargs): 230 def __cinit__(self, iDevice device not None, bytes label="", *args, **kwargs):
218 cdef: 231 cdef:
219 iDevice dev = device 232 iDevice dev = device
220 lockdownd_error_t err = lockdownd_client_new_with_handshake(dev._c_dev, &(self._c_client), label) 233 lockdownd_error_t err
234 char* c_label = NULL
235 if label:
236 c_label = label
237 err = lockdownd_client_new_with_handshake(dev._c_dev, &(self._c_client), c_label)
221 self.handle_error(err) 238 self.handle_error(err)
222 239
223 def __dealloc__(self): 240 def __dealloc__(self):
@@ -229,7 +246,7 @@ cdef class LockdownClient(Base):
229 cdef inline BaseError _error(self, int16_t ret): 246 cdef inline BaseError _error(self, int16_t ret):
230 return LockdownError(ret) 247 return LockdownError(ret)
231 248
232 cpdef int start_service(self, service): 249 cpdef int start_service(self, bytes service):
233 cdef: 250 cdef:
234 uint16_t port 251 uint16_t port
235 lockdownd_error_t err 252 lockdownd_error_t err
@@ -242,6 +259,8 @@ cdef class LockdownClient(Base):
242 259
243cdef extern from *: 260cdef extern from *:
244 ctypedef char* const_char_ptr "const char*" 261 ctypedef char* const_char_ptr "const char*"
262 void free(void *ptr)
263 void plist_free(plist.plist_t node)
245 264
246include "property_list_client.pxi" 265include "property_list_client.pxi"
247include "mobilesync.pxi" 266include "mobilesync.pxi"