]> git.sesse.net Git - vlc/commitdiff
python-ctypes: fix Logger bindings.
authorOlivier Aubert <olivier.aubert@liris.cnrs.fr>
Thu, 3 Sep 2009 15:22:22 +0000 (17:22 +0200)
committerOlivier Aubert <olivier.aubert@liris.cnrs.fr>
Thu, 3 Sep 2009 15:22:45 +0000 (17:22 +0200)
bindings/python-ctypes/generate.py
bindings/python-ctypes/header.py
bindings/python-ctypes/override.py
bindings/python-ctypes/test.py

index a1870e04398cd7bc0104fb58e6b2ee51f0a440fd..05f39a7f2af4a176c660c9be018ae81d9c6db7cc 100755 (executable)
@@ -329,7 +329,7 @@ class PythonGenerator(object):
         'libvlc_media_t*': 'Media',
         'libvlc_log_t*': 'Log',
         'libvlc_log_iterator_t*': 'LogIterator',
-        'libvlc_log_message_t*': 'LogMessage',
+        'libvlc_log_message_t*': 'ctypes.POINTER(LogMessage)',
         'libvlc_event_type_t': 'ctypes.c_uint',
         'libvlc_event_manager_t*': 'EventManager',
         'libvlc_media_discoverer_t*': 'MediaDiscoverer',
@@ -658,9 +658,15 @@ class PythonGenerator(object):
                 # Check for standard methods
                 if name == 'count':
                     # There is a count method. Generate a __len__ one.
-                    self.output("""    def __len__(self):
+                    if params and params[-1][0] == 'libvlc_exception_t*':
+                        self.output("""    def __len__(self):
         e=VLCException()
         return %s(self, e)
+""" % method)
+                    else:
+                        # No exception
+                        self.output("""    def __len__(self):
+        return %s(self)
 """ % method)
                 elif name.endswith('item_at_index'):
                     # Indexable (and thus iterable)"
index d567b9bbdc9beb145ecbfd9463a45897315f715b..fcaaaae74d1889a35c8ef2d51c6887634a0daaf0 100755 (executable)
@@ -149,6 +149,9 @@ class LogMessage(ctypes.Structure):
                 ('message', ctypes.c_char_p),
                 ]
 
+    def __init__(self):
+        self.size=ctypes.sizeof(self)
+
     def __str__(self):
         return "vlc.LogMessage(%d:%s): %s" % (self.severity, self.type, self.message)
 
index 0888ae9c194a65fdee776e24c3ba4228b4e3ec82..61ddd1ef5f0118ac36d3d09735f20fc494e3e7c0 100644 (file)
@@ -210,11 +210,14 @@ class LogIterator:
     def next(self):
         if not self.has_next():
             raise StopIteration
-        buffer=LogMessage()
+        buf=LogMessage()
         e=VLCException()
-        ret=libvlc_log_iterator_next(self, buffer, e)
-        return ret
+        ret=libvlc_log_iterator_next(self, buf, e)
+        return ret.contents
 
 class Log:
     def __iter__(self):
         return self.get_iterator()
+
+    def dump(self):
+        return [ str(m) for m in self ]
index 97899fad5fe5dc4b2b8bd2c1b31d0b9b6100ac70..02622f32f477d6831aebf582c566cada87c3e8da 100755 (executable)
@@ -107,5 +107,31 @@ class TestVLCAPI(unittest.TestCase):
         p=i.media_player_new(mrl)
         self.assertEqual(p.get_state(), vlc.State.Ended)
 
+    def test_libvlc_logger(self):
+        i=vlc.Instance()
+        l=i.log_open()
+        l.clear()
+        self.assertEqual(l.count(), 0)
+        l.close()
+
+    def test_libvlc_logger_clear(self):
+        i=vlc.Instance()
+        l=i.log_open()
+        l.clear()
+        self.assertEqual(l.count(), 0)
+        l.close()
+
+    def test_libvlc_logger(self):
+        i=vlc.Instance()
+        i.set_log_verbosity(3)
+        l=i.log_open()
+        # This should generate a log message
+        i.add_intf('dummy')
+        self.assertNotEqual(l.count(), 0)
+        for m in l:
+            # Ensure that messages can be read.
+            self.assertNotEqual(len(m.message), 0)
+        l.close()
+
 if __name__ == '__main__':
     unittest.main()