[libdmapsharing/gobject-introspection] Work in progress: can now browse DAAP shares with GObject introspection and Python
- From: W. Michael Petullo <wmpetullo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdmapsharing/gobject-introspection] Work in progress: can now browse DAAP shares with GObject introspection and Python
- Date: Wed, 25 Jun 2014 21:26:06 +0000 (UTC)
commit 6af36d3152fad012df00fb6015133ed46bec5eff
Author: W. Michael Petullo <mike flyn org>
Date: Wed Jun 25 17:25:58 2014 -0400
Work in progress: can now browse DAAP shares with GObject introspection and Python
Signed-off-by: W. Michael Petullo <mike flyn org>
libdmapsharing/Makefile.am | 6 +++-
libdmapsharing/daap-connection.h | 12 ++++++++
libdmapsharing/daap-share.c | 13 +++-----
libdmapsharing/dmap-connection.c | 51 +++++++++++++++++++-----------------
libdmapsharing/dmap-connection.h | 19 ++++++++++---
libdmapsharing/dmap-db.c | 6 ++--
libdmapsharing/dmap-db.h | 18 +++++++++---
libdmapsharing/dmap-share.c | 16 ++++-------
libdmapsharing/dmap-share.h | 3 +-
libdmapsharing/dpap-share.c | 10 +++----
tests/dmapcopy.vala | 12 +++-----
tests/dpapview.vala | 12 +++-----
tests/test-dmap-client-python | 54 ++++++++++++++++++++++++++-----------
tests/test-dmap-client.c | 2 +-
14 files changed, 139 insertions(+), 95 deletions(-)
---
diff --git a/libdmapsharing/Makefile.am b/libdmapsharing/Makefile.am
index f30a814..296c6cb 100644
--- a/libdmapsharing/Makefile.am
+++ b/libdmapsharing/Makefile.am
@@ -6,6 +6,8 @@ libdmapsharing_3_0_la_SOURCES = \
$(BUILT_SOURCES) \
daap-connection.c \
daap-record.c \
+ daap-record-simple.c \
+ daap-record-factory-simple.c \
daap-share.c \
dacp-connection.c \
dacp-share.c \
@@ -76,6 +78,8 @@ libdmapsharingincludedir = \
libdmapsharinginclude_HEADERS = \
daap-connection.h \
daap-record.h \
+ daap-record-simple.h \
+ daap-record-factory-simple.h \
daap-share.h \
dacp-connection.h \
dacp-share.h \
@@ -157,7 +161,7 @@ DAAP_3_0_gir_NAMESPACE = DAAP
DAAP_3_0_gir_SCANNERFLAGS = --symbol-prefix=daap
DAAP_3_0_gir_LIBS = libdmapsharing-3.0.la
DAAP_3_0_gir_FILES = $(introspection_sources)
-DAAP_3_0_gir_INCLUDES = GObject-2.0 Soup-2.4
+DAAP_3_0_gir_INCLUDES = GObject-2.0 Soup-2.4 DMAP-3.0
DAAP_3_0_gir_CFLAGS = $(INCLUDES) $(libdmapsharing_3_0_la_CFLAGS)
INTROSPECTION_GIRS = DMAP-3.0.gir DAAP-3.0.gir
diff --git a/libdmapsharing/daap-connection.h b/libdmapsharing/daap-connection.h
index ea7d743..b0620b9 100644
--- a/libdmapsharing/daap-connection.h
+++ b/libdmapsharing/daap-connection.h
@@ -85,6 +85,18 @@ typedef struct
GType daap_connection_get_type (void);
+/**
+ * daap_connection_new:
+ * @name: The name of the share to connect to.
+ * @host: The host of the share to connect to.
+ * @port: The port of the share to connect to.
+ * @db: (transfer full): The db that will receive the records found in the share.
+ * @factory: (transfer full): A factory to create records.
+ *
+ * Create a new DAAP connection.
+ *
+ * Returns: a pointer to a DAAPConnection.
+ */
DAAPConnection *daap_connection_new (const char *name,
const char *host,
guint port,
diff --git a/libdmapsharing/daap-share.c b/libdmapsharing/daap-share.c
index d9fa1a6..ce5fdc2 100644
--- a/libdmapsharing/daap-share.c
+++ b/libdmapsharing/daap-share.c
@@ -73,7 +73,7 @@ static void databases_items_xxx (DMAPShare * share,
GHashTable * query,
SoupClientContext * context);
static struct DMAPMetaDataMap *get_meta_data_map (DMAPShare * share);
-static void add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer mb);
+static void add_entry_to_mlcl (guint id, DMAPRecord * record, gpointer mb);
#define DAAP_TYPE_OF_SERVICE "_daap._tcp"
#define DAAP_PORT 3689
@@ -550,7 +550,7 @@ _error:
}
static void
-add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer _mb)
+add_entry_to_mlcl (guint id, DMAPRecord * record, gpointer _mb)
{
GNode *mlit;
gboolean has_video = 0;
@@ -563,8 +563,7 @@ add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer _mb)
dmap_structure_add (mlit, DMAP_CC_MIKD,
(gchar) DAAP_ITEM_KIND_AUDIO);
if (_dmap_share_client_requested (mb->bits, ITEM_ID))
- dmap_structure_add (mlit, DMAP_CC_MIID,
- GPOINTER_TO_UINT (id));
+ dmap_structure_add (mlit, DMAP_CC_MIID, id);
if (_dmap_share_client_requested (mb->bits, ITEM_NAME)) {
gchar *title = NULL;
@@ -576,11 +575,9 @@ add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer _mb)
g_debug ("Title requested but not available");
}
if (_dmap_share_client_requested (mb->bits, PERSISTENT_ID))
- dmap_structure_add (mlit, DMAP_CC_MPER,
- GPOINTER_TO_UINT (id));
+ dmap_structure_add (mlit, DMAP_CC_MPER, id);
if (_dmap_share_client_requested (mb->bits, CONTAINER_ITEM_ID))
- dmap_structure_add (mlit, DMAP_CC_MCTI,
- GPOINTER_TO_UINT (id));
+ dmap_structure_add (mlit, DMAP_CC_MCTI, id);
if (_dmap_share_client_requested (mb->bits, SONG_DATA_KIND))
dmap_structure_add (mlit, DMAP_CC_ASDK,
(gchar) DAAP_SONG_DATA_KIND_NONE);
diff --git a/libdmapsharing/dmap-connection.c b/libdmapsharing/dmap-connection.c
index fbc635c..8cac2d9 100644
--- a/libdmapsharing/dmap-connection.c
+++ b/libdmapsharing/dmap-connection.c
@@ -30,6 +30,7 @@
#include <libsoup/soup.h>
+#include "daap-record-factory-simple.h"
#include "dmap-md5.h"
#include "dmap-connection.h"
#include "dmap-record-factory.h"
@@ -162,21 +163,23 @@ dmap_connection_class_init (DMAPConnectionClass * klass)
g_object_class_install_property (object_class,
PROP_DB,
- g_param_spec_pointer ("db",
- "DMAPDb",
- "DMAPDb object",
- G_PARAM_READWRITE
- |
- G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_object ("db",
+ "DMAPDb",
+ "DMAPDb object",
+ DMAP_TYPE_DB,
+ G_PARAM_READWRITE
+ |
+ G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_FACTORY,
- g_param_spec_pointer ("factory",
- "record factory",
- "record factory",
- G_PARAM_READWRITE
- |
- G_PARAM_CONSTRUCT_ONLY));
+ g_param_spec_object ("factory",
+ "record factory",
+ "record factory",
+ DAAP_TYPE_RECORD_FACTORY_SIMPLE,
+ G_PARAM_READWRITE
+ |
+ G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_NAME,
g_param_spec_string ("name",
@@ -1135,7 +1138,7 @@ typedef struct
{
DMAPConnection *connection;
DMAPConnectionCallback callback;
- gpointer data;
+ DMAPDb *db;
GDestroyNotify destroy;
} ConnectionResponseData;
@@ -1168,7 +1171,7 @@ connected_cb (DMAPConnection * connection, ConnectionResponseData * rdata)
rdata->callback (rdata->connection,
result,
rdata->connection->priv->last_error_message,
- rdata->data);
+ rdata->db);
}
if (rdata->destroy) {
@@ -1231,8 +1234,8 @@ dmap_connection_setup (DMAPConnection * connection)
// FIXME: it would be nice if this mirrored the use of DMAPMdnsBrowser. That is, connect callback handler to
a signal.
// This would allow Vala to associated a lambda function with the signal.
void
-dmap_connection_connect (DMAPConnection * connection,
- DMAPConnectionCallback callback, gpointer user_data)
+dmap_connection_start (DMAPConnection * connection,
+ DMAPConnectionCallback callback, DMAPDb *db)
{
ConnectionResponseData *rdata;
@@ -1258,7 +1261,7 @@ dmap_connection_connect (DMAPConnection * connection,
rdata = g_new (ConnectionResponseData, 1);
rdata->connection = g_object_ref (connection);
rdata->callback = callback;
- rdata->data = user_data;
+ rdata->db = db;
rdata->destroy = connection_response_data_free;
g_signal_connect (connection, "operation-done",
G_CALLBACK (connected_cb), rdata);
@@ -1291,7 +1294,7 @@ disconnected_cb (DMAPConnection * connection, ConnectionResponseData * rdata)
rdata->callback (rdata->connection,
result,
rdata->connection->priv->last_error_message,
- rdata->data);
+ rdata->db);
}
if (rdata->destroy) {
@@ -1314,7 +1317,7 @@ dmap_connection_finish (DMAPConnection * connection)
void
dmap_connection_disconnect (DMAPConnection * connection,
DMAPConnectionCallback callback,
- gpointer user_data)
+ DMAPDb *db)
{
DMAPConnectionPrivate *priv = connection->priv;
ConnectionResponseData *rdata;
@@ -1336,7 +1339,7 @@ dmap_connection_disconnect (DMAPConnection * connection,
rdata = g_new (ConnectionResponseData, 1);
rdata->connection = g_object_ref (connection);
rdata->callback = callback;
- rdata->data = user_data;
+ rdata->db = db;
rdata->destroy = connection_response_data_free;
g_signal_connect (connection, "operation-done",
@@ -1720,11 +1723,11 @@ dmap_connection_set_property (GObject * object,
priv->name = g_value_dup_string (value);
break;
case PROP_DB:
- priv->db = DMAP_DB (g_value_get_pointer (value));
+ priv->db = DMAP_DB (g_value_get_object (value));
break;
case PROP_FACTORY:
priv->record_factory =
- DMAP_RECORD_FACTORY (g_value_get_pointer (value));
+ DMAP_RECORD_FACTORY (g_value_get_object (value));
break;
case PROP_HOST:
g_free (priv->host);
@@ -1769,10 +1772,10 @@ dmap_connection_get_property (GObject * object,
switch (prop_id) {
case PROP_DB:
- g_value_set_pointer (value, priv->db);
+ g_value_set_object (value, priv->db);
break;
case PROP_FACTORY:
- g_value_set_pointer (value, priv->record_factory);
+ g_value_set_object (value, priv->record_factory);
break;
case PROP_NAME:
g_value_set_string (value, priv->name);
diff --git a/libdmapsharing/dmap-connection.h b/libdmapsharing/dmap-connection.h
index ccf6f00..de33a8a 100644
--- a/libdmapsharing/dmap-connection.h
+++ b/libdmapsharing/dmap-connection.h
@@ -138,7 +138,7 @@ typedef struct
typedef gboolean (*DMAPConnectionCallback) (DMAPConnection * connection,
gboolean result,
const char *reason,
- gpointer user_data);
+ DMAPDb *db);
typedef void (*DMAPResponseHandler) (DMAPConnection * connection,
guint status,
@@ -148,12 +148,21 @@ GType dmap_connection_get_type (void);
gboolean dmap_connection_is_connected (DMAPConnection * connection);
void dmap_connection_setup (DMAPConnection * connection);
-void dmap_connection_connect (DMAPConnection * connection,
- DMAPConnectionCallback callback,
- gpointer user_data);
+
+/**
+ * dmap_connection_start:
+ * @connection: The connection.
+ * @callback: (scope async): The function to call once the connection is complete.
+ * @db: The data to pass to the callback.
+ *
+ * Connect to the remote DMAP share.
+ */
+void dmap_connection_start (DMAPConnection * connection,
+ DMAPConnectionCallback callback,
+ DMAPDb *db);
void dmap_connection_disconnect (DMAPConnection * connection,
DMAPConnectionCallback callback,
- gpointer user_data);
+ DMAPDb *db);
SoupMessageHeaders *dmap_connection_get_headers (DMAPConnection * connection,
const char *uri);
diff --git a/libdmapsharing/dmap-db.c b/libdmapsharing/dmap-db.c
index e7dda13..48448ab 100644
--- a/libdmapsharing/dmap-db.c
+++ b/libdmapsharing/dmap-db.c
@@ -78,7 +78,7 @@ dmap_db_lookup_id_by_location (const DMAPDb * db, const gchar * location)
}
void
-dmap_db_foreach (const DMAPDb * db, GHFunc func, gpointer data)
+dmap_db_foreach (const DMAPDb * db, DMAPIdRecordFunc func, gpointer data)
{
DMAP_DB_GET_INTERFACE (db)->foreach (db, func, data);
}
@@ -245,7 +245,7 @@ compare_record_property (DMAPRecord * record, const gchar * property_name,
}
static void
-apply_filter (gpointer id, DMAPRecord * record, gpointer data)
+apply_filter (guint id, DMAPRecord * record, gpointer data)
{
FilterData *fd;
gboolean accept = FALSE;
@@ -326,7 +326,7 @@ dmap_db_apply_filter (DMAPDb * db, GSList * filter_def)
data.filter_def = filter_def;
data.ht = ht;
- dmap_db_foreach (db, (GHFunc) apply_filter, &data);
+ dmap_db_foreach (db, (DMAPIdRecordFunc) apply_filter, &data);
return data.ht;
}
diff --git a/libdmapsharing/dmap-db.h b/libdmapsharing/dmap-db.h
index 4fd54f1..8049e8d 100644
--- a/libdmapsharing/dmap-db.h
+++ b/libdmapsharing/dmap-db.h
@@ -63,6 +63,16 @@ G_BEGIN_DECLS
typedef struct _DMAPDb DMAPDb;
typedef struct _DMAPDbIface DMAPDbIface;
+/**
+ * DMAPIdRecordFunc:
+ * @id: a DMAP record ID
+ * @record: a #DMAPRecord
+ * @user_data: (closure): user data
+ *
+ * The type of function passed to dmap_db_foreach().
+ */
+typedef void (*DMAPIdRecordFunc) (guint id, DMAPRecord *record, gpointer user_data);
+
struct _DMAPDbIface
{
GTypeInterface parent;
@@ -73,12 +83,10 @@ struct _DMAPDbIface
DMAPRecord *(*lookup_by_id) (const DMAPDb * db, guint id);
guint (*lookup_id_by_location) (const DMAPDb * db,
const gchar * location);
- void (*foreach) (const DMAPDb * db, GHFunc func, gpointer data);
+ void (*foreach) (const DMAPDb * db, DMAPIdRecordFunc func, gpointer data);
gint64 (*count) (const DMAPDb * db);
};
-typedef const char *(*RecordGetValueFunc) (DMAPRecord * record);
-
typedef struct DMAPDbFilterDefinition
{
gchar *key;
@@ -165,12 +173,12 @@ guint dmap_db_lookup_id_by_location (const DMAPDb * db,
/**
* dmap_db_foreach:
* @db: A media 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 media database.
*/
-void dmap_db_foreach (const DMAPDb * db, GHFunc func, gpointer data);
+void dmap_db_foreach (const DMAPDb * db, DMAPIdRecordFunc func, gpointer data);
/**
* dmap_db_count:
diff --git a/libdmapsharing/dmap-share.c b/libdmapsharing/dmap-share.c
index a86cd04..7b1be6a 100644
--- a/libdmapsharing/dmap-share.c
+++ b/libdmapsharing/dmap-share.c
@@ -1554,11 +1554,11 @@ _dmap_share_ctrl_int (DMAPShare * share,
}
static void
-accumulate_mlcl_size_and_ids (gpointer id,
+accumulate_mlcl_size_and_ids (guint id,
DMAPRecord * record,
struct share_bitwise_t *share_bitwise)
{
- share_bitwise->id_list = g_slist_append (share_bitwise->id_list, id);
+ share_bitwise->id_list = g_slist_append (share_bitwise->id_list, GUINT_TO_POINTER (id));
/* Make copy and set mlcl to NULL so real MLCL does not get changed */
struct MLCL_Bits mb_copy = share_bitwise->mb;
@@ -1612,7 +1612,7 @@ write_next_mlit (SoupMessage * message, struct share_bitwise_t *share_bitwise)
mb.share = share_bitwise->mb.share;
DMAP_SHARE_GET_CLASS (share_bitwise->mb.share)->
- add_entry_to_mlcl (share_bitwise->id_list->data,
+ add_entry_to_mlcl (GPOINTER_TO_UINT (share_bitwise->id_list->data),
record, &mb);
data = dmap_structure_serialize (g_node_first_child (mb.mlcl),
&length);
@@ -1871,16 +1871,14 @@ _dmap_share_databases (DMAPShare * share,
g_hash_table_lookup_adapter;
share_bitwise->destroy = (ShareBitwiseDestroyFunc) g_hash_table_destroy;
g_hash_table_foreach (records,
- (GHFunc)
- accumulate_mlcl_size_and_ids,
+ (GHFunc) accumulate_mlcl_size_and_ids,
share_bitwise);
} else {
share_bitwise->db = share->priv->db;
share_bitwise->lookup_by_id = (ShareBitwiseLookupByIdFunc) dmap_db_lookup_by_id;
share_bitwise->destroy = NULL;
dmap_db_foreach (share->priv->db,
- (GHFunc)
- accumulate_mlcl_size_and_ids,
+ (DMAPIdRecordFunc) accumulate_mlcl_size_and_ids,
share_bitwise);
}
@@ -2061,7 +2059,7 @@ _dmap_share_databases (DMAPShare * share,
for (id = keys; id; id = id->next) {
(*
(DMAP_SHARE_GET_CLASS (share)->
- add_entry_to_mlcl)) (id->data,
+ add_entry_to_mlcl)) (GPOINTER_TO_UINT (id->data),
g_hash_table_lookup
(records, id->data),
&mb);
@@ -2083,7 +2081,6 @@ _dmap_share_databases (DMAPShare * share,
DMAP_CC_MLCL);
dmap_db_foreach (share->priv->db,
- (GHFunc)
DMAP_SHARE_GET_CLASS
(share)->add_entry_to_mlcl,
&mb);
@@ -2109,7 +2106,6 @@ _dmap_share_databases (DMAPShare * share,
DMAP_CC_MLCL);
dmap_db_foreach (entries,
- (GHFunc)
DMAP_SHARE_GET_CLASS
(share)->add_entry_to_mlcl,
&mb);
diff --git a/libdmapsharing/dmap-share.h b/libdmapsharing/dmap-share.h
index b88eb3d..e0a5448 100644
--- a/libdmapsharing/dmap-share.h
+++ b/libdmapsharing/dmap-share.h
@@ -108,8 +108,7 @@ typedef struct
void (*message_add_standard_headers) (DMAPShare * share,
SoupMessage * msg);
struct DMAPMetaDataMap *(*get_meta_data_map) (DMAPShare * share);
- void (*add_entry_to_mlcl) (gpointer id,
- DMAPRecord * record, gpointer mb);
+ void (*add_entry_to_mlcl) (guint id, DMAPRecord * record, gpointer mb);
void (*databases_browse_xxx) (DMAPShare * share,
SoupServer * server,
SoupMessage * msg,
diff --git a/libdmapsharing/dpap-share.c b/libdmapsharing/dpap-share.c
index 827e6e8..fe02ad7 100644
--- a/libdmapsharing/dpap-share.c
+++ b/libdmapsharing/dpap-share.c
@@ -74,7 +74,7 @@ static void databases_items_xxx (DMAPShare * share,
GHashTable * query,
SoupClientContext * context);
static struct DMAPMetaDataMap *get_meta_data_map (DMAPShare * share);
-static void add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer mb);
+static void add_entry_to_mlcl (guint id, DMAPRecord * record, gpointer mb);
#define DPAP_TYPE_OF_SERVICE "_dpap._tcp"
#define DPAP_PORT 8770
@@ -348,7 +348,7 @@ file_to_mmap (const char *location)
}
static void
-add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer _mb)
+add_entry_to_mlcl (guint id, DMAPRecord * record, gpointer _mb)
{
GNode *mlit;
struct MLCL_Bits *mb = (struct MLCL_Bits *) _mb;
@@ -359,8 +359,7 @@ add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer _mb)
dmap_structure_add (mlit, DMAP_CC_MIKD,
(gchar) DPAP_ITEM_KIND_PHOTO);
if (_dmap_share_client_requested (mb->bits, ITEM_ID))
- dmap_structure_add (mlit, DMAP_CC_MIID,
- GPOINTER_TO_UINT (id));
+ dmap_structure_add (mlit, DMAP_CC_MIID, id);
if (_dmap_share_client_requested (mb->bits, ITEM_NAME)) {
gchar *filename = NULL;
@@ -372,8 +371,7 @@ add_entry_to_mlcl (gpointer id, DMAPRecord * record, gpointer _mb)
g_debug ("Filename requested but not available");
}
if (_dmap_share_client_requested (mb->bits, PERSISTENT_ID))
- dmap_structure_add (mlit, DMAP_CC_MPER,
- GPOINTER_TO_UINT (id));
+ dmap_structure_add (mlit, DMAP_CC_MPER, id);
if (TRUE) {
/* dpap-sharp claims iPhoto '08 will not show thumbnails without PASP
* and this does seem to be the case when testing. */
diff --git a/tests/dmapcopy.vala b/tests/dmapcopy.vala
index 190ac39..9582a7c 100644
--- a/tests/dmapcopy.vala
+++ b/tests/dmapcopy.vala
@@ -58,17 +58,15 @@ private class DPAPCopy {
return true;
}
- private void service_added_cb (DMAP.MdnsBrowserService *service) {
- connection = (DMAP.Connection) new DPAP.Connection (service->service_name, service->host,
service->port, db, factory);
- connection.connect (connected_cb);
- }
-
public DPAPCopy () throws GLib.Error {
db = new ValaDMAPDb ();
factory = new ValaDPAPRecordFactory ();
- browser = new DMAP.MdnsBrowser (DMAP.MdnsBrowserServiceType.DPAP);
- browser.service_added.connect (service_added_cb);
+ browser = new DMAP.MdnsBrowser (DMAP.MdnsServiceType.DPAP);
+ browser.service_added.connect ((browser, service) => {
+ connection = (DMAP.Connection) new DPAP.Connection (service.service_name,
service.host, service.port, db, factory);
+ connection.connect (connected_cb);
+ });
browser.start ();
}
}
diff --git a/tests/dpapview.vala b/tests/dpapview.vala
index b7bdad0..181f2b1 100644
--- a/tests/dpapview.vala
+++ b/tests/dpapview.vala
@@ -49,11 +49,6 @@ private class DPAPViewer {
return true;
}
- private void service_added_cb (DMAP.MdnsBrowserService *service) {
- connection = (DMAP.Connection) new DPAP.Connection (service->service_name, service->host,
service->port, db, factory);
- connection.connect (connected_cb);
- }
-
public DPAPViewer (Gtk.Builder builder) throws GLib.Error {
builder.connect_signals (this);
@@ -68,8 +63,11 @@ private class DPAPViewer {
widget.show_all ();
- browser = new DMAP.MdnsBrowser (DMAP.MdnsBrowserServiceType.DPAP);
- browser.service_added.connect (service_added_cb);
+ browser = new DMAP.MdnsBrowser (DMAP.MdnsServiceType.DPAP);
+ browser.service_added.connect ((browser, service) => {
+ connection = (DMAP.Connection) new DPAP.Connection (service.service_name,
service.host, service.port, db, factory);
+ connection.connect (connected_cb);
+ });
browser.start ();
}
}
diff --git a/tests/test-dmap-client-python b/tests/test-dmap-client-python
index 1e750d6..69e8d0d 100755
--- a/tests/test-dmap-client-python
+++ b/tests/test-dmap-client-python
@@ -1,30 +1,52 @@
#!/usr/bin/env python
+# FIXME: dmap-connection.c presently has DAAP_TYPE_SIMPLE_RECORD_FACTORY hard coded.
+
+from gi.repository import GObject
from gi.repository import GLib
from gi.repository import DMAP
from gi.repository import DAAP
-def connected_cb (self, result, reason, db):
- print reason
+class PyDMAPDb(GObject.GObject, DMAP.Db):
+ db = {}
+ nextId = 0
+
+ def do_foreach(self, func, user_data=None):
+ for id in self.db:
+ func (id, self.db[id])
+
+ def do_add(self, record):
+ self.db[self.nextId] = record
+ self.nextId += 1
+
+ def __init__(self):
+ super(PyDMAPDb, self).__init__()
+
+def print_record(id, record, user_data):
+ title = record.get_property("title")
+ has_video = record.get_property("has-video")
+ artist = record.get_property("songartist")
+
+ print id, artist, title, has_video
+
+def connected_cb(self, result, reason, db):
+ db.foreach(print_record, None)
+
+def service_added_cb(self, service, user_data):
+ service_name = service.get_property("service-name")
+ name = service.get_property("name")
+ host = service.get_property("host")
+ port = service.get_property("port")
-def service_added_cb (self, service, user_data):
- service_name = service.get_property ("service-name")
- name = service.get_property ("name")
- host = service.get_property ("host")
- port = service.get_property ("port")
+ factory = DAAP.RecordFactorySimple()
+ db = PyDMAPDb()
- print service_name
- print name
- print host
- print port
+ connection = DAAP.Connection.new(service_name, host, port, db, factory)
- # implement a DMAP database
- # implement a DAAP record factory
- # daap_connection_new
- # dmap_connection_connect
+ connection.start(connected_cb, db)
browser = DMAP.MdnsBrowser.new(DMAP.MdnsServiceType.DAAP)
browser.connect("service-added", service_added_cb, None)
browser.start()
-GLib.MainLoop().run ()
+GLib.MainLoop().run()
diff --git a/tests/test-dmap-client.c b/tests/test-dmap-client.c
index 57bc10e..427895b 100644
--- a/tests/test-dmap-client.c
+++ b/tests/test-dmap-client.c
@@ -123,7 +123,7 @@ service_added_cb (DMAPMdnsBrowser *browser,
conn = DMAP_CONNECTION (dpap_connection_new (name, host, port, db, factory));
}
g_signal_connect (DMAP_CONNECTION (conn), "authenticate", G_CALLBACK(authenticate_cb), NULL);
- dmap_connection_connect (DMAP_CONNECTION (conn), (DMAPConnectionCallback) connected_cb, db);
+ dmap_connection_start (DMAP_CONNECTION (conn), (DMAPConnectionCallback) connected_cb, db);
}
int main(int argc, char **argv)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]