From 5d180b428d240d8e7cd46c9fb8343e7db85f8429 Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Sun, 19 May 2019 20:59:35 +0200 Subject: [PATCH] - added libdmasharing4 patch (port to libdmapsharing-4.0 API); release 3 --- grilo-plugins-libdmapsharing4.patch | 1572 +++++++++++++++++++++++++++ grilo-plugins.spec | 24 +- 2 files changed, 1585 insertions(+), 11 deletions(-) create mode 100644 grilo-plugins-libdmapsharing4.patch diff --git a/grilo-plugins-libdmapsharing4.patch b/grilo-plugins-libdmapsharing4.patch new file mode 100644 index 0000000..6e1bb67 --- /dev/null +++ b/grilo-plugins-libdmapsharing4.patch @@ -0,0 +1,1572 @@ +From e00ea44523a7f179df61bf0d4b4cb20c0570baaf Mon Sep 17 00:00:00 2001 +From: "W. Michael Petullo" +Date: Sun, 17 Mar 2019 22:03:40 -0400 +Subject: [PATCH] dmap: update to libdmapsharing-4.0 API + +Signed-off-by: W. Michael Petullo +--- + 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 e45c5ab..e7bcc23 100644 +--- a/meson.build ++++ b/meson.build +@@ -59,7 +59,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 fa92df9..66d3e43 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 e9c8327..8e5a3a6 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 6621094..bc6a950 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 f52a9b5..63816d0 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 e986394..7bf5ca2 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 + * +@@ -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 514713a..698b22c 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 + * +@@ -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 d1721d2..6edba33 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 59558c4..ee3f085 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 13cc7e3..2562d08 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 1f2d5ca..2c984c0 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 4c17d1a..14bb447 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 8174338..a275f7a 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 c2106b1..a8c5eaf 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 + * +@@ -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 6281417..1b4e58c 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 4441740..78a57bb 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 744de80..13d2323 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); +-- +2.18.1 + diff --git a/grilo-plugins.spec b/grilo-plugins.spec index fbcce64..dee9bf1 100644 --- a/grilo-plugins.spec +++ b/grilo-plugins.spec @@ -2,23 +2,24 @@ Summary: Collection of plugins for Grilo Summary(pl.UTF-8): Zestaw wtyczek dla Grilo Name: grilo-plugins Version: 0.3.8 -Release: 2 +Release: 3 License: LGPL v2.1+ Group: Applications/Multimedia Source0: http://ftp.gnome.org/pub/GNOME/sources/grilo-plugins/0.3/%{name}-%{version}.tar.xz # Source0-md5: e1a2c6c59610fce5799466dcd6507602 -URL: http://live.gnome.org/Grilo +# https://gitlab.gnome.org/GNOME/grilo-plugins/merge_requests/49.patch +Patch0: %{name}-libdmapsharing4.patch +URL: https://wiki.gnome.org/Projects/Grilo BuildRequires: avahi-glib-devel BuildRequires: avahi-gobject-devel BuildRequires: gettext-tools BuildRequires: glib2-devel >= 1:2.44 BuildRequires: gmime-devel >= 2.6.0 -BuildRequires: gnome-common BuildRequires: gnome-online-accounts-devel >= 3.18.0 BuildRequires: gom-devel >= 0.3.2 BuildRequires: gperf -BuildRequires: grilo-devel >= 0.3.1 -BuildRequires: intltool >= 0.40.0 +BuildRequires: grilo-devel >= 0.3.6 +BuildRequires: gstreamer-devel >= 1.0 BuildRequires: json-glib-devel BuildRequires: libarchive-devel BuildRequires: libdmapsharing-devel >= 2.9.12 @@ -30,24 +31,23 @@ BuildRequires: libsoup-devel >= 2.4 BuildRequires: libtool >= 2:2.2.6 BuildRequires: libxml2-devel >= 2.0 BuildRequires: lua53-devel >= 5.3.0 -BuildRequires: meson -BuildRequires: ninja +BuildRequires: meson >= 0.37.0 +BuildRequires: ninja >= 1.5 BuildRequires: pkgconfig -BuildRequires: rest-devel >= 0.7.90 +BuildRequires: rpmbuild(macros) >= 1.736 BuildRequires: sqlite3-devel >= 3 BuildRequires: tar >= 1:1.22 BuildRequires: totem-pl-parser-devel >= 3.4.1 -BuildRequires: tracker-devel >= 0.12 +BuildRequires: tracker-devel >= 2.0 BuildRequires: xz BuildRequires: yelp-tools Requires: glib2 >= 1:2.44 Requires: gmime >= 2.6.0 Requires: gnome-online-accounts-libs >= 3.18.0 Requires: gom >= 0.3.2 -Requires: grilo >= 0.3.1 +Requires: grilo >= 0.3.6 Requires: libdmapsharing >= 2.9.12 Requires: libgdata >= 0.9.1 -Requires: rest >= 0.7.90 Requires: totem-pl-parser >= 3.4.1 Suggests: dleyna-server Obsoletes: totem-jamendo @@ -65,9 +65,11 @@ różnych dostawców treści multimedialnych. %prep %setup -q +%patch0 -p1 %build %meson build + %ninja_build -C build %install -- 2.43.0