diff --git a/meson.build b/meson.build
|
|
index 33a6f40..8a590b9 100644
|
|
--- a/meson.build
|
|
+++ b/meson.build
|
|
@@ -62,7 +62,12 @@ 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)
|
|
+libdmapsharing4_dep = dependency('libdmapsharing-4.0', version: '>= 3.9.4', required: false)
|
|
+if libdmapsharing4_dep.found()
|
|
+ libdmapsharing_dep = libdmapsharing4_dep
|
|
+else
|
|
+ libdmapsharing_dep = dependency('libdmapsharing-3.0', version: '>= 2.9.12', required: false)
|
|
+endif
|
|
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 6a1da5e..74a965f 100644
|
|
--- a/src/dmap/grl-common.c
|
|
+++ b/src/dmap/grl-common.c
|
|
@@ -33,13 +33,27 @@
|
|
#include <stdlib.h>
|
|
#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-dmap-compat.h"
|
|
#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;
|
|
+
|
|
+ service_name = grl_dmap_service_get_service_name (service);
|
|
+ host = grl_dmap_service_get_host (service);
|
|
+ port = grl_dmap_service_get_port (service);
|
|
+
|
|
+ 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..d61df63 100644
|
|
--- a/src/dmap/grl-common.h
|
|
+++ b/src/dmap/grl-common.h
|
|
@@ -24,9 +24,6 @@
|
|
#ifndef _GRL_COMMON_H_
|
|
#define _GRL_COMMON_H_
|
|
|
|
-#include <grilo.h>
|
|
-#include <libdmapsharing/dmap.h>
|
|
-
|
|
typedef struct {
|
|
GrlSourceResultCb callback;
|
|
GrlSource *source;
|
|
@@ -41,9 +38,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-compat.h b/src/dmap/grl-daap-compat.h
|
|
new file mode 100644
|
|
index 0000000..da9025f
|
|
--- /dev/null
|
|
+++ b/src/dmap/grl-daap-compat.h
|
|
@@ -0,0 +1,76 @@
|
|
+/*
|
|
+ * Copyright (C) 2019 W. Michael Petullo
|
|
+ * Copyright (C) 2019 Igalia S.L.
|
|
+ *
|
|
+ * Contact: W. Michael Petullo <mike@flyn.org>
|
|
+ *
|
|
+ * This library is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU Lesser General Public License
|
|
+ * as published by the Free Software Foundation; version 2.1 of
|
|
+ * the License, or (at your option) any later version.
|
|
+ *
|
|
+ * This library is distributed in the hope that it will be useful, but
|
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * Lesser General Public License for more details.
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public
|
|
+ * License along with this library; if not, write to the Free Software
|
|
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
+ * 02110-1301 USA
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef _GRL_DAAP_COMPAT_H_
|
|
+#define _GRL_DAAP_COMPAT_H_
|
|
+
|
|
+#include "grl-dmap-compat.h"
|
|
+
|
|
+#ifdef LIBDMAPSHARING_COMPAT
|
|
+
|
|
+DMAPRecord *grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data, GError **error);
|
|
+guint grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record, GError **error);
|
|
+
|
|
+/* Building against libdmapsharing 3 API. */
|
|
+
|
|
+#define dmap_av_connection_new daap_connection_new
|
|
+#define DmapAvRecord DAAPRecord
|
|
+#define DmapAvRecordInterface DAAPRecordIface
|
|
+#define DMAP_AV_RECORD DAAP_RECORD
|
|
+#define DMAP_TYPE_AV_RECORD DAAP_TYPE_RECORD
|
|
+#define IS_DMAP_AV_RECORD IS_DAAP_RECORD
|
|
+
|
|
+static inline DmapRecord *
|
|
+grl_daap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data)
|
|
+{
|
|
+ return grl_daap_record_factory_create (factory, user_data, NULL);
|
|
+}
|
|
+
|
|
+static inline guint
|
|
+grl_daap_db_add_compat (DmapDb *_db, DmapRecord *_record)
|
|
+{
|
|
+ return grl_daap_db_add (_db, _record, NULL);
|
|
+}
|
|
+
|
|
+#else
|
|
+
|
|
+/* Building against libdmapsharing 4 API. */
|
|
+
|
|
+DmapRecord *grl_daap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error);
|
|
+guint grl_daap_db_add (DmapDb *_db, DmapRecord *_record, GError **error);
|
|
+
|
|
+static inline DmapRecord *
|
|
+grl_daap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data, GError **error)
|
|
+{
|
|
+ return grl_daap_record_factory_create (factory, user_data, error);
|
|
+}
|
|
+
|
|
+static inline guint
|
|
+grl_daap_db_add_compat (DmapDb *_db, DmapRecord *_record, GError **error)
|
|
+{
|
|
+ return grl_daap_db_add (_db, _record, error);
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
+#endif /* _GRL_DAAP_COMPAT_H_ */
|
|
diff --git a/src/dmap/grl-daap-db.c b/src/dmap/grl-daap-db.c
|
|
index f460113..315370e 100644
|
|
--- a/src/dmap/grl-daap-db.c
|
|
+++ b/src/dmap/grl-daap-db.c
|
|
@@ -54,8 +54,12 @@
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <glib.h>
|
|
+#include <grilo.h>
|
|
#include <string.h>
|
|
+#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-daap-compat.h"
|
|
+#include "grl-common.h"
|
|
#include "grl-daap-db.h"
|
|
|
|
#define ALBUMS_ID "albums"
|
|
@@ -103,23 +107,23 @@ grl_daap_db_new (void)
|
|
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,
|
|
+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;
|
|
@@ -150,14 +154,14 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
|
|
g_object_unref (container);
|
|
}
|
|
|
|
-static guint
|
|
-grl_daap_db_add (DMAPDb *_db, DMAPRecord *_record)
|
|
+guint
|
|
+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);
|
|
+ DmapAvRecord *record = DMAP_AV_RECORD (_record);
|
|
|
|
gint duration = 0;
|
|
gint32 bitrate = 0,
|
|
@@ -232,11 +236,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);
|
|
+ g_free (album);
|
|
+ g_free (artist);
|
|
+ g_free (genre);
|
|
+ g_free (title);
|
|
+ g_free (url);
|
|
|
|
return --nextid;
|
|
}
|
|
@@ -359,11 +363,11 @@ 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);
|
|
|
|
- daap_db->add = grl_daap_db_add;
|
|
+ daap_db->add = grl_daap_db_add_compat;
|
|
daap_db->lookup_by_id = grl_daap_db_lookup_by_id;
|
|
daap_db->foreach = grl_daap_db_foreach;
|
|
daap_db->count = grl_daap_db_count;
|
|
diff --git a/src/dmap/grl-daap-db.h b/src/dmap/grl-daap-db.h
|
|
index 2548c50..1a37a3a 100644
|
|
--- a/src/dmap/grl-daap-db.h
|
|
+++ b/src/dmap/grl-daap-db.h
|
|
@@ -24,6 +24,8 @@
|
|
#include <libdmapsharing/dmap.h>
|
|
#include <grilo.h>
|
|
|
|
+#include "grl-daap-compat.h"
|
|
+
|
|
G_BEGIN_DECLS
|
|
|
|
#define TYPE_GRL_DAAP_DB (grl_daap_db_get_type ())
|
|
diff --git a/src/dmap/grl-daap-record-factory.c b/src/dmap/grl-daap-record-factory.c
|
|
index 648fd85..d0c590f 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>
|
|
*
|
|
@@ -18,11 +18,16 @@
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
+#include <grilo.h>
|
|
+#include <libdmapsharing/dmap.h>
|
|
+
|
|
+#include "grl-daap-compat.h"
|
|
+#include "grl-common.h"
|
|
#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 ());
|
|
}
|
|
@@ -40,11 +45,11 @@ 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;
|
|
+ factory->create = grl_daap_record_factory_create_compat;
|
|
}
|
|
|
|
G_DEFINE_TYPE_WITH_CODE (GrlDAAPRecordFactory, grl_daap_record_factory, G_TYPE_OBJECT,
|
|
diff --git a/src/dmap/grl-daap-record-factory.h b/src/dmap/grl-daap-record-factory.h
|
|
index 45aa69a..f114bad 100644
|
|
--- a/src/dmap/grl-daap-record-factory.h
|
|
+++ b/src/dmap/grl-daap-record-factory.h
|
|
@@ -23,6 +23,8 @@
|
|
|
|
#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-daap-compat.h"
|
|
+
|
|
G_BEGIN_DECLS
|
|
|
|
#define TYPE_SIMPLE_DAAP_RECORD_FACTORY (grl_daap_record_factory_get_type ())
|
|
@@ -64,8 +66,6 @@ GType grl_daap_record_factory_get_type (void);
|
|
|
|
GrlDAAPRecordFactory *grl_daap_record_factory_new (void);
|
|
|
|
-DMAPRecord *grl_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
|
|
-
|
|
#endif /* __SIMPLE_DAAP_RECORD_FACTORY */
|
|
|
|
G_END_DECLS
|
|
diff --git a/src/dmap/grl-daap-record.c b/src/dmap/grl-daap-record.c
|
|
index 82bf2f9..4fa0c54 100644
|
|
--- a/src/dmap/grl-daap-record.c
|
|
+++ b/src/dmap/grl-daap-record.c
|
|
@@ -20,6 +20,11 @@
|
|
*
|
|
*/
|
|
|
|
+#include <grilo.h>
|
|
+#include <libdmapsharing/dmap.h>
|
|
+
|
|
+#include "grl-daap-compat.h"
|
|
+#include "grl-common.h"
|
|
#include "grl-daap-record.h"
|
|
|
|
struct GrlDAAPRecordPrivate {
|
|
@@ -226,7 +231,7 @@ grl_daap_record_new (void)
|
|
}
|
|
|
|
GInputStream *
|
|
-grl_daap_record_read (DAAPRecord *record, GError **error)
|
|
+grl_daap_record_read (DmapAvRecord *record, GError **error)
|
|
{
|
|
GFile *file;
|
|
GInputStream *stream;
|
|
@@ -280,9 +285,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;
|
|
}
|
|
@@ -290,7 +295,7 @@ 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);
|
|
}
|
|
@@ -298,7 +303,7 @@ grl_daap_record_dmap_iface_init (gpointer iface, gpointer data)
|
|
|
|
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_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
|
|
diff --git a/src/dmap/grl-daap-record.h b/src/dmap/grl-daap-record.h
|
|
index 7aae82d..42782b1 100644
|
|
--- a/src/dmap/grl-daap-record.h
|
|
+++ b/src/dmap/grl-daap-record.h
|
|
@@ -23,6 +23,8 @@
|
|
|
|
#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-daap-compat.h"
|
|
+
|
|
G_BEGIN_DECLS
|
|
|
|
#define TYPE_SIMPLE_DAAP_RECORD (grl_daap_record_get_type ())
|
|
@@ -69,8 +71,8 @@ typedef struct {
|
|
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);
|
|
+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 f3c4115..962f2b8 100644
|
|
--- a/src/dmap/grl-daap.c
|
|
+++ b/src/dmap/grl-daap.c
|
|
@@ -33,6 +33,7 @@
|
|
#include <stdlib.h>
|
|
#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-daap-compat.h"
|
|
#include "grl-common.h"
|
|
#include "grl-daap.h"
|
|
#include "grl-daap-db.h"
|
|
@@ -52,12 +53,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 +75,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 +107,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 +154,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 +165,15 @@ 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);
|
|
+ name = grl_dmap_service_get_name (service);
|
|
+ service_name = grl_dmap_service_get_service_name (service);
|
|
+
|
|
+ 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;
|
|
}
|
|
@@ -209,7 +217,7 @@ grl_daap_source_finalize (GObject *object)
|
|
static void
|
|
grl_daap_do_browse (ResultCbAndArgsAndDb *cb_and_db)
|
|
{
|
|
- grl_daap_db_browse (GRL_DAAP_DB(cb_and_db->db),
|
|
+ grl_daap_db_browse (GRL_DAAP_DB (cb_and_db->db),
|
|
cb_and_db->cb.container,
|
|
cb_and_db->cb.source,
|
|
cb_and_db->cb.op_id,
|
|
@@ -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;
|
|
+ name = grl_dmap_service_get_name (service);
|
|
+ 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,25 @@ 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,
|
|
+ name = grl_dmap_service_get_name (dmap_source->priv->service);
|
|
+ host = grl_dmap_service_get_host (dmap_source->priv->service);
|
|
+ port = grl_dmap_service_get_port (dmap_source->priv->service);
|
|
+
|
|
+ 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 +438,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 +456,25 @@ 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);
|
|
+
|
|
+ name = grl_dmap_service_get_name (dmap_source->priv->service);
|
|
+ host = grl_dmap_service_get_host (dmap_source->priv->service);
|
|
+ port = grl_dmap_service_get_port (dmap_source->priv->service);
|
|
+
|
|
+ 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-daap.h b/src/dmap/grl-daap.h
|
|
index 1119495..5271435 100644
|
|
--- a/src/dmap/grl-daap.h
|
|
+++ b/src/dmap/grl-daap.h
|
|
@@ -26,6 +26,8 @@
|
|
|
|
#include <grilo.h>
|
|
|
|
+#include "grl-daap-compat.h"
|
|
+
|
|
#define GRL_DAAP_SOURCE_TYPE (grl_daap_source_get_type ())
|
|
|
|
#define GRL_DAAP_SOURCE(obj) \
|
|
diff --git a/src/dmap/grl-dmap-compat.h b/src/dmap/grl-dmap-compat.h
|
|
new file mode 100644
|
|
index 0000000..cd1934f
|
|
--- /dev/null
|
|
+++ b/src/dmap/grl-dmap-compat.h
|
|
@@ -0,0 +1,108 @@
|
|
+/*
|
|
+ * Copyright (C) 2019 W. Michael Petullo
|
|
+ * Copyright (C) 2019 Igalia S.L.
|
|
+ *
|
|
+ * Contact: W. Michael Petullo <mike@flyn.org>
|
|
+ *
|
|
+ * This library is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU Lesser General Public License
|
|
+ * as published by the Free Software Foundation; version 2.1 of
|
|
+ * the License, or (at your option) any later version.
|
|
+ *
|
|
+ * This library is distributed in the hope that it will be useful, but
|
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * Lesser General Public License for more details.
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public
|
|
+ * License along with this library; if not, write to the Free Software
|
|
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
+ * 02110-1301 USA
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef _GRL_DMAP_COMPAT_H_
|
|
+#define _GRL_DMAP_COMPAT_H_
|
|
+
|
|
+#ifdef LIBDMAPSHARING_COMPAT
|
|
+
|
|
+/* Building against libdmapsharing 3 API. */
|
|
+
|
|
+#define DmapConnection DMAPConnection
|
|
+#define DmapConnectionFunc DMAPConnectionCallback
|
|
+#define dmap_connection_start dmap_connection_connect
|
|
+#define DmapDb DMAPDb
|
|
+#define DmapDbInterface DMAPDbIface
|
|
+#define DmapIdRecordFunc GHFunc
|
|
+#define DmapMdnsBrowser DMAPMdnsBrowser
|
|
+#define DmapMdnsService DMAPMdnsBrowserService
|
|
+#define DMAP_MDNS_SERVICE_TYPE_DAAP DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP
|
|
+#define DMAP_MDNS_SERVICE_TYPE_DPAP DMAP_MDNS_BROWSER_SERVICE_TYPE_DPAP
|
|
+#define DmapRecord DMAPRecord
|
|
+#define DmapRecordFactory DMAPRecordFactory
|
|
+#define DmapRecordFactoryInterface DMAPRecordFactoryIface
|
|
+#define DmapRecordInterface DMAPRecordIface
|
|
+
|
|
+static inline gchar *
|
|
+grl_dmap_service_get_name (DmapMdnsService *service)
|
|
+{
|
|
+ return g_strdup (service->name);
|
|
+}
|
|
+
|
|
+static inline gchar *
|
|
+grl_dmap_service_get_service_name (DmapMdnsService *service)
|
|
+{
|
|
+ return g_strdup (service->service_name);
|
|
+}
|
|
+
|
|
+static inline gchar *
|
|
+grl_dmap_service_get_host (DmapMdnsService *service)
|
|
+{
|
|
+ return g_strdup (service->host);
|
|
+}
|
|
+
|
|
+static inline guint
|
|
+grl_dmap_service_get_port (DmapMdnsService *service)
|
|
+{
|
|
+ return service->port;
|
|
+}
|
|
+
|
|
+#else
|
|
+
|
|
+/* Building against libdmapsharing 4 API. */
|
|
+
|
|
+static inline gchar *
|
|
+grl_dmap_service_get_name (DmapMdnsService *service)
|
|
+{
|
|
+ gchar *name;
|
|
+ g_object_get (service, "name", &name, NULL);
|
|
+ return name;
|
|
+}
|
|
+
|
|
+static inline gchar *
|
|
+grl_dmap_service_get_service_name (DmapMdnsService *service)
|
|
+{
|
|
+ gchar *service_name;
|
|
+ g_object_get (service, "service-name", &service_name, NULL);
|
|
+ return service_name;
|
|
+}
|
|
+
|
|
+static inline gchar *
|
|
+grl_dmap_service_get_host (DmapMdnsService *service)
|
|
+{
|
|
+ gchar *host;
|
|
+ g_object_get (service, "host", &host, NULL);
|
|
+ return host;
|
|
+}
|
|
+
|
|
+static inline guint
|
|
+grl_dmap_service_get_port (DmapMdnsService *service)
|
|
+{
|
|
+ guint port;
|
|
+ g_object_get (service, "port", &port, NULL);
|
|
+ return port;
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
+#endif /* _GRL_DMAP_COMPAT_H_ */
|
|
diff --git a/src/dmap/grl-dpap-compat.h b/src/dmap/grl-dpap-compat.h
|
|
new file mode 100644
|
|
index 0000000..b996464
|
|
--- /dev/null
|
|
+++ b/src/dmap/grl-dpap-compat.h
|
|
@@ -0,0 +1,116 @@
|
|
+/*
|
|
+ * Copyright (C) 2019 W. Michael Petullo
|
|
+ * Copyright (C) 2019 Igalia S.L.
|
|
+ *
|
|
+ * Contact: W. Michael Petullo <mike@flyn.org>
|
|
+ *
|
|
+ * This library is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU Lesser General Public License
|
|
+ * as published by the Free Software Foundation; version 2.1 of
|
|
+ * the License, or (at your option) any later version.
|
|
+ *
|
|
+ * This library is distributed in the hope that it will be useful, but
|
|
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
+ * Lesser General Public License for more details.
|
|
+ *
|
|
+ * You should have received a copy of the GNU Lesser General Public
|
|
+ * License along with this library; if not, write to the Free Software
|
|
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
+ * 02110-1301 USA
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef _GRL_DPAP_COMPAT_H_
|
|
+#define _GRL_DPAP_COMPAT_H_
|
|
+
|
|
+#include "grl-dmap-compat.h"
|
|
+
|
|
+#ifdef LIBDMAPSHARING_COMPAT
|
|
+
|
|
+DMAPRecord *grl_dpap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data, GError **error);
|
|
+guint grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record, GError **error);
|
|
+
|
|
+/* Building against libdmapsharing 3 API. */
|
|
+
|
|
+#define dmap_image_connection_new dpap_connection_new
|
|
+#define DmapImageRecord DPAPRecord
|
|
+#define DmapImageRecordInterface DPAPRecordIface
|
|
+#define DMAP_IMAGE_RECORD DPAP_RECORD
|
|
+#define DMAP_TYPE_IMAGE_RECORD DPAP_TYPE_RECORD
|
|
+#define IS_DMAP_IMAGE_RECORD IS_DPAP_RECORD
|
|
+
|
|
+static inline DmapRecord *
|
|
+grl_dpap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data)
|
|
+{
|
|
+ return grl_dpap_record_factory_create (factory, user_data, NULL);
|
|
+}
|
|
+
|
|
+static inline void
|
|
+set_thumbnail (GValue *value, GByteArray *thumbnail)
|
|
+{
|
|
+ g_value_set_pointer (value, thumbnail);
|
|
+}
|
|
+
|
|
+static inline GByteArray *
|
|
+get_thumbnail (GByteArray *thumbnail, const GValue *value)
|
|
+{
|
|
+ if (thumbnail)
|
|
+ g_byte_array_unref (thumbnail);
|
|
+ return g_byte_array_ref (g_value_get_pointer (value));
|
|
+}
|
|
+
|
|
+static inline void
|
|
+unref_thumbnail (GByteArray *thumbnail)
|
|
+{
|
|
+ g_byte_array_unref (thumbnail);
|
|
+}
|
|
+
|
|
+static inline guint
|
|
+grl_dpap_db_add_compat (DMAPDb *_db, DmapRecord *_record)
|
|
+{
|
|
+ return grl_dpap_db_add (_db, _record, NULL);
|
|
+}
|
|
+
|
|
+#else
|
|
+
|
|
+/* Building against libdmapsharing 4 API. */
|
|
+
|
|
+DmapRecord *grl_dpap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error);
|
|
+guint grl_dpap_db_add (DmapDb *_db, DmapRecord *_record, GError **error);
|
|
+
|
|
+static inline void
|
|
+set_thumbnail (GValue *value, GArray *thumbnail)
|
|
+{
|
|
+ g_value_set_boxed (value, thumbnail);
|
|
+}
|
|
+
|
|
+static inline GArray *
|
|
+get_thumbnail (GArray *thumbnail, const GValue *value)
|
|
+{
|
|
+ if (thumbnail)
|
|
+ g_array_unref (thumbnail);
|
|
+ return g_value_get_boxed (value);
|
|
+}
|
|
+
|
|
+static inline void
|
|
+unref_thumbnail (GArray *thumbnail)
|
|
+{
|
|
+ g_array_unref (thumbnail);
|
|
+}
|
|
+
|
|
+static inline DmapRecord *
|
|
+grl_dpap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data, GError **error)
|
|
+{
|
|
+ return grl_dpap_record_factory_create (factory, user_data, error);
|
|
+}
|
|
+
|
|
+static inline guint
|
|
+grl_dpap_db_add_compat (DmapDb *_db, DmapRecord *_record, GError **error)
|
|
+{
|
|
+ return grl_dpap_db_add (_db, _record, error);
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
+#endif /* _GRL_DPAP_COMPAT_H_ */
|
|
diff --git a/src/dmap/grl-dpap-db.c b/src/dmap/grl-dpap-db.c
|
|
index 8be278b..cd647ee 100644
|
|
--- a/src/dmap/grl-dpap-db.c
|
|
+++ b/src/dmap/grl-dpap-db.c
|
|
@@ -24,12 +24,16 @@
|
|
#include "config.h"
|
|
#endif
|
|
|
|
+#include <grilo.h>
|
|
#include <glib/gi18n-lib.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <glib.h>
|
|
#include <string.h>
|
|
+#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-dpap-compat.h"
|
|
+#include "grl-common.h"
|
|
#include "grl-dpap-db.h"
|
|
|
|
#define PHOTOS_ID "photos"
|
|
@@ -71,23 +75,23 @@ grl_dpap_db_new (void)
|
|
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,
|
|
+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;
|
|
@@ -118,21 +122,21 @@ set_insert (GHashTable *category, const char *category_name, char *set_name, Grl
|
|
g_object_unref (container);
|
|
}
|
|
|
|
-static guint
|
|
-grl_dpap_db_add (DMAPDb *_db, DMAPRecord *_record)
|
|
+guint
|
|
+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);
|
|
+ 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,
|
|
@@ -177,12 +181,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_free(url);
|
|
- g_byte_array_unref(thumbnail);
|
|
+ g_free (filename);
|
|
+ g_free (aspectratio);
|
|
+ g_free (format);
|
|
+ g_free (comments);
|
|
+ g_free (url);
|
|
+ g_array_unref (thumbnail);
|
|
|
|
return --nextid;
|
|
}
|
|
@@ -298,11 +302,11 @@ 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);
|
|
|
|
- dpap_db->add = grl_dpap_db_add;
|
|
+ dpap_db->add = grl_dpap_db_add_compat;
|
|
dpap_db->lookup_by_id = grl_dpap_db_lookup_by_id;
|
|
dpap_db->foreach = grl_dpap_db_foreach;
|
|
dpap_db->count = grl_dpap_db_count;
|
|
diff --git a/src/dmap/grl-dpap-db.h b/src/dmap/grl-dpap-db.h
|
|
index d3abcba..a21ad7a 100644
|
|
--- a/src/dmap/grl-dpap-db.h
|
|
+++ b/src/dmap/grl-dpap-db.h
|
|
@@ -24,6 +24,8 @@
|
|
#include <libdmapsharing/dmap.h>
|
|
#include <grilo.h>
|
|
|
|
+#include "grl-dpap-compat.h"
|
|
+
|
|
G_BEGIN_DECLS
|
|
|
|
#define TYPE_GRL_DPAP_DB (grl_dpap_db_get_type ())
|
|
diff --git a/src/dmap/grl-dpap-record-factory.c b/src/dmap/grl-dpap-record-factory.c
|
|
index 3d0c87a..860d957 100644
|
|
--- a/src/dmap/grl-dpap-record-factory.c
|
|
+++ b/src/dmap/grl-dpap-record-factory.c
|
|
@@ -18,11 +18,18 @@
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
+#include <grilo.h>
|
|
+#include <libdmapsharing/dmap.h>
|
|
+
|
|
+#include "grl-dpap-compat.h"
|
|
+#include "grl-common.h"
|
|
#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 ());
|
|
}
|
|
@@ -40,11 +47,11 @@ 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;
|
|
+ factory->create = grl_dpap_record_factory_create_compat;
|
|
}
|
|
|
|
G_DEFINE_TYPE_WITH_CODE (GrlDPAPRecordFactory, grl_dpap_record_factory, G_TYPE_OBJECT,
|
|
diff --git a/src/dmap/grl-dpap-record-factory.h b/src/dmap/grl-dpap-record-factory.h
|
|
index 3f4ca54..899fd0a 100644
|
|
--- a/src/dmap/grl-dpap-record-factory.h
|
|
+++ b/src/dmap/grl-dpap-record-factory.h
|
|
@@ -23,6 +23,8 @@
|
|
|
|
#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-dpap-compat.h"
|
|
+
|
|
G_BEGIN_DECLS
|
|
|
|
#define TYPE_SIMPLE_DPAP_RECORD_FACTORY (grl_dpap_record_factory_get_type ())
|
|
@@ -64,7 +66,7 @@ GType grl_dpap_record_factory_get_type (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 14eb1de..0afb2b8 100644
|
|
--- a/src/dmap/grl-dpap-record.c
|
|
+++ b/src/dmap/grl-dpap-record.c
|
|
@@ -20,6 +20,11 @@
|
|
*
|
|
*/
|
|
|
|
+#include <grilo.h>
|
|
+#include <libdmapsharing/dmap.h>
|
|
+
|
|
+#include "grl-dpap-compat.h"
|
|
+#include "grl-common.h"
|
|
#include "grl-dpap-record.h"
|
|
|
|
struct GrlDPAPRecordPrivate {
|
|
@@ -28,7 +33,7 @@ struct GrlDPAPRecordPrivate {
|
|
gint creationdate;
|
|
gint rating;
|
|
char *filename;
|
|
- GByteArray *thumbnail;
|
|
+ void *thumbnail; /* GByteArray or GArray, depending on libdmapsharing ver. */
|
|
char *aspectratio;
|
|
gint height;
|
|
gint width;
|
|
@@ -56,7 +61,7 @@ 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_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
|
|
@@ -104,9 +109,7 @@ grl_dpap_record_set_property (GObject *object,
|
|
record->priv->comments = g_value_dup_string (value);
|
|
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));
|
|
+ record->priv->thumbnail = get_thumbnail (record->priv->thumbnail, value);
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
@@ -154,7 +157,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);
|
|
+ set_thumbnail (value, record->priv->thumbnail);
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
@@ -169,7 +172,7 @@ grl_dpap_record_new (void)
|
|
}
|
|
|
|
GInputStream *
|
|
-grl_dpap_record_read (DPAPRecord *record, GError **error)
|
|
+grl_dpap_record_read (DmapImageRecord *record, GError **error)
|
|
{
|
|
GFile *file;
|
|
GInputStream *stream;
|
|
@@ -215,9 +218,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 +228,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);
|
|
}
|
|
@@ -242,7 +245,7 @@ grl_dpap_record_finalize (GObject *object)
|
|
g_free (record->priv->comments);
|
|
|
|
if (record->priv->thumbnail)
|
|
- g_byte_array_unref (record->priv->thumbnail);
|
|
+ unref_thumbnail (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 203e57e..77eece0 100644
|
|
--- a/src/dmap/grl-dpap-record.h
|
|
+++ b/src/dmap/grl-dpap-record.h
|
|
@@ -23,6 +23,8 @@
|
|
|
|
#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-dpap-compat.h"
|
|
+
|
|
G_BEGIN_DECLS
|
|
|
|
#define TYPE_SIMPLE_DPAP_RECORD (grl_dpap_record_get_type ())
|
|
@@ -69,8 +71,8 @@ typedef struct {
|
|
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);
|
|
+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 9829ec2..6339654 100644
|
|
--- a/src/dmap/grl-dpap.c
|
|
+++ b/src/dmap/grl-dpap.c
|
|
@@ -33,6 +33,7 @@
|
|
#include <stdlib.h>
|
|
#include <libdmapsharing/dmap.h>
|
|
|
|
+#include "grl-dpap-compat.h"
|
|
#include "grl-common.h"
|
|
#include "grl-dpap.h"
|
|
#include "grl-dpap-db.h"
|
|
@@ -57,12 +58,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 +80,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 +112,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 +159,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 +170,14 @@ 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);
|
|
+ name = grl_dmap_service_get_name (service);
|
|
+ service_name = grl_dmap_service_get_service_name (service);
|
|
+ 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 +186,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 +248,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 +273,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 +298,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 +313,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;
|
|
+ name = grl_dmap_service_get_name (service);
|
|
+ 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 +338,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 +406,25 @@ 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,
|
|
+ name = grl_dmap_service_get_name (dmap_source->priv->service);
|
|
+ host = grl_dmap_service_get_host (dmap_source->priv->service);
|
|
+ port = grl_dmap_service_get_port (dmap_source->priv->service);
|
|
+
|
|
+ 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 +436,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 +454,25 @@ 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);
|
|
+
|
|
+ name = grl_dmap_service_get_name (dmap_source->priv->service);
|
|
+ host = grl_dmap_service_get_host (dmap_source->priv->service);
|
|
+ port = grl_dmap_service_get_port (dmap_source->priv->service);
|
|
+
|
|
+ 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);
|
|
diff --git a/src/dmap/grl-dpap.h b/src/dmap/grl-dpap.h
|
|
index ee596b5..30cd61e 100644
|
|
--- a/src/dmap/grl-dpap.h
|
|
+++ b/src/dmap/grl-dpap.h
|
|
@@ -26,6 +26,8 @@
|
|
|
|
#include <grilo.h>
|
|
|
|
+#include "grl-dpap-compat.h"
|
|
+
|
|
#define GRL_DPAP_SOURCE_TYPE (grl_dpap_source_get_type ())
|
|
|
|
#define GRL_DPAP_SOURCE(obj) \
|
|
diff --git a/src/dmap/meson.build b/src/dmap/meson.build
|
|
index 2907a80..817ff5d 100644
|
|
--- a/src/dmap/meson.build
|
|
+++ b/src/dmap/meson.build
|
|
@@ -31,6 +31,15 @@ dpap_sources = [
|
|
'grl-dpap.h',
|
|
]
|
|
|
|
+args = [
|
|
+ '-DG_LOG_DOMAIN="GrlDmap"',
|
|
+ '-DHAVE_CONFIG_H',
|
|
+]
|
|
+
|
|
+if not libdmapsharing4_dep.found()
|
|
+ args += '-DLIBDMAPSHARING_COMPAT'
|
|
+endif
|
|
+
|
|
configure_file(output: 'config.h',
|
|
configuration: cdata)
|
|
|
|
@@ -39,17 +48,11 @@ shared_library('grldaap',
|
|
install: true,
|
|
install_dir: pluginsdir,
|
|
dependencies: must_deps + plugins[dmap_idx][REQ_DEPS] + plugins[dmap_idx][OPT_DEPS],
|
|
- c_args: [
|
|
- '-DG_LOG_DOMAIN="GrlDmap"',
|
|
- '-DHAVE_CONFIG_H',
|
|
- ])
|
|
+ c_args: args)
|
|
|
|
shared_library('grldpap',
|
|
sources: dpap_sources,
|
|
install: true,
|
|
install_dir: pluginsdir,
|
|
dependencies: must_deps + plugins[dmap_idx][REQ_DEPS] + plugins[dmap_idx][OPT_DEPS],
|
|
- c_args: [
|
|
- '-DG_LOG_DOMAIN="GrlDmap"',
|
|
- '-DHAVE_CONFIG_H',
|
|
- ])
|
|
+ c_args: args)
|