[grilo-plugins] dmap: add support for password-protected DAAP and DPAP shares



commit df4038cd3bf55ac111b933488adf9a9b018f7b99
Author: W. Michael Petullo <mike flyn org>
Date:   Fri Nov 8 12:46:01 2019 -0500

    dmap: add support for password-protected DAAP and DPAP shares
    
    Signed-off-by: W. Michael Petullo <mike flyn org>

 meson.build                        |  2 +-
 src/dmap/grl-common.c              | 23 +++++++--
 src/dmap/grl-common.h              |  4 +-
 src/dmap/grl-daap-db.c             | 49 +++++++++++---------
 src/dmap/grl-daap-db.h             | 22 ++++-----
 src/dmap/grl-daap-record-factory.c | 16 +++----
 src/dmap/grl-daap-record-factory.h | 18 ++++----
 src/dmap/grl-daap-record.c         | 28 +++++------
 src/dmap/grl-daap-record.h         | 22 ++++-----
 src/dmap/grl-daap.c                | 95 +++++++++++++++++++++++++++-----------
 src/dmap/grl-dpap-db.c             | 52 ++++++++++++---------
 src/dmap/grl-dpap-db.h             | 22 ++++-----
 src/dmap/grl-dpap-record-factory.c | 16 ++++---
 src/dmap/grl-dpap-record-factory.h | 18 ++++----
 src/dmap/grl-dpap-record.c         | 38 +++++++--------
 src/dmap/grl-dpap-record.h         | 22 ++++-----
 src/dmap/grl-dpap.c                | 95 +++++++++++++++++++++++++++-----------
 17 files changed, 323 insertions(+), 219 deletions(-)
---
diff --git a/meson.build b/meson.build
index 5efbeebc..9f88e0f5 100644
--- a/meson.build
+++ b/meson.build
@@ -62,7 +62,7 @@ gstreamer_dep = dependency('gstreamer-1.0', required: false)
 gthread_dep = dependency('gthread-2.0', required: false)
 json_glib_dep = dependency('json-glib-1.0', required: false)
 libarchive_dep = dependency('libarchive', required: false)
-libdmapsharing_dep = dependency('libdmapsharing-3.0', version: '>= 2.9.12', required: false)
+libdmapsharing_dep = dependency('libdmapsharing-4.0', version: '>= 3.9.4', required: false)
 libgdata_dep = dependency('libgdata', version: '>= 0.9.1', required: false)
 libmediaart_dep = dependency('libmediaart-2.0', required: false)
 libsoup_dep = dependency('libsoup-2.4', required: false)
diff --git a/src/dmap/grl-common.c b/src/dmap/grl-common.c
index fa92df9c..66d3e43a 100644
--- a/src/dmap/grl-common.c
+++ b/src/dmap/grl-common.c
@@ -36,10 +36,23 @@
 #include "grl-common.h"
 
 gchar *
-grl_dmap_build_url (DMAPMdnsBrowserService *service)
+grl_dmap_build_url (DmapMdnsService *service)
 {
-  return g_strdup_printf ("%s://%s:%u",
-                          service->service_name,
-                          service->host,
-                          service->port);
+  gchar *url = NULL;
+  gchar *service_name, *host;
+  guint port;
+
+  g_object_get(service, "service-name", &service_name,
+                        "host", &host,
+                        "port", &port, NULL);
+
+  url = g_strdup_printf ("%s://%s:%u",
+                          service_name,
+                          host,
+                          port);
+
+  g_free(service_name);
+  g_free(host);
+
+  return url;
 }
diff --git a/src/dmap/grl-common.h b/src/dmap/grl-common.h
index e9c83278..8e5a3a66 100644
--- a/src/dmap/grl-common.h
+++ b/src/dmap/grl-common.h
@@ -41,9 +41,9 @@ typedef struct {
 
 typedef struct {
   ResultCbAndArgs cb;
-  DMAPDb *db;
+  DmapDb *db;
 } ResultCbAndArgsAndDb;
 
-gchar *grl_dmap_build_url (DMAPMdnsBrowserService *service);
+gchar *grl_dmap_build_url (DmapMdnsService *service);
 
 #endif /* _GRL_COMMON_H_ */
diff --git a/src/dmap/grl-daap-db.c b/src/dmap/grl-daap-db.c
index 66210945..bc6a9500 100644
--- a/src/dmap/grl-daap-db.c
+++ b/src/dmap/grl-daap-db.c
@@ -66,7 +66,7 @@
 /* Media ID's start at max and go down. Container ID's start at 1 and go up. */
 static guint nextid = G_MAXINT; /* NOTE: this should be G_MAXUINT, but iPhoto can't handle it. */
 
-struct GrlDAAPDbPrivate {
+struct GrlDaapDbPrivate {
   /* Contains each album container (tracked with albums hash table) */
   GrlMedia *albums_container;
 
@@ -95,31 +95,31 @@ container_equal (gconstpointer a, gconstpointer b)
   return g_str_equal (grl_media_get_id (GRL_MEDIA (a)), grl_media_get_id (GRL_MEDIA (b)));
 }
 
-GrlDAAPDb *
+GrlDaapDb *
 grl_daap_db_new (void)
 {
-  GrlDAAPDb *db = g_object_new (TYPE_GRL_DAAP_DB, NULL);
+  GrlDaapDb *db = g_object_new (TYPE_GRL_DAAP_DB, NULL);
 
   return db;
 }
 
-static DMAPRecord *
-grl_daap_db_lookup_by_id (const DMAPDb *db, guint id)
+static DmapRecord *
+grl_daap_db_lookup_by_id (const DmapDb *db, guint id)
 {
   g_error ("Not implemented");
   return NULL;
 }
 
 static void
-grl_daap_db_foreach (const DMAPDb *db,
-                        GHFunc func,
-                        gpointer data)
+grl_daap_db_foreach (const DmapDb *db,
+                     DmapIdRecordFunc func,
+                     gpointer data)
 {
   g_error ("Not implemented");
 }
 
 static gint64
-grl_daap_db_count (const DMAPDb *db)
+grl_daap_db_count (const DmapDb *db)
 {
   g_error ("Not implemented");
   return 0;
@@ -151,13 +151,13 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
 }
 
 static guint
-grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
+grl_daap_db_add (DmapDb *_db, DmapRecord *_record, GError **error)
 {
   g_assert (IS_GRL_DAAP_DB (_db));
-  g_assert (IS_DAAP_RECORD (_record));
+  g_assert (IS_DMAP_AV_RECORD (_record));
 
-  GrlDAAPDb *db = GRL_DAAP_DB (_db);
-  DAAPRecord *record = DAAP_RECORD (_record);
+  GrlDaapDb *db = GRL_DAAP_DB (_db);
+  DmapAvRecord *record = DMAP_AV_RECORD (_record);
 
   gint   duration = 0;
   gint32  bitrate = 0,
@@ -242,6 +242,11 @@ grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
 
   g_free (id_s);
   g_object_unref (media);
+  g_free (album);
+  g_free (artist);
+  g_free (genre);
+  g_free (title);
+  g_free (url);
 
   return --nextid;
 }
@@ -253,7 +258,7 @@ same_media (GrlMedia *a, GrlMedia *b)
 }
 
 void
-grl_daap_db_browse (GrlDAAPDb *db,
+grl_daap_db_browse (GrlDaapDb *db,
                     GrlMedia *container,
                     GrlSource *source,
                     guint op_id,
@@ -312,7 +317,7 @@ done:
 }
 
 void
-grl_daap_db_search (GrlDAAPDb *db,
+grl_daap_db_search (GrlDaapDb *db,
                     GrlSource *source,
                     guint op_id,
                     GHRFunc predicate,
@@ -364,7 +369,7 @@ grl_daap_db_search (GrlDAAPDb *db,
 static void
 dmap_db_interface_init (gpointer iface, gpointer data)
 {
-  DMAPDbIface *daap_db = iface;
+  DmapDbInterface *daap_db = iface;
 
   g_assert (G_TYPE_FROM_INTERFACE (daap_db) == DMAP_TYPE_DB);
 
@@ -374,8 +379,8 @@ dmap_db_interface_init (gpointer iface, gpointer data)
   daap_db->count = grl_daap_db_count;
 }
 
-G_DEFINE_TYPE_WITH_CODE (GrlDAAPDb, grl_daap_db, G_TYPE_OBJECT,
-                         G_ADD_PRIVATE (GrlDAAPDb)
+G_DEFINE_TYPE_WITH_CODE (GrlDaapDb, grl_daap_db, G_TYPE_OBJECT,
+                         G_ADD_PRIVATE (GrlDaapDb)
                          G_IMPLEMENT_INTERFACE (DMAP_TYPE_DB, dmap_db_interface_init))
 
 static GObject*
@@ -389,7 +394,7 @@ grl_daap_db_constructor (GType type, guint n_construct_params, GObjectConstructP
 }
 
 static void
-grl_daap_db_init (GrlDAAPDb *db)
+grl_daap_db_init (GrlDaapDb *db)
 {
   db->priv = grl_daap_db_get_instance_private (db);
 
@@ -413,9 +418,9 @@ grl_daap_db_init (GrlDAAPDb *db)
 static void
 grl_daap_db_finalize (GObject *object)
 {
-  GrlDAAPDb *db = GRL_DAAP_DB (object);
+  GrlDaapDb *db = GRL_DAAP_DB (object);
 
-  GRL_DEBUG ("Finalizing GrlDAAPDb");
+  GRL_DEBUG ("Finalizing GrlDaapDb");
 
   g_object_unref (db->priv->albums_container);
   g_object_unref (db->priv->artists_container);
@@ -452,7 +457,7 @@ grl_daap_db_get_property (GObject *object,
 
 
 static void
-grl_daap_db_class_init (GrlDAAPDbClass *klass)
+grl_daap_db_class_init (GrlDaapDbClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
diff --git a/src/dmap/grl-daap-db.h b/src/dmap/grl-daap-db.h
index f52a9b5f..63816d09 100644
--- a/src/dmap/grl-daap-db.h
+++ b/src/dmap/grl-daap-db.h
@@ -32,12 +32,12 @@ G_BEGIN_DECLS
 #define GRL_DAAP_DB(o)                             \
   (G_TYPE_CHECK_INSTANCE_CAST ((o),                   \
                                TYPE_GRL_DAAP_DB,   \
-                               GrlDAAPDb))
+                               GrlDaapDb))
 
 #define GRL_DAAP_DB_CLASS(k)                 \
   (G_TYPE_CHECK_CLASS_CAST((k),                 \
                            TYPE_GRL_DAAP_DB, \
-                           GrlDAAPDbClass))
+                           GrlDaapDbClass))
 #define IS_GRL_DAAP_DB(o)                          \
   (G_TYPE_CHECK_INSTANCE_TYPE((o),                    \
                               TYPE_GRL_DAAP_DB))
@@ -48,25 +48,25 @@ G_BEGIN_DECLS
 #define GRL_DAAP_DB_GET_CLASS(o)                \
   (G_TYPE_INSTANCE_GET_CLASS((o),                  \
                              TYPE_GRL_DAAP_DB,  \
-                             GrlDAAPDbClass))
+                             GrlDaapDbClass))
 
 #define GRL_DAAP_DB_GET_PRIVATE(o)                 \
   (G_TYPE_INSTANCE_GET_PRIVATE((o),                   \
                                TYPE_GRL_DAAP_DB,   \
-                               GrlDAAPDbPrivate))
+                               GrlDaapDbPrivate))
 
-typedef struct GrlDAAPDbPrivate GrlDAAPDbPrivate;
+typedef struct GrlDaapDbPrivate GrlDaapDbPrivate;
 
 typedef struct {
   GObject parent;
-  GrlDAAPDbPrivate *priv;
-} GrlDAAPDb;
+  GrlDaapDbPrivate *priv;
+} GrlDaapDb;
 
 typedef struct {
   GObjectClass parent;
-} GrlDAAPDbClass;
+} GrlDaapDbClass;
 
-void grl_daap_db_browse (GrlDAAPDb *db,
+void grl_daap_db_browse (GrlDaapDb *db,
                          GrlMedia *container,
                          GrlSource *source,
                          guint op_id,
@@ -75,7 +75,7 @@ void grl_daap_db_browse (GrlDAAPDb *db,
                          GrlSourceResultCb func,
                          gpointer user_data);
 
-void grl_daap_db_search (GrlDAAPDb *db,
+void grl_daap_db_search (GrlDaapDb *db,
                          GrlSource *source,
                          guint op_id,
                          GHRFunc predicate,
@@ -83,7 +83,7 @@ void grl_daap_db_search (GrlDAAPDb *db,
                          GrlSourceResultCb func,
                          gpointer user_data);
 
-GrlDAAPDb *grl_daap_db_new (void);
+GrlDaapDb *grl_daap_db_new (void);
 
 GType grl_daap_db_get_type (void);
 
diff --git a/src/dmap/grl-daap-record-factory.c b/src/dmap/grl-daap-record-factory.c
index e986394b..7bf5ca28 100644
--- a/src/dmap/grl-daap-record-factory.c
+++ b/src/dmap/grl-daap-record-factory.c
@@ -1,5 +1,5 @@
 /*
- * DAAPRecord factory class
+ * DmapAvRecord factory class
  *
  * Copyright (C) 2008 W. Michael Petullo <mike flyn org>
  *
@@ -21,37 +21,37 @@
 #include "grl-daap-record-factory.h"
 #include "grl-daap-record.h"
 
-DMAPRecord *
-grl_daap_record_factory_create  (DMAPRecordFactory *factory, gpointer user_data)
+DmapRecord *
+grl_daap_record_factory_create  (DmapRecordFactory *factory, gpointer user_data, GError **error)
 {
        return DMAP_RECORD (grl_daap_record_new ());
 }
 
 static void
-grl_daap_record_factory_init (GrlDAAPRecordFactory *factory)
+grl_daap_record_factory_init (GrlDaapRecordFactory *factory)
 {
 }
 
 static void
-grl_daap_record_factory_class_init (GrlDAAPRecordFactoryClass *klass)
+grl_daap_record_factory_class_init (GrlDaapRecordFactoryClass *klass)
 {
 }
 
 static void
 grl_daap_record_factory_interface_init (gpointer iface, gpointer data)
 {
-       DMAPRecordFactoryIface *factory = iface;
+       DmapRecordFactoryInterface *factory = iface;
 
        g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
 
        factory->create = grl_daap_record_factory_create;
 }
 
-G_DEFINE_TYPE_WITH_CODE (GrlDAAPRecordFactory, grl_daap_record_factory, G_TYPE_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (GrlDaapRecordFactory, grl_daap_record_factory, G_TYPE_OBJECT,
                         G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD_FACTORY,
                                                grl_daap_record_factory_interface_init))
 
-GrlDAAPRecordFactory *
+GrlDaapRecordFactory *
 grl_daap_record_factory_new (void)
 {
        return SIMPLE_DAAP_RECORD_FACTORY (g_object_new (TYPE_SIMPLE_DAAP_RECORD_FACTORY, NULL));
diff --git a/src/dmap/grl-daap-record-factory.h b/src/dmap/grl-daap-record-factory.h
index 514713a8..698b22c6 100644
--- a/src/dmap/grl-daap-record-factory.h
+++ b/src/dmap/grl-daap-record-factory.h
@@ -1,5 +1,5 @@
 /*
- * GrlDAAPRecord factory class
+ * GrlDaapRecord factory class
  *
  * Copyright (C) 2008 W. Michael Petullo <mike flyn org>
  *
@@ -31,12 +31,12 @@ G_BEGIN_DECLS
 #define SIMPLE_DAAP_RECORD_FACTORY(o)                          \
   (G_TYPE_CHECK_INSTANCE_CAST((o),                             \
                               TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
-                              GrlDAAPRecordFactory))
+                              GrlDaapRecordFactory))
 
 #define SIMPLE_DAAP_RECORD_FACTORY_CLASS(k)                 \
   (G_TYPE_CHECK_CLASS_CAST((k),                             \
                            TYPE_SIMPLE_DAAP_RECORD_FACTORY, \
-                           GrlDAAPRecordFactoryClass))
+                           GrlDaapRecordFactoryClass))
 
 #define IS_SIMPLE_DAAP_RECORD_FACTORY(o)                          \
   (G_TYPE_CHECK_INSTANCE_TYPE((o),                                \
@@ -49,23 +49,23 @@ G_BEGIN_DECLS
 #define SIMPLE_DAAP_RECORD_FACTORY_GET_CLASS(o)                \
   (G_TYPE_INSTANCE_GET_CLASS((o),                              \
                              TYPE_SIMPLE_DAAP_RECORD_FACTORY,  \
-                             GrlDAAPRecordFactoryClass))
+                             GrlDaapRecordFactoryClass))
 
-typedef struct GrlDAAPRecordFactoryPrivate GrlDAAPRecordFactoryPrivate;
+typedef struct GrlDaapRecordFactoryPrivate GrlDaapRecordFactoryPrivate;
 
 typedef struct {
   GObject parent;
-} GrlDAAPRecordFactory;
+} GrlDaapRecordFactory;
 
 typedef struct {
   GObjectClass parent;
-} GrlDAAPRecordFactoryClass;
+} GrlDaapRecordFactoryClass;
 
 GType                    grl_daap_record_factory_get_type (void);
 
-GrlDAAPRecordFactory *grl_daap_record_factory_new      (void);
+GrlDaapRecordFactory *grl_daap_record_factory_new      (void);
 
-DMAPRecord              *grl_daap_record_factory_create   (DMAPRecordFactory *factory, gpointer user_data);
+DmapRecord              *grl_daap_record_factory_create   (DmapRecordFactory *factory, gpointer user_data, 
GError **error);
 
 #endif /* __SIMPLE_DAAP_RECORD_FACTORY */
 
diff --git a/src/dmap/grl-daap-record.c b/src/dmap/grl-daap-record.c
index d1721d21..6edba331 100644
--- a/src/dmap/grl-daap-record.c
+++ b/src/dmap/grl-daap-record.c
@@ -22,7 +22,7 @@
 
 #include "grl-daap-record.h"
 
-struct GrlDAAPRecordPrivate {
+struct GrlDaapRecordPrivate {
   guint64 filesize;
   char *location;
   char *format;
@@ -73,7 +73,7 @@ grl_daap_record_set_property (GObject *object,
                                  const GValue *value,
                                  GParamSpec *pspec)
 {
-  GrlDAAPRecord *record = SIMPLE_DAAP_RECORD (object);
+  GrlDaapRecord *record = SIMPLE_DAAP_RECORD (object);
 
   switch (prop_id) {
   case PROP_LOCATION:
@@ -155,7 +155,7 @@ grl_daap_record_get_property (GObject *object,
                                  GValue *value,
                                  GParamSpec *pspec)
 {
-  GrlDAAPRecord *record = SIMPLE_DAAP_RECORD (object);
+  GrlDaapRecord *record = SIMPLE_DAAP_RECORD (object);
 
   switch (prop_id) {
   case PROP_LOCATION:
@@ -223,14 +223,14 @@ grl_daap_record_get_property (GObject *object,
   }
 }
 
-GrlDAAPRecord *
+GrlDaapRecord *
 grl_daap_record_new (void)
 {
   return SIMPLE_DAAP_RECORD (g_object_new (TYPE_SIMPLE_DAAP_RECORD, NULL));
 }
 
 GInputStream *
-grl_daap_record_read (DAAPRecord *record, GError **error)
+grl_daap_record_read (DmapAvRecord *record, GError **error)
 {
   GFile *file;
   GInputStream *stream;
@@ -244,7 +244,7 @@ grl_daap_record_read (DAAPRecord *record, GError **error)
 }
 
 static void
-grl_daap_record_init (GrlDAAPRecord *record)
+grl_daap_record_init (GrlDaapRecord *record)
 {
   record->priv = SIMPLE_DAAP_RECORD_GET_PRIVATE (record);
 }
@@ -252,7 +252,7 @@ grl_daap_record_init (GrlDAAPRecord *record)
 static void grl_daap_record_finalize (GObject *object);
 
 static void
-grl_daap_record_class_init (GrlDAAPRecordClass *klass)
+grl_daap_record_class_init (GrlDaapRecordClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
@@ -284,9 +284,9 @@ grl_daap_record_class_init (GrlDAAPRecordClass *klass)
 static void
 grl_daap_record_daap_iface_init (gpointer iface, gpointer data)
 {
-  DAAPRecordIface *daap_record = iface;
+  DmapAvRecordInterface *daap_record = iface;
 
-  g_assert (G_TYPE_FROM_INTERFACE (daap_record) == DAAP_TYPE_RECORD);
+  g_assert (G_TYPE_FROM_INTERFACE (daap_record) == DMAP_TYPE_AV_RECORD);
 
   daap_record->read = grl_daap_record_read;
 }
@@ -294,21 +294,21 @@ grl_daap_record_daap_iface_init (gpointer iface, gpointer data)
 static void
 grl_daap_record_dmap_iface_init (gpointer iface, gpointer data)
 {
-  DMAPRecordIface *dmap_record = iface;
+  DmapRecordInterface *dmap_record = iface;
 
   g_assert (G_TYPE_FROM_INTERFACE (dmap_record) == DMAP_TYPE_RECORD);
 }
 
 
-G_DEFINE_TYPE_WITH_CODE (GrlDAAPRecord, grl_daap_record, G_TYPE_OBJECT,
-                         G_ADD_PRIVATE (GrlDAAPRecord)
-                         G_IMPLEMENT_INTERFACE (DAAP_TYPE_RECORD, grl_daap_record_daap_iface_init)
+G_DEFINE_TYPE_WITH_CODE (GrlDaapRecord, grl_daap_record, G_TYPE_OBJECT,
+                         G_ADD_PRIVATE (GrlDaapRecord)
+                         G_IMPLEMENT_INTERFACE (DMAP_TYPE_AV_RECORD, grl_daap_record_daap_iface_init)
                          G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD, grl_daap_record_dmap_iface_init))
 
 static void
 grl_daap_record_finalize (GObject *object)
 {
-  GrlDAAPRecord *record = SIMPLE_DAAP_RECORD (object);
+  GrlDaapRecord *record = SIMPLE_DAAP_RECORD (object);
 
   g_free (record->priv->location);
   g_free (record->priv->title);
diff --git a/src/dmap/grl-daap-record.h b/src/dmap/grl-daap-record.h
index 59558c4f..ee3f0854 100644
--- a/src/dmap/grl-daap-record.h
+++ b/src/dmap/grl-daap-record.h
@@ -31,12 +31,12 @@ G_BEGIN_DECLS
 #define SIMPLE_DAAP_RECORD(o)                            \
   (G_TYPE_CHECK_INSTANCE_CAST((o),                       \
                               TYPE_SIMPLE_DAAP_RECORD,   \
-                              GrlDAAPRecord))
+                              GrlDaapRecord))
 
 #define SIMPLE_DAAP_RECORD_CLASS(k)                   \
   (G_TYPE_CHECK_CLASS_CAST((k),                       \
                            TYPE_SIMPLE_DAAP_RECORD,   \
-                           GrlDAAPRecordClass))
+                           GrlDaapRecordClass))
 
 #define IS_SIMPLE_DAAP_RECORD(o)                         \
   (G_TYPE_CHECK_INSTANCE_TYPE((o),                       \
@@ -49,29 +49,29 @@ G_BEGIN_DECLS
 #define SIMPLE_DAAP_RECORD_GET_CLASS(o)               \
   (G_TYPE_INSTANCE_GET_CLASS((o),                     \
                              TYPE_SIMPLE_DAAP_RECORD, \
-                             GrlDAAPRecordClass))
+                             GrlDaapRecordClass))
 
 #define SIMPLE_DAAP_RECORD_GET_PRIVATE(o)                \
   (G_TYPE_INSTANCE_GET_PRIVATE((o),                      \
                                TYPE_SIMPLE_DAAP_RECORD,  \
-                               GrlDAAPRecordPrivate))
+                               GrlDaapRecordPrivate))
 
-typedef struct GrlDAAPRecordPrivate GrlDAAPRecordPrivate;
+typedef struct GrlDaapRecordPrivate GrlDaapRecordPrivate;
 
 typedef struct {
   GObject parent;
-  GrlDAAPRecordPrivate *priv;
-} GrlDAAPRecord;
+  GrlDaapRecordPrivate *priv;
+} GrlDaapRecord;
 
 typedef struct {
   GObjectClass parent;
-} GrlDAAPRecordClass;
+} GrlDaapRecordClass;
 
 GType grl_daap_record_get_type (void);
 
-GrlDAAPRecord *grl_daap_record_new    (void);
-GInputStream     *grl_daap_record_read   (DAAPRecord *record, GError **error);
-gint              grl_daap_record_get_id (DAAPRecord *record);
+GrlDaapRecord *grl_daap_record_new    (void);
+GInputStream     *grl_daap_record_read   (DmapAvRecord *record, GError **error);
+gint              grl_daap_record_get_id (DmapAvRecord *record);
 
 #endif /* __SIMPLE_DAAP_RECORD */
 
diff --git a/src/dmap/grl-daap.c b/src/dmap/grl-daap.c
index 13cc7e36..2562d080 100644
--- a/src/dmap/grl-daap.c
+++ b/src/dmap/grl-daap.c
@@ -52,12 +52,12 @@ GRL_LOG_DOMAIN_STATIC(daap_log_domain);
 /* --- Grilo DAAP Private --- */
 
 struct _GrlDaapSourcePrivate {
-  DMAPMdnsBrowserService *service;
+  DmapMdnsService *service;
 };
 
 /* --- Data types --- */
 
-static GrlDaapSource *grl_daap_source_new (DMAPMdnsBrowserService *service);
+static GrlDaapSource *grl_daap_source_new (DmapMdnsService *service);
 
 static void grl_daap_source_finalize (GObject *object);
 
@@ -74,16 +74,16 @@ static void grl_daap_source_search (GrlSource *source,
                                     GrlSourceSearchSpec *ss);
 
 
-static void grl_daap_service_added_cb (DMAPMdnsBrowser *browser,
-                                       DMAPMdnsBrowserService *service,
+static void grl_daap_service_added_cb (DmapMdnsBrowser *browser,
+                                       DmapMdnsService *service,
                                        GrlPlugin *plugin);
 
-static void grl_daap_service_removed_cb (DMAPMdnsBrowser *browser,
+static void grl_daap_service_removed_cb (DmapMdnsBrowser *browser,
                                          const gchar *service_name,
                                          GrlPlugin *plugin);
 
 /* ===================== Globals  ======================= */
-static DMAPMdnsBrowser *browser;
+static DmapMdnsBrowser *browser;
 /* Maps URIs to DBs */
 static GHashTable *connections;
 /* Map DAAP services to Grilo media sources */
@@ -106,7 +106,7 @@ grl_daap_plugin_init (GrlRegistry *registry,
   bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
   bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 
-  browser     = dmap_mdns_browser_new (DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP);
+  browser     = dmap_mdns_browser_new (DMAP_MDNS_SERVICE_TYPE_DAAP);
   connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
   sources     = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
 
@@ -153,8 +153,10 @@ GRL_PLUGIN_DEFINE (GRL_MAJOR,
 G_DEFINE_TYPE_WITH_PRIVATE (GrlDaapSource, grl_daap_source, GRL_TYPE_SOURCE)
 
 static GrlDaapSource *
-grl_daap_source_new (DMAPMdnsBrowserService *service)
+grl_daap_source_new (DmapMdnsService *service)
 {
+  gchar *name;
+  gchar *service_name;
   gchar *source_desc;
   gchar *source_id;
 
@@ -162,12 +164,16 @@ grl_daap_source_new (DMAPMdnsBrowserService *service)
 
   GRL_DEBUG ("grl_daap_source_new");
 
-  source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, service->name);
-  source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, service->name);
+  g_object_get(service, "name", &name,
+                        "service-name", &service_name,
+                         NULL);
+
+  source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, name);
+  source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, name);
 
   source = g_object_new (GRL_DAAP_SOURCE_TYPE,
                          "source-id",   source_id,
-                         "source-name", service->name,
+                         "source-name", service_name,
                          "source-desc", source_desc,
                          "supported-media", GRL_SUPPORTED_MEDIA_AUDIO,
                          NULL);
@@ -176,6 +182,8 @@ grl_daap_source_new (DMAPMdnsBrowserService *service)
 
   g_free (source_desc);
   g_free (source_id);
+  g_free (service_name);
+  g_free (name);
 
   return source;
 }
@@ -236,7 +244,7 @@ grl_daap_do_search (ResultCbAndArgsAndDb *cb_and_db)
 }
 
 static void
-browse_connected_cb (DMAPConnection       *connection,
+browse_connected_cb (DmapConnection       *connection,
                      gboolean              result,
                      const char           *reason,
                      ResultCbAndArgsAndDb *cb_and_db)
@@ -261,7 +269,7 @@ browse_connected_cb (DMAPConnection       *connection,
 }
 
 static void
-search_connected_cb (DMAPConnection       *connection,
+search_connected_cb (DmapConnection       *connection,
                      gboolean              result,
                      const char           *reason,
                      ResultCbAndArgsAndDb *cb_and_db)
@@ -286,8 +294,8 @@ search_connected_cb (DMAPConnection       *connection,
 }
 
 static void
-grl_daap_service_added_cb (DMAPMdnsBrowser *browser,
-                           DMAPMdnsBrowserService *service,
+grl_daap_service_added_cb (DmapMdnsBrowser *browser,
+                           DmapMdnsService *service,
                            GrlPlugin *plugin)
 {
   GrlRegistry   *registry = grl_registry_get_default ();
@@ -301,13 +309,16 @@ grl_daap_service_added_cb (DMAPMdnsBrowser *browser,
                                 GRL_SOURCE (source),
                                 NULL);
   if (source != NULL) {
-    g_hash_table_insert (sources, g_strdup (service->name), g_object_ref (source));
+    gchar *name;
+    g_object_get (service, "name", &name, NULL);
+    g_hash_table_insert (sources, g_strdup (name), g_object_ref (source));
     g_object_remove_weak_pointer (G_OBJECT (source), (gpointer *) &source);
+    g_free (name);
   }
 }
 
 static void
-grl_daap_service_removed_cb (DMAPMdnsBrowser *browser,
+grl_daap_service_removed_cb (DmapMdnsBrowser *browser,
                              const gchar *service_name,
                              GrlPlugin *plugin)
 {
@@ -323,14 +334,14 @@ grl_daap_service_removed_cb (DMAPMdnsBrowser *browser,
 }
 
 static void
-grl_daap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, 
DMAPConnectionCallback callback)
+grl_daap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, DmapConnectionFunc 
callback)
 {
-  DMAPRecordFactory *factory;
-  DMAPConnection *connection;
+  DmapRecordFactory *factory;
+  DmapConnection *connection;
 
   factory = DMAP_RECORD_FACTORY (grl_daap_record_factory_new ());
-  connection = DMAP_CONNECTION (daap_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory));
-  dmap_connection_connect (connection, (DMAPConnectionCallback) callback, cb_and_db);
+  connection = DMAP_CONNECTION (dmap_av_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory));
+  dmap_connection_start (connection, (DmapConnectionFunc) callback, cb_and_db);
 }
 
 static gboolean
@@ -397,15 +408,26 @@ grl_daap_source_browse (GrlSource *source,
     browse_connected_cb (NULL, TRUE, NULL, cb_and_db);
   } else {
     /* Connect */
+    gchar *name, *host;
+    guint port;
+
     cb_and_db->db = DMAP_DB (grl_daap_db_new ());
 
-    grl_daap_connect (dmap_source->priv->service->name,
-                      dmap_source->priv->service->host,
-                      dmap_source->priv->service->port,
+    g_object_get (dmap_source->priv->service, "name", &name,
+                                              "host", &host,
+                                              "port", &port,
+                                               NULL);
+
+    grl_daap_connect (name,
+                      host,
+                      port,
                       cb_and_db,
-                      (DMAPConnectionCallback) browse_connected_cb);
+                      (DmapConnectionFunc) browse_connected_cb);
 
     g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
+
+    g_free (name);
+    g_free (host);
   }
 
   g_free (url);
@@ -417,7 +439,7 @@ static void grl_daap_source_search (GrlSource *source,
   GrlDaapSource *dmap_source = GRL_DAAP_SOURCE (source);
 
   ResultCbAndArgsAndDb *cb_and_db;
-  DMAPMdnsBrowserService *service = dmap_source->priv->service;
+  DmapMdnsService *service = dmap_source->priv->service;
   gchar *url = grl_dmap_build_url (service);
 
   cb_and_db = g_new (ResultCbAndArgsAndDb, 1);
@@ -435,9 +457,26 @@ static void grl_daap_source_search (GrlSource *source,
     search_connected_cb (NULL, TRUE, NULL, cb_and_db);
   } else {
     /* Connect */
+    gchar *name, *host;
+    guint port;
+
     cb_and_db->db = DMAP_DB (grl_daap_db_new ());
-    grl_daap_connect (service->name, service->host, service->port, cb_and_db, (DMAPConnectionCallback) 
search_connected_cb);
+
+    g_object_get (dmap_source->priv->service, "name", &name,
+                                                "host", &host,
+                                                "port", &port,
+                                                 NULL);
+
+    grl_daap_connect (name,
+                      host,
+                      port,
+                      cb_and_db,
+                      (DmapConnectionFunc) search_connected_cb);
+
     g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
+
+    g_free (name);
+    g_free (host);
   }
 
   g_free (url);
diff --git a/src/dmap/grl-dpap-db.c b/src/dmap/grl-dpap-db.c
index 1f2d5ca2..2c984c00 100644
--- a/src/dmap/grl-dpap-db.c
+++ b/src/dmap/grl-dpap-db.c
@@ -38,7 +38,7 @@
 /* Media IDs start at max and go down. Container IDs start at 1 and go up. */
 static guint nextid = G_MAXINT; /* NOTE: this should be G_MAXUINT, but iPhoto can't handle it. */
 
-struct GrlDPAPDbPrivate {
+struct GrlDpapDbPrivate {
   /* Contains each picture container (tracked with photos hash table) */
   GrlMedia *photos_container;
 
@@ -63,31 +63,31 @@ container_equal (gconstpointer a, gconstpointer b)
   return g_str_equal (grl_media_get_id (GRL_MEDIA (a)), grl_media_get_id (GRL_MEDIA (b)));
 }
 
-GrlDPAPDb *
+GrlDpapDb *
 grl_dpap_db_new (void)
 {
-  GrlDPAPDb *db = g_object_new (TYPE_GRL_DPAP_DB, NULL);
+  GrlDpapDb *db = g_object_new (TYPE_GRL_DPAP_DB, NULL);
 
   return db;
 }
 
-static DMAPRecord *
-grl_dpap_db_lookup_by_id (const DMAPDb *db, guint id)
+static DmapRecord *
+grl_dpap_db_lookup_by_id (const DmapDb *db, guint id)
 {
   g_warning ("Not implemented");
   return NULL;
 }
 
 static void
-grl_dpap_db_foreach (const DMAPDb *db,
-                        GHFunc func,
-                        gpointer data)
+grl_dpap_db_foreach (const DmapDb *db,
+                     DmapIdRecordFunc func,
+                     gpointer data)
 {
   g_warning ("Not implemented");
 }
 
 static gint64
-grl_dpap_db_count (const DMAPDb *db)
+grl_dpap_db_count (const DmapDb *db)
 {
   g_warning ("Not implemented");
   return 0;
@@ -119,20 +119,20 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
 }
 
 static guint
-grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
+grl_dpap_db_add (DmapDb *_db, DmapRecord *_record, GError **error)
 {
   g_assert (IS_GRL_DPAP_DB (_db));
-  g_assert (IS_DPAP_RECORD (_record));
+  g_assert (IS_DMAP_IMAGE_RECORD (_record));
 
-  GrlDPAPDb *db = GRL_DPAP_DB (_db);
-  DPAPRecord *record = DPAP_RECORD (_record);
+  GrlDpapDb *db = GRL_DPAP_DB (_db);
+  DmapImageRecord *record = DMAP_IMAGE_RECORD (_record);
 
   gint        height        = 0,
               width         = 0,
               largefilesize = 0,
               creationdate  = 0,
               rating        = 0;
-  GByteArray *thumbnail     = NULL;
+  GArray     *thumbnail     = NULL;
   gchar      *id_s          = NULL,
              *filename      = NULL,
              *aspectratio   = NULL,
@@ -188,6 +188,12 @@ grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
 
   g_free (id_s);
   g_object_unref (media);
+  g_free (filename);
+  g_free (aspectratio);
+  g_free (format);
+  g_free (comments);
+  g_array_unref (thumbnail);
+  g_free (url);
 
   return --nextid;
 }
@@ -199,7 +205,7 @@ same_media (GrlMedia *a, GrlMedia *b)
 }
 
 void
-grl_dpap_db_browse (GrlDPAPDb *db,
+grl_dpap_db_browse (GrlDpapDb *db,
                     GrlMedia *container,
                     GrlSource *source,
                     guint op_id,
@@ -251,7 +257,7 @@ done:
 }
 
 void
-grl_dpap_db_search (GrlDPAPDb *db,
+grl_dpap_db_search (GrlDpapDb *db,
                     GrlSource *source,
                     guint op_id,
                     GHRFunc predicate,
@@ -303,7 +309,7 @@ grl_dpap_db_search (GrlDPAPDb *db,
 static void
 dmap_db_interface_init (gpointer iface, gpointer data)
 {
-  DMAPDbIface *dpap_db = iface;
+  DmapDbInterface *dpap_db = iface;
 
   g_assert (G_TYPE_FROM_INTERFACE (dpap_db) == DMAP_TYPE_DB);
 
@@ -313,8 +319,8 @@ dmap_db_interface_init (gpointer iface, gpointer data)
   dpap_db->count = grl_dpap_db_count;
 }
 
-G_DEFINE_TYPE_WITH_CODE (GrlDPAPDb, grl_dpap_db, G_TYPE_OBJECT,
-                         G_ADD_PRIVATE (GrlDPAPDb)
+G_DEFINE_TYPE_WITH_CODE (GrlDpapDb, grl_dpap_db, G_TYPE_OBJECT,
+                         G_ADD_PRIVATE (GrlDpapDb)
                          G_IMPLEMENT_INTERFACE (DMAP_TYPE_DB, dmap_db_interface_init))
 
 static GObject*
@@ -328,7 +334,7 @@ grl_dpap_db_constructor (GType type, guint n_construct_params, GObjectConstructP
 }
 
 static void
-grl_dpap_db_init (GrlDPAPDb *db)
+grl_dpap_db_init (GrlDpapDb *db)
 {
   db->priv = grl_dpap_db_get_instance_private (db);
 
@@ -346,9 +352,9 @@ grl_dpap_db_init (GrlDPAPDb *db)
 static void
 grl_dpap_db_finalize (GObject *object)
 {
-  GrlDPAPDb *db = GRL_DPAP_DB (object);
+  GrlDpapDb *db = GRL_DPAP_DB (object);
 
-  GRL_DEBUG ("Finalizing GrlDPAPDb");
+  GRL_DEBUG ("Finalizing GrlDpapDb");
 
   g_object_unref (db->priv->photos_container);
 
@@ -356,7 +362,7 @@ grl_dpap_db_finalize (GObject *object)
 }
 
 static void
-grl_dpap_db_class_init (GrlDPAPDbClass *klass)
+grl_dpap_db_class_init (GrlDpapDbClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
diff --git a/src/dmap/grl-dpap-db.h b/src/dmap/grl-dpap-db.h
index 4c17d1a3..14bb4470 100644
--- a/src/dmap/grl-dpap-db.h
+++ b/src/dmap/grl-dpap-db.h
@@ -32,12 +32,12 @@ G_BEGIN_DECLS
 #define GRL_DPAP_DB(o)                             \
   (G_TYPE_CHECK_INSTANCE_CAST ((o),                   \
                                TYPE_GRL_DPAP_DB,   \
-                               GrlDPAPDb))
+                               GrlDpapDb))
 
 #define GRL_DPAP_DB_CLASS(k)                 \
   (G_TYPE_CHECK_CLASS_CAST((k),                 \
                            TYPE_GRL_DPAP_DB, \
-                           GrlDPAPDbClass))
+                           GrlDpapDbClass))
 #define IS_GRL_DPAP_DB(o)                          \
   (G_TYPE_CHECK_INSTANCE_TYPE((o),                    \
                               TYPE_GRL_DPAP_DB))
@@ -48,26 +48,26 @@ G_BEGIN_DECLS
 #define GRL_DPAP_DB_GET_CLASS(o)                \
   (G_TYPE_INSTANCE_GET_CLASS((o),                  \
                              TYPE_GRL_DPAP_DB,  \
-                             GrlDPAPDbClass))
+                             GrlDpapDbClass))
 
 #define GRL_DPAP_DB_GET_PRIVATE(o)                 \
   (G_TYPE_INSTANCE_GET_PRIVATE((o),                   \
                                TYPE_GRL_DPAP_DB,   \
-                               GrlDPAPDbPrivate))
+                               GrlDpapDbPrivate))
 
-typedef struct GrlDPAPDbPrivate GrlDPAPDbPrivate;
+typedef struct GrlDpapDbPrivate GrlDpapDbPrivate;
 
 typedef struct {
   GObject parent;
-  GrlDPAPDbPrivate *priv;
-} GrlDPAPDb;
+  GrlDpapDbPrivate *priv;
+} GrlDpapDb;
 
 typedef struct {
   GObjectClass parent;
-} GrlDPAPDbClass;
+} GrlDpapDbClass;
 
-GrlDPAPDb *grl_dpap_db_new (void);
-void grl_dpap_db_browse (GrlDPAPDb *_db,
+GrlDpapDb *grl_dpap_db_new (void);
+void grl_dpap_db_browse (GrlDpapDb *_db,
                          GrlMedia *container,
                          GrlSource *source,
                          guint op_id,
@@ -75,7 +75,7 @@ void grl_dpap_db_browse (GrlDPAPDb *_db,
                          guint count,
                          GrlSourceResultCb func,
                          gpointer user_data);
-void grl_dpap_db_search (GrlDPAPDb *_db,
+void grl_dpap_db_search (GrlDpapDb *_db,
                          GrlSource *source,
                          guint op_id,
                          GHRFunc predicate,
diff --git a/src/dmap/grl-dpap-record-factory.c b/src/dmap/grl-dpap-record-factory.c
index 81743384..a275f7a8 100644
--- a/src/dmap/grl-dpap-record-factory.c
+++ b/src/dmap/grl-dpap-record-factory.c
@@ -21,37 +21,39 @@
 #include "grl-dpap-record-factory.h"
 #include "grl-dpap-record.h"
 
-DMAPRecord *
-grl_dpap_record_factory_create  (DMAPRecordFactory *factory, gpointer user_data)
+DmapRecord *
+grl_dpap_record_factory_create  (DmapRecordFactory *factory,
+                                 gpointer user_data,
+                                 GError **error)
 {
        return DMAP_RECORD (grl_dpap_record_new ());
 }
 
 static void
-grl_dpap_record_factory_init (GrlDPAPRecordFactory *factory)
+grl_dpap_record_factory_init (GrlDpapRecordFactory *factory)
 {
 }
 
 static void
-grl_dpap_record_factory_class_init (GrlDPAPRecordFactoryClass *klass)
+grl_dpap_record_factory_class_init (GrlDpapRecordFactoryClass *klass)
 {
 }
 
 static void
 grl_dpap_record_factory_interface_init (gpointer iface, gpointer data)
 {
-       DMAPRecordFactoryIface *factory = iface;
+       DmapRecordFactoryInterface *factory = iface;
 
        g_assert (G_TYPE_FROM_INTERFACE (factory) == DMAP_TYPE_RECORD_FACTORY);
 
        factory->create = grl_dpap_record_factory_create;
 }
 
-G_DEFINE_TYPE_WITH_CODE (GrlDPAPRecordFactory, grl_dpap_record_factory, G_TYPE_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (GrlDpapRecordFactory, grl_dpap_record_factory, G_TYPE_OBJECT,
                         G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD_FACTORY,
                                                grl_dpap_record_factory_interface_init))
 
-GrlDPAPRecordFactory *
+GrlDpapRecordFactory *
 grl_dpap_record_factory_new (void)
 {
        return SIMPLE_DPAP_RECORD_FACTORY (g_object_new (TYPE_SIMPLE_DPAP_RECORD_FACTORY, NULL));
diff --git a/src/dmap/grl-dpap-record-factory.h b/src/dmap/grl-dpap-record-factory.h
index c2106b16..a8c5eaf8 100644
--- a/src/dmap/grl-dpap-record-factory.h
+++ b/src/dmap/grl-dpap-record-factory.h
@@ -1,5 +1,5 @@
 /*
- * GrlDPAPRecord factory class
+ * GrlDpapRecord factory class
  *
  * Copyright (C) 2008 W. Michael Petullo <mike flyn org>
  *
@@ -31,12 +31,12 @@ G_BEGIN_DECLS
 #define SIMPLE_DPAP_RECORD_FACTORY(o)                          \
   (G_TYPE_CHECK_INSTANCE_CAST((o),                             \
                               TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
-                              GrlDPAPRecordFactory))
+                              GrlDpapRecordFactory))
 
 #define SIMPLE_DPAP_RECORD_FACTORY_CLASS(k)                 \
   (G_TYPE_CHECK_CLASS_CAST((k),                             \
                            TYPE_SIMPLE_DPAP_RECORD_FACTORY, \
-                           GrlDPAPRecordFactoryClass))
+                           GrlDpapRecordFactoryClass))
 
 #define IS_SIMPLE_DPAP_RECORD_FACTORY(o)                          \
   (G_TYPE_CHECK_INSTANCE_TYPE((o),                                \
@@ -49,23 +49,23 @@ G_BEGIN_DECLS
 #define SIMPLE_DPAP_RECORD_FACTORY_GET_CLASS(o)                \
   (G_TYPE_INSTANCE_GET_CLASS((o),                              \
                              TYPE_SIMPLE_DPAP_RECORD_FACTORY,  \
-                             GrlDPAPRecordFactoryClass))
+                             GrlDpapRecordFactoryClass))
 
-typedef struct GrlDPAPRecordFactoryPrivate GrlDPAPRecordFactoryPrivate;
+typedef struct GrlDpapRecordFactoryPrivate GrlDpapRecordFactoryPrivate;
 
 typedef struct {
   GObject parent;
-} GrlDPAPRecordFactory;
+} GrlDpapRecordFactory;
 
 typedef struct {
   GObjectClass parent;
-} GrlDPAPRecordFactoryClass;
+} GrlDpapRecordFactoryClass;
 
 GType                    grl_dpap_record_factory_get_type (void);
 
-GrlDPAPRecordFactory *grl_dpap_record_factory_new      (void);
+GrlDpapRecordFactory *grl_dpap_record_factory_new      (void);
 
-DMAPRecord              *grl_dpap_record_factory_create   (DMAPRecordFactory *factory, gpointer user_data);
+DmapRecord              *grl_dpap_record_factory_create   (DmapRecordFactory *factory, gpointer user_data, 
GError **error);
 
 #endif /* __SIMPLE_DPAP_RECORD_FACTORY */
 
diff --git a/src/dmap/grl-dpap-record.c b/src/dmap/grl-dpap-record.c
index 6281417a..1b4e58c5 100644
--- a/src/dmap/grl-dpap-record.c
+++ b/src/dmap/grl-dpap-record.c
@@ -22,13 +22,13 @@
 
 #include "grl-dpap-record.h"
 
-struct GrlDPAPRecordPrivate {
+struct GrlDpapRecordPrivate {
   char *location;
   gint largefilesize;
   gint creationdate;
   gint rating;
   char *filename;
-  GByteArray *thumbnail;
+  GArray *thumbnail;
   char *aspectratio;
   gint height;
   gint width;
@@ -54,9 +54,9 @@ enum {
 static void grl_dpap_record_dmap_iface_init (gpointer iface, gpointer data);
 static void grl_dpap_record_dpap_iface_init (gpointer iface, gpointer data);
 
-G_DEFINE_TYPE_WITH_CODE (GrlDPAPRecord, grl_dpap_record, G_TYPE_OBJECT,
-                         G_ADD_PRIVATE (GrlDPAPRecord)
-                         G_IMPLEMENT_INTERFACE (DPAP_TYPE_RECORD, grl_dpap_record_dpap_iface_init)
+G_DEFINE_TYPE_WITH_CODE (GrlDpapRecord, grl_dpap_record, G_TYPE_OBJECT,
+                         G_ADD_PRIVATE (GrlDpapRecord)
+                         G_IMPLEMENT_INTERFACE (DMAP_TYPE_IMAGE_RECORD, grl_dpap_record_dpap_iface_init)
                          G_IMPLEMENT_INTERFACE (DMAP_TYPE_RECORD, grl_dpap_record_dmap_iface_init))
 
 static void
@@ -65,7 +65,7 @@ grl_dpap_record_set_property (GObject *object,
                                 const GValue *value,
                                 GParamSpec *pspec)
 {
-  GrlDPAPRecord *record = SIMPLE_DPAP_RECORD (object);
+  GrlDpapRecord *record = SIMPLE_DPAP_RECORD (object);
 
   switch (prop_id) {
   case PROP_LOCATION:
@@ -105,8 +105,8 @@ grl_dpap_record_set_property (GObject *object,
     break;
   case PROP_THUMBNAIL:
     if (record->priv->thumbnail)
-      g_byte_array_unref (record->priv->thumbnail);
-    record->priv->thumbnail = g_byte_array_ref (g_value_get_pointer (value));
+      g_array_unref (record->priv->thumbnail);
+    record->priv->thumbnail = g_value_get_boxed (value);
     break;
   default:
     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -120,7 +120,7 @@ grl_dpap_record_get_property (GObject *object,
                                  GValue *value,
                                  GParamSpec *pspec)
 {
-  GrlDPAPRecord *record = SIMPLE_DPAP_RECORD (object);
+  GrlDpapRecord *record = SIMPLE_DPAP_RECORD (object);
 
   switch (prop_id) {
   case PROP_LOCATION:
@@ -154,7 +154,7 @@ grl_dpap_record_get_property (GObject *object,
     g_value_set_static_string (value, record->priv->comments);
     break;
   case PROP_THUMBNAIL:
-    g_value_set_pointer (value, record->priv->thumbnail);
+    g_value_set_boxed (value, record->priv->thumbnail);
     break;
   default:
     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -162,14 +162,14 @@ grl_dpap_record_get_property (GObject *object,
   }
 }
 
-GrlDPAPRecord *
+GrlDpapRecord *
 grl_dpap_record_new (void)
 {
   return SIMPLE_DPAP_RECORD (g_object_new (TYPE_SIMPLE_DPAP_RECORD, NULL));
 }
 
 GInputStream *
-grl_dpap_record_read (DPAPRecord *record, GError **error)
+grl_dpap_record_read (DmapImageRecord *record, GError **error)
 {
   GFile *file;
   GInputStream *stream;
@@ -183,7 +183,7 @@ grl_dpap_record_read (DPAPRecord *record, GError **error)
 }
 
 static void
-grl_dpap_record_init (GrlDPAPRecord *record)
+grl_dpap_record_init (GrlDpapRecord *record)
 {
   record->priv = grl_dpap_record_get_instance_private (record);
 }
@@ -191,7 +191,7 @@ grl_dpap_record_init (GrlDPAPRecord *record)
 static void grl_dpap_record_finalize (GObject *object);
 
 static void
-grl_dpap_record_class_init (GrlDPAPRecordClass *klass)
+grl_dpap_record_class_init (GrlDpapRecordClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
@@ -215,9 +215,9 @@ grl_dpap_record_class_init (GrlDPAPRecordClass *klass)
 static void
 grl_dpap_record_dpap_iface_init (gpointer iface, gpointer data)
 {
-  DPAPRecordIface *dpap_record = iface;
+  DmapImageRecordInterface *dpap_record = iface;
 
-  g_assert (G_TYPE_FROM_INTERFACE (dpap_record) == DPAP_TYPE_RECORD);
+  g_assert (G_TYPE_FROM_INTERFACE (dpap_record) == DMAP_TYPE_IMAGE_RECORD);
 
   dpap_record->read = grl_dpap_record_read;
 }
@@ -225,7 +225,7 @@ grl_dpap_record_dpap_iface_init (gpointer iface, gpointer data)
 static void
 grl_dpap_record_dmap_iface_init (gpointer iface, gpointer data)
 {
-  DMAPRecordIface *dmap_record = iface;
+  DmapRecordInterface *dmap_record = iface;
 
   g_assert (G_TYPE_FROM_INTERFACE (dmap_record) == DMAP_TYPE_RECORD);
 }
@@ -233,7 +233,7 @@ grl_dpap_record_dmap_iface_init (gpointer iface, gpointer data)
 static void
 grl_dpap_record_finalize (GObject *object)
 {
-  GrlDPAPRecord *record = SIMPLE_DPAP_RECORD (object);
+  GrlDpapRecord *record = SIMPLE_DPAP_RECORD (object);
 
   g_free (record->priv->location);
   g_free (record->priv->filename);
@@ -242,7 +242,7 @@ grl_dpap_record_finalize (GObject *object)
   g_free (record->priv->comments);
 
   if (record->priv->thumbnail)
-    g_byte_array_unref (record->priv->thumbnail);
+    g_array_unref (record->priv->thumbnail);
 
   G_OBJECT_CLASS (grl_dpap_record_parent_class)->finalize (object);
 }
diff --git a/src/dmap/grl-dpap-record.h b/src/dmap/grl-dpap-record.h
index 4441740b..78a57bba 100644
--- a/src/dmap/grl-dpap-record.h
+++ b/src/dmap/grl-dpap-record.h
@@ -31,12 +31,12 @@ G_BEGIN_DECLS
 #define SIMPLE_DPAP_RECORD(o)                            \
   (G_TYPE_CHECK_INSTANCE_CAST((o),                       \
                               TYPE_SIMPLE_DPAP_RECORD,   \
-                              GrlDPAPRecord))
+                              GrlDpapRecord))
 
 #define SIMPLE_DPAP_RECORD_CLASS(k)                   \
   (G_TYPE_CHECK_CLASS_CAST((k),                       \
                            TYPE_SIMPLE_DPAP_RECORD,   \
-                           GrlDPAPRecordClass))
+                           GrlDpapRecordClass))
 
 #define IS_SIMPLE_DPAP_RECORD(o)                         \
   (G_TYPE_CHECK_INSTANCE_TYPE((o),                       \
@@ -49,29 +49,29 @@ G_BEGIN_DECLS
 #define SIMPLE_DPAP_RECORD_GET_CLASS(o)               \
   (G_TYPE_INSTANCE_GET_CLASS((o),                     \
                              TYPE_SIMPLE_DPAP_RECORD, \
-                             GrlDPAPRecordClass))
+                             GrlDpapRecordClass))
 
 #define SIMPLE_DPAP_RECORD_GET_PRIVATE(o)                \
   (G_TYPE_INSTANCE_GET_PRIVATE((o),                      \
                                TYPE_SIMPLE_DPAP_RECORD,  \
-                               GrlDPAPRecordPrivate))
+                               GrlDpapRecordPrivate))
 
-typedef struct GrlDPAPRecordPrivate GrlDPAPRecordPrivate;
+typedef struct GrlDpapRecordPrivate GrlDpapRecordPrivate;
 
 typedef struct {
   GObject parent;
-  GrlDPAPRecordPrivate *priv;
-} GrlDPAPRecord;
+  GrlDpapRecordPrivate *priv;
+} GrlDpapRecord;
 
 typedef struct {
   GObjectClass parent;
-} GrlDPAPRecordClass;
+} GrlDpapRecordClass;
 
 GType grl_dpap_record_get_type (void);
 
-GrlDPAPRecord    *grl_dpap_record_new    (void);
-GInputStream     *grl_dpap_record_read   (DPAPRecord *record, GError **error);
-gint              grl_dpap_record_get_id (DPAPRecord *record);
+GrlDpapRecord    *grl_dpap_record_new    (void);
+GInputStream     *grl_dpap_record_read   (DmapImageRecord *record, GError **error);
+gint              grl_dpap_record_get_id (DmapImageRecord *record);
 
 #endif /* __SIMPLE_DPAP_RECORD */
 
diff --git a/src/dmap/grl-dpap.c b/src/dmap/grl-dpap.c
index 744de80a..13d2323b 100644
--- a/src/dmap/grl-dpap.c
+++ b/src/dmap/grl-dpap.c
@@ -57,12 +57,12 @@ GRL_LOG_DOMAIN_STATIC(dmap_log_domain);
                                GrlDpapSourcePrivate))
 
 struct _GrlDpapSourcePrivate {
-  DMAPMdnsBrowserService *service;
+  DmapMdnsService *service;
 };
 
 /* --- Data types --- */
 
-static GrlDpapSource *grl_dpap_source_new (DMAPMdnsBrowserService *service);
+static GrlDpapSource *grl_dpap_source_new (DmapMdnsService *service);
 
 static void grl_dpap_source_finalize (GObject *object);
 
@@ -79,16 +79,16 @@ static void grl_dpap_source_search (GrlSource *source,
                                     GrlSourceSearchSpec *ss);
 
 
-static void grl_dpap_service_added_cb (DMAPMdnsBrowser *browser,
-                                       DMAPMdnsBrowserService *service,
+static void grl_dpap_service_added_cb (DmapMdnsBrowser *browser,
+                                       DmapMdnsService *service,
                                        GrlPlugin *plugin);
 
-static void grl_dpap_service_removed_cb (DMAPMdnsBrowser *browser,
+static void grl_dpap_service_removed_cb (DmapMdnsBrowser *browser,
                                          const gchar *service_name,
                                          GrlPlugin *plugin);
 
 /* ===================== Globals  ======================= */
-static DMAPMdnsBrowser *browser;
+static DmapMdnsBrowser *browser;
 /* Maps URIs to DBs */
 static GHashTable *connections;
 /* Map DPAP services to Grilo media sources */
@@ -111,7 +111,7 @@ grl_dpap_plugin_init (GrlRegistry *registry,
   bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
   bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 
-  browser     = dmap_mdns_browser_new (DMAP_MDNS_BROWSER_SERVICE_TYPE_DPAP);
+  browser     = dmap_mdns_browser_new (DMAP_MDNS_SERVICE_TYPE_DPAP);
   connections = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
   sources     = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
 
@@ -158,8 +158,10 @@ GRL_PLUGIN_DEFINE (GRL_MAJOR,
 G_DEFINE_TYPE_WITH_PRIVATE (GrlDpapSource, grl_dpap_source, GRL_TYPE_SOURCE)
 
 static GrlDpapSource *
-grl_dpap_source_new (DMAPMdnsBrowserService *service)
+grl_dpap_source_new (DmapMdnsService *service)
 {
+  gchar *name;
+  gchar *service_name;
   gchar *source_desc;
   gchar *source_id;
 
@@ -167,12 +169,16 @@ grl_dpap_source_new (DMAPMdnsBrowserService *service)
 
   GRL_DEBUG ("grl_dpap_source_new");
 
-  source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, service->name);
-  source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, service->name);
+  g_object_get(service, "name", &name,
+                        "service-name", &service_name,
+                         NULL);
+
+  source_desc = g_strdup_printf (SOURCE_DESC_TEMPLATE, name);
+  source_id = g_strdup_printf (SOURCE_ID_TEMPLATE, name);
 
   source = g_object_new (GRL_DPAP_SOURCE_TYPE,
                          "source-id",   source_id,
-                         "source-name", service->name,
+                         "source-name", service_name,
                          "source-desc", source_desc,
                          "supported-media", GRL_SUPPORTED_MEDIA_IMAGE,
                          NULL);
@@ -181,6 +187,8 @@ grl_dpap_source_new (DMAPMdnsBrowserService *service)
 
   g_free (source_desc);
   g_free (source_id);
+  g_free (service_name);
+  g_free (name);
 
   return source;
 }
@@ -241,7 +249,7 @@ grl_dpap_do_search (ResultCbAndArgsAndDb *cb_and_db)
 }
 
 static void
-browse_connected_cb (DMAPConnection       *connection,
+browse_connected_cb (DmapConnection       *connection,
                      gboolean              result,
                      const char           *reason,
                      ResultCbAndArgsAndDb *cb_and_db)
@@ -266,7 +274,7 @@ browse_connected_cb (DMAPConnection       *connection,
 }
 
 static void
-search_connected_cb (DMAPConnection       *connection,
+search_connected_cb (DmapConnection       *connection,
                      gboolean              result,
                      const char           *reason,
                      ResultCbAndArgsAndDb *cb_and_db)
@@ -291,8 +299,8 @@ search_connected_cb (DMAPConnection       *connection,
 }
 
 static void
-grl_dpap_service_added_cb (DMAPMdnsBrowser *browser,
-                           DMAPMdnsBrowserService *service,
+grl_dpap_service_added_cb (DmapMdnsBrowser *browser,
+                           DmapMdnsService *service,
                            GrlPlugin *plugin)
 {
   GrlRegistry   *registry = grl_registry_get_default ();
@@ -306,13 +314,16 @@ grl_dpap_service_added_cb (DMAPMdnsBrowser *browser,
                                 GRL_SOURCE (source),
                                 NULL);
   if (source != NULL) {
-    g_hash_table_insert (sources, g_strdup (service->name), g_object_ref (source));
+    gchar *name;
+    g_object_get(service, "name", &name, NULL);
+    g_hash_table_insert (sources, g_strdup (name), g_object_ref (source));
     g_object_remove_weak_pointer (G_OBJECT (source), (gpointer *) &source);
+    g_free(name);
   }
 }
 
 static void
-grl_dpap_service_removed_cb (DMAPMdnsBrowser *browser,
+grl_dpap_service_removed_cb (DmapMdnsBrowser *browser,
                              const gchar *service_name,
                              GrlPlugin *plugin)
 {
@@ -328,14 +339,14 @@ grl_dpap_service_removed_cb (DMAPMdnsBrowser *browser,
 }
 
 static void
-grl_dpap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, 
DMAPConnectionCallback callback)
+grl_dpap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, DmapConnectionFunc 
callback)
 {
-  DMAPRecordFactory *factory;
-  DMAPConnection *connection;
+  DmapRecordFactory *factory;
+  DmapConnection *connection;
 
   factory = DMAP_RECORD_FACTORY (grl_dpap_record_factory_new ());
-  connection = DMAP_CONNECTION (dpap_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory));
-  dmap_connection_connect (connection, (DMAPConnectionCallback) callback, cb_and_db);
+  connection = DMAP_CONNECTION (dmap_image_connection_new (name, host, port, DMAP_DB (cb_and_db->db), 
factory));
+  dmap_connection_start (connection, (DmapConnectionFunc) callback, cb_and_db);
 }
 
 static gboolean
@@ -396,15 +407,26 @@ grl_dpap_source_browse (GrlSource *source,
     browse_connected_cb (NULL, TRUE, NULL, cb_and_db);
   } else {
     /* Connect */
+    gchar *name, *host;
+    guint port;
+
     cb_and_db->db = DMAP_DB (grl_dpap_db_new ());
 
-    grl_dpap_connect (dmap_source->priv->service->name,
-                      dmap_source->priv->service->host,
-                      dmap_source->priv->service->port,
+    g_object_get (dmap_source->priv->service, "name", &name,
+                                              "host", &host,
+                                              "port", &port,
+                                               NULL);
+
+    grl_dpap_connect (name,
+                      host,
+                      port,
                       cb_and_db,
-                      (DMAPConnectionCallback) browse_connected_cb);
+                      (DmapConnectionFunc) browse_connected_cb);
 
     g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
+
+    g_free (name);
+    g_free (host);
   }
 
   g_free (url);
@@ -416,7 +438,7 @@ static void grl_dpap_source_search (GrlSource *source,
   GrlDpapSource *dmap_source = GRL_DPAP_SOURCE (source);
 
   ResultCbAndArgsAndDb *cb_and_db;
-  DMAPMdnsBrowserService *service = dmap_source->priv->service;
+  DmapMdnsService *service = dmap_source->priv->service;
   gchar *url = grl_dmap_build_url (service);
 
   cb_and_db = g_new (ResultCbAndArgsAndDb, 1);
@@ -434,9 +456,26 @@ static void grl_dpap_source_search (GrlSource *source,
     search_connected_cb (NULL, TRUE, NULL, cb_and_db);
   } else {
     /* Connect */
+    gchar *name, *host;
+    guint port;
+
     cb_and_db->db = DMAP_DB (grl_dpap_db_new ());
-    grl_dpap_connect (service->name, service->host, service->port, cb_and_db, (DMAPConnectionCallback) 
search_connected_cb);
+
+    g_object_get (dmap_source->priv->service, "name", &name,
+                                              "host", &host,
+                                              "port", &port,
+                                               NULL);
+
+    grl_dpap_connect (name,
+                      host,
+                      port,
+                      cb_and_db,
+                      (DmapConnectionFunc) search_connected_cb);
+
     g_hash_table_insert (connections, g_strdup (url), cb_and_db->db);
+
+    g_free (name);
+    g_free (host);
   }
 
   g_free (url);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]