[libdmapsharing] Modify API and create test-dmap-server-python
- From: W. Michael Petullo <wmpetullo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdmapsharing] Modify API and create test-dmap-server-python
- Date: Sun, 12 Nov 2017 01:04:08 +0000 (UTC)
commit 9bc1688d872bf003b233b07895a03b80e289ae09
Author: W. Michael Petullo <mike flyn org>
Date: Sat Nov 11 20:03:55 2017 -0500
Modify API and create test-dmap-server-python
Signed-off-by: W. Michael Petullo <mike flyn org>
libdmapsharing/dmap-container-db.c | 2 +-
libdmapsharing/dmap-container-db.h | 18 ++++-
libdmapsharing/dmap-container-record.h | 2 +-
libdmapsharing/dmap-db.h | 2 +-
tests/test-dmap-client-python | 53 +---------------
tests/test-dmap-server-python | 53 ++++++++++++++++
tests/testpython.py | 104 ++++++++++++++++++++++++++++++++
tests/vala-dmap-container-db.c | 2 +-
vala/libdmapsharing-3.2.vapi | 16 ++++-
9 files changed, 190 insertions(+), 62 deletions(-)
---
diff --git a/libdmapsharing/dmap-container-db.c b/libdmapsharing/dmap-container-db.c
index 899827e..9677687 100644
--- a/libdmapsharing/dmap-container-db.c
+++ b/libdmapsharing/dmap-container-db.c
@@ -69,7 +69,7 @@ dmap_container_db_lookup_by_id (DMAPContainerDb * db, guint id)
}
void
-dmap_container_db_foreach (DMAPContainerDb * db, GHFunc func, gpointer data)
+dmap_container_db_foreach (DMAPContainerDb * db, DMAPIdContainerRecordFunc func, gpointer data)
{
DMAP_CONTAINER_DB_GET_INTERFACE (db)->foreach (db, func, data);
}
diff --git a/libdmapsharing/dmap-container-db.h b/libdmapsharing/dmap-container-db.h
index f001a82..12b2dc8 100644
--- a/libdmapsharing/dmap-container-db.h
+++ b/libdmapsharing/dmap-container-db.h
@@ -64,6 +64,16 @@ G_BEGIN_DECLS
typedef struct _DMAPContainerDb DMAPContainerDb;
typedef struct _DMAPContainerDbIface DMAPContainerDbIface;
+/**
+ * DMAPIdContainerRecordFunc:
+ * @id: a DMAP container record ID
+ * @record: a #DMAPContainerRecord
+ * @user_data: (closure): user data
+ *
+ * The type of function passed to dmap_container_db_foreach().
+ */
+typedef void (*DMAPIdContainerRecordFunc) (guint id, DMAPContainerRecord *record, gpointer user_data);
+
struct _DMAPContainerDbIface
{
GTypeInterface parent;
@@ -72,7 +82,7 @@ struct _DMAPContainerDbIface
DMAPContainerRecord *(*lookup_by_id) (DMAPContainerDb * db, guint id);
- void (*foreach) (DMAPContainerDb * db, GHFunc func, gpointer data);
+ void (*foreach) (DMAPContainerDb * db, DMAPIdContainerRecordFunc func, gpointer data);
gint64 (*count) (DMAPContainerDb * db);
};
@@ -94,7 +104,7 @@ void dmap_container_db_add (DMAPContainerDb * db,
* @db: A container database.
* @id: A record ID.
*
- * Returns: the database record corresponding to @id. This record should
+ * Returns: (transfer full): the database record corresponding to @id. This record should
* be unrefed when no longer required.
*/
DMAPContainerRecord *dmap_container_db_lookup_by_id (DMAPContainerDb * db,
@@ -103,13 +113,13 @@ DMAPContainerRecord *dmap_container_db_lookup_by_id (DMAPContainerDb * db,
/**
* dmap_container_db_foreach:
* @db: A container database.
- * @func: The function to apply to each record in the database.
+ * @func: (scope call): The function to apply to each record in the database.
* @data: User data to pass to the function.
*
* Apply a function to each record in a container database.
*/
void dmap_container_db_foreach (DMAPContainerDb * db,
- GHFunc func, gpointer data);
+ DMAPIdContainerRecordFunc func, gpointer data);
/**
* dmap_container_db_count:
diff --git a/libdmapsharing/dmap-container-record.h b/libdmapsharing/dmap-container-record.h
index a2df44b..56d7577 100644
--- a/libdmapsharing/dmap-container-record.h
+++ b/libdmapsharing/dmap-container-record.h
@@ -111,7 +111,7 @@ guint64 dmap_container_record_get_entry_count (DMAPContainerRecord * record);
* dmap_container_record_get_entries:
* @record: A DMAPContainerRecord.
*
- * Returns: A pointer to a DMAPDb containing the entries contained in record.
+ * Returns: (transfer full): A pointer to a DMAPDb containing the entries contained in record.
*/
DMAPDb *dmap_container_record_get_entries (DMAPContainerRecord * record);
diff --git a/libdmapsharing/dmap-db.h b/libdmapsharing/dmap-db.h
index 8049e8d..ec7e868 100644
--- a/libdmapsharing/dmap-db.h
+++ b/libdmapsharing/dmap-db.h
@@ -143,7 +143,7 @@ guint dmap_db_add_path (DMAPDb * db, const gchar * path);
* @db: A media database.
* @id: A record ID.
*
- * Returns: the database record corresponding to @id. This record should
+ * Returns: (transfer full): the database record corresponding to @id. This record should
* be unrefed by the calling code when no longer required.
*
* If you are implementing a full database using this API, then you
diff --git a/tests/test-dmap-client-python b/tests/test-dmap-client-python
index a39161c..ce0cac0 100755
--- a/tests/test-dmap-client-python
+++ b/tests/test-dmap-client-python
@@ -11,61 +11,14 @@ from gi.repository import GLib
from gi.repository import DMAP
from gi.repository import DAAP
-class PyDMAPDb(GObject.GObject, DMAP.Db):
- db = {}
- nextId = 0
-
- def do_foreach(self, func, user_data=None):
- for id in self.db.copy():
- func (id, self.db[id])
-
- def do_add(self, record):
- id = self.nextId
- self.db[id] = record
- self.nextId += 1
- return id
-
- def __init__(self):
- super(PyDMAPDb, self).__init__()
-
-class PyDAAPRecord(GObject.GObject, DAAP.Record, DMAP.Record):
- location = GObject.property(type=GObject.TYPE_STRING, default=None)
- title = GObject.property(type=GObject.TYPE_STRING, default=None)
- songalbum = GObject.property(type=GObject.TYPE_STRING, default=None)
- sort_album = GObject.property(type=GObject.TYPE_STRING, default=None)
- songartist = GObject.property(type=GObject.TYPE_STRING, default=None)
- sort_artist = GObject.property(type=GObject.TYPE_STRING, default=None)
- songgenre = GObject.property(type=GObject.TYPE_STRING, default=None)
- format = GObject.property(type=GObject.TYPE_STRING, default=None)
- rating = GObject.property(type=GObject.TYPE_INT, default=0)
- filesize = GObject.property(type=GObject.TYPE_UINT64, default=0)
- duration = GObject.property(type=GObject.TYPE_INT, default=0)
- track = GObject.property(type=GObject.TYPE_INT, default=0)
- year = GObject.property(type=GObject.TYPE_INT, default=0)
- firstseen = GObject.property(type=GObject.TYPE_INT, default=0)
- mtime = GObject.property(type=GObject.TYPE_INT, default=0)
- disc = GObject.property(type=GObject.TYPE_INT, default=0)
- bitrate = GObject.property(type=GObject.TYPE_INT, default=0)
- has_video = GObject.property(type=GObject.TYPE_BOOLEAN, default=0)
- mediakind = GObject.property(type=GObject.TYPE_INT, default=0)
- songalbumid = GObject.property(type=GObject.TYPE_INT64, default=0)
-
- def __init__(self):
- super(PyDAAPRecord, self).__init__()
-
-class PyDAAPRecordFactory(GObject.GObject, DMAP.RecordFactory):
- def do_create (self, user_data=None):
- return PyDAAPRecord()
-
- def __init__(self):
- super(PyDAAPRecordFactory, self).__init__()
+import testpython
class TestDMAPClient(GObject.GObject):
def __init__(self):
super(TestDMAPClient, self).__init__()
- self.factory = PyDAAPRecordFactory()
- self.db = PyDMAPDb()
+ self.factory = testpython.PyDAAPRecordFactory()
+ self.db = testpython.PyDMAPDb()
self.browser = DMAP.MdnsBrowser.new(DMAP.MdnsServiceType.DAAP)
def start(self):
diff --git a/tests/test-dmap-server-python b/tests/test-dmap-server-python
new file mode 100755
index 0000000..360ae9e
--- /dev/null
+++ b/tests/test-dmap-server-python
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+
+import gi
+import sys
+
+gi.require_version('DMAP', '3.2')
+gi.require_version('DAAP', '3.2')
+
+from gi.repository import GObject
+from gi.repository import GLib
+from gi.repository import DMAP
+from gi.repository import DAAP
+
+import testpython
+
+class TestDMAPServer(GObject.GObject):
+ def __init__(self):
+ super(TestDMAPServer, self).__init__()
+
+ name = 'Python libdmapsharing test'
+
+ self.container_record = testpython.PyDMAPContainerRecord()
+ self.container_db = testpython.PyDMAPContainerDb()
+ self.factory = testpython.PyDAAPRecordFactory()
+ self.db = testpython.PyDMAPDb()
+
+ record = testpython.PyDAAPRecord()
+
+ record.set_property('title', 'test-title')
+ record.set_property('songalbum', 'test-album')
+ record.set_property('sort-album', 'test-sort-album')
+ record.set_property('songartist', 'test-artist')
+ record.set_property('sort-artist', 'test-sort-artist')
+ record.set_property('songgenre', 'test-genre')
+ record.set_property('format', 'test-format')
+ record.set_property('rating', 0)
+ record.set_property('filesize', 1)
+ record.set_property('duration', 2)
+ record.set_property('track', 3)
+ record.set_property('year', 4)
+ record.set_property('firstseen', 5)
+ record.set_property('mtime', 6)
+ record.set_property('disc', 7)
+ record.set_property('bitrate', 8)
+ record.set_property('has-video', False)
+ record.set_property('mediakind', DMAP.MediaKind.MUSIC)
+
+ self.db.add(record)
+
+ self.share = DAAP.Share.new(name, 'password', self.db, self.container_db, 'audio/mp3')
+
+server = TestDMAPServer ()
+GLib.MainLoop().run()
diff --git a/tests/testpython.py b/tests/testpython.py
new file mode 100644
index 0000000..6a89e73
--- /dev/null
+++ b/tests/testpython.py
@@ -0,0 +1,104 @@
+import gi
+
+gi.require_version('DMAP', '3.2')
+gi.require_version('DAAP', '3.2')
+
+from gi.repository import GObject
+from gi.repository import GLib
+from gi.repository import DMAP
+from gi.repository import DAAP
+
+class PyDMAPDb(GObject.GObject, DMAP.Db):
+ db = {}
+ nextId = 0
+
+ def do_foreach(self, func, user_data=None):
+ for id in self.db.copy():
+ func (id, self.db[id])
+
+ def do_add(self, record):
+ id = self.nextId
+ self.db[id] = record
+ self.nextId += 1
+ return id
+
+ def do_count(self):
+ return len(self.db);
+
+ def do_lookup_by_id(self, id):
+ return self.db[id]
+
+ def __init__(self):
+ super(PyDMAPDb, self).__init__()
+
+class PyDAAPRecord(GObject.GObject, DAAP.Record, DMAP.Record):
+ location = GObject.property(type=GObject.TYPE_STRING, default=None)
+ title = GObject.property(type=GObject.TYPE_STRING, default=None)
+ songalbum = GObject.property(type=GObject.TYPE_STRING, default=None)
+ sort_album = GObject.property(type=GObject.TYPE_STRING, default=None)
+ songartist = GObject.property(type=GObject.TYPE_STRING, default=None)
+ sort_artist = GObject.property(type=GObject.TYPE_STRING, default=None)
+ songgenre = GObject.property(type=GObject.TYPE_STRING, default=None)
+ format = GObject.property(type=GObject.TYPE_STRING, default=None)
+ rating = GObject.property(type=GObject.TYPE_INT, default=0)
+ filesize = GObject.property(type=GObject.TYPE_UINT64, default=0)
+ duration = GObject.property(type=GObject.TYPE_INT, default=0)
+ track = GObject.property(type=GObject.TYPE_INT, default=0)
+ year = GObject.property(type=GObject.TYPE_INT, default=0)
+ firstseen = GObject.property(type=GObject.TYPE_INT, default=0)
+ mtime = GObject.property(type=GObject.TYPE_INT, default=0)
+ disc = GObject.property(type=GObject.TYPE_INT, default=0)
+ bitrate = GObject.property(type=GObject.TYPE_INT, default=0)
+ has_video = GObject.property(type=GObject.TYPE_BOOLEAN, default=0)
+ mediakind = GObject.property(type=GObject.TYPE_INT, default=0)
+ # mediakind = GObject.property(type=DMAP.MediaKind , default=0)
+ songalbumid = GObject.property(type=GObject.TYPE_INT64, default=0)
+ # hash = GObject.property(type=GObject.TYPE_POINTER, default=None)
+ hash = GObject.property(type=GLib.ByteArray, default=None)
+
+ def __init__(self):
+ super(PyDAAPRecord, self).__init__()
+
+class PyDAAPRecordFactory(GObject.GObject, DMAP.RecordFactory):
+ def do_create (self, user_data=None):
+ return PyDAAPRecord()
+
+ def __init__(self):
+ super(PyDAAPRecordFactory, self).__init__()
+
+class PyDMAPContainerRecord(GObject.GObject, DMAP.ContainerRecord):
+ name = GObject.property(type=GObject.TYPE_STRING, default='Test')
+ entries = PyDMAPDb()
+
+ def do_get_id(self):
+ return 2
+
+ def do_add_entry(self):
+ pass
+
+ def do_get_entry_count(self):
+ return 1
+
+ def do_get_entries(self):
+ return self.entries
+
+ def __init__(self):
+ super(PyDMAPContainerRecord, self).__init__()
+
+class PyDMAPContainerDb(GObject.GObject, DMAP.ContainerDb):
+ record = PyDMAPContainerRecord()
+
+ def do_add(self, record):
+ pass
+
+ def do_count(self):
+ return 1;
+
+ def do_foreach(self, func, user_data=None):
+ func (1, self.record)
+
+ def do_lookup_by_id(self, id):
+ return self.record
+
+ def __init__(self):
+ super(PyDMAPContainerDb, self).__init__()
diff --git a/tests/vala-dmap-container-db.c b/tests/vala-dmap-container-db.c
index c41b00b..d808964 100644
--- a/tests/vala-dmap-container-db.c
+++ b/tests/vala-dmap-container-db.c
@@ -172,7 +172,7 @@ static void vala_dmap_container_db_class_init (ValaDMAPContainerDbClass * klass)
static void vala_dmap_container_db_dmap_container_db_interface_init (DMAPContainerDbIface * iface) {
vala_dmap_container_db_dmap_container_db_parent_iface = g_type_interface_peek_parent (iface);
iface->count = (gint64 (*) (DMAPContainerDb *)) vala_dmap_container_db_real_count;
- iface->foreach = (void (*) (DMAPContainerDb *, GHFunc, void*)) vala_dmap_container_db_real_foreach;
+ iface->foreach = (void (*) (DMAPContainerDb *, DMAPIdContainerRecordFunc, void*))
vala_dmap_container_db_real_foreach;
iface->lookup_by_id = (DMAPContainerRecord* (*) (DMAPContainerDb *, guint))
vala_dmap_container_db_real_lookup_by_id;
iface->add = (void (*) (DMAPContainerDb *, DMAPContainerRecord*)) vala_dmap_container_db_real_add;
}
diff --git a/vala/libdmapsharing-3.2.vapi b/vala/libdmapsharing-3.2.vapi
index f874611..ffbc637 100644
--- a/vala/libdmapsharing-3.2.vapi
+++ b/vala/libdmapsharing-3.2.vapi
@@ -269,7 +269,7 @@ namespace DAAP {
[CCode (cname = "dmap_container_db_count")]
public abstract int64 count (DMAP.ContainerDb db);
[CCode (cname = "dmap_container_db_foreach")]
- public abstract void @foreach (DMAP.ContainerDb db, GLib.HFunc func, void* data);
+ public abstract void @foreach (DMAP.ContainerDb db, DAAP.DMAPIdContainerRecordFunc func,
void* data);
[CCode (cname = "dmap_container_db_lookup_by_id")]
public abstract unowned DAAP.DMAPContainerRecord lookup_by_id (DMAP.ContainerDb db, uint id);
}
@@ -550,6 +550,8 @@ namespace DAAP {
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate bool DMAPConnectionFunc (DAAP.DMAPConnection connection, bool result, string reason);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
+ public delegate void DMAPIdContainerRecordFunc (uint id, DAAP.DMAPContainerRecord record);
+ [CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void DMAPIdRecordFunc (uint id, DAAP.DMAPRecord record);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void DMAPResponseHandler (DAAP.DMAPConnection connection, uint status, GLib.Node
structure);
@@ -933,7 +935,7 @@ namespace DACP {
[CCode (cname = "dmap_container_db_count")]
public abstract int64 count (DMAP.ContainerDb db);
[CCode (cname = "dmap_container_db_foreach")]
- public abstract void @foreach (DMAP.ContainerDb db, GLib.HFunc func, void* data);
+ public abstract void @foreach (DMAP.ContainerDb db, DACP.DMAPIdContainerRecordFunc func,
void* data);
[CCode (cname = "dmap_container_db_lookup_by_id")]
public abstract unowned DACP.DMAPContainerRecord lookup_by_id (DMAP.ContainerDb db, uint id);
}
@@ -1229,6 +1231,8 @@ namespace DACP {
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate bool DMAPConnectionFunc (DACP.DMAPConnection connection, bool result, string reason);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
+ public delegate void DMAPIdContainerRecordFunc (uint id, DACP.DMAPContainerRecord record);
+ [CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void DMAPIdRecordFunc (uint id, DACP.DMAPRecord record);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void DMAPResponseHandler (DACP.DMAPConnection connection, uint status, GLib.Node
structure);
@@ -1548,7 +1552,7 @@ namespace DMAP {
public interface ContainerDb : GLib.Object {
public abstract void add (DMAP.ContainerRecord record);
public abstract int64 count ();
- public abstract void @foreach (GLib.HFunc func);
+ public abstract void @foreach (DMAP.IdContainerRecordFunc func);
public abstract unowned DMAP.ContainerRecord lookup_by_id (uint id);
}
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
@@ -1807,6 +1811,8 @@ namespace DMAP {
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate bool ConnectionFunc (DMAP.Connection connection, bool result, string reason);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
+ public delegate void IdContainerRecordFunc (uint id, DMAP.ContainerRecord record);
+ [CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void IdRecordFunc (uint id, DMAP.Record record);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void ResponseHandler (DMAP.Connection connection, uint status, GLib.Node structure);
@@ -2158,7 +2164,7 @@ namespace DPAP {
[CCode (cname = "dmap_container_db_count")]
public abstract int64 count (DMAP.ContainerDb db);
[CCode (cname = "dmap_container_db_foreach")]
- public abstract void @foreach (DMAP.ContainerDb db, GLib.HFunc func, void* data);
+ public abstract void @foreach (DMAP.ContainerDb db, DPAP.DMAPIdContainerRecordFunc func,
void* data);
[CCode (cname = "dmap_container_db_lookup_by_id")]
public abstract unowned DPAP.DMAPContainerRecord lookup_by_id (DMAP.ContainerDb db, uint id);
}
@@ -2437,6 +2443,8 @@ namespace DPAP {
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate bool DMAPConnectionFunc (DPAP.DMAPConnection connection, bool result, string reason);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
+ public delegate void DMAPIdContainerRecordFunc (uint id, DPAP.DMAPContainerRecord record);
+ [CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void DMAPIdRecordFunc (uint id, DPAP.DMAPRecord record);
[CCode (cheader_filename = "libdmapsharing/dmap.h")]
public delegate void DMAPResponseHandler (DPAP.DMAPConnection connection, uint status, GLib.Node
structure);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]