[rhythmbox: 1/2] Port DAAP plugin to libdmapsharing-4.0 API
- From: Jonathan Matthew <jmatthew src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox: 1/2] Port DAAP plugin to libdmapsharing-4.0 API
- Date: Tue, 18 Jan 2022 00:02:55 +0000 (UTC)
commit ffbd5ca80e58707518af43f202b710117aadc277
Author: W. Michael Petullo <mike flyn org>
Date: Tue Jan 18 00:02:54 2022 +0000
Port DAAP plugin to libdmapsharing-4.0 API
meson.build | 12 +-
plugins/daap/meson.build | 12 +-
plugins/daap/rb-daap-compat.h | 96 ++++++++++++
plugins/daap/rb-daap-container-record.c | 16 +-
plugins/daap/rb-daap-container-record.h | 14 +-
plugins/daap/rb-daap-plugin.c | 109 ++++++++-----
plugins/daap/rb-daap-plugin.h | 2 +
plugins/daap/rb-daap-record-factory.c | 15 +-
plugins/daap/rb-daap-record-factory.h | 4 +-
plugins/daap/rb-daap-record.c | 12 +-
plugins/daap/rb-daap-record.h | 14 +-
plugins/daap/rb-daap-sharing.c | 8 +-
plugins/daap/rb-daap-sharing.h | 3 +
plugins/daap/rb-daap-source.c | 44 +++---
plugins/daap/rb-daap-source.h | 8 +-
plugins/daap/rb-dacp-compat.h | 99 ++++++++++++
plugins/daap/rb-dacp-pairing-page.c | 69 ++++----
plugins/daap/rb-dacp-pairing-page.h | 9 +-
plugins/daap/rb-dacp-player.c | 61 ++++----
plugins/daap/rb-dacp-player.h | 4 +-
plugins/daap/rb-dmap-compat.h | 173 +++++++++++++++++++++
plugins/daap/rb-dmap-container-db-adapter.c | 28 ++--
plugins/daap/rb-dmap-container-db-adapter.h | 1 +
plugins/daap/rb-rhythmdb-dmap-db-adapter.c | 32 ++--
.../daap/rb-rhythmdb-query-model-dmap-db-adapter.c | 32 ++--
25 files changed, 661 insertions(+), 216 deletions(-)
---
diff --git a/meson.build b/meson.build
index 7279198d1..ccb9da28e 100644
--- a/meson.build
+++ b/meson.build
@@ -232,11 +232,17 @@ endif
have_libdmapsharing = false
if get_option('daap').allowed()
- libdmapsharing = dependency('libdmapsharing-3.0', version: '>= 2.9.19', required: get_option('daap'))
+ libdmapsharing4 = dependency('libdmapsharing-4.0', version: '>= 3.9.4', required: false)
- if libdmapsharing.found()
- cdata.set('HAVE_LIBDMAPSHARING', 1)
+ if libdmapsharing4.found()
+ cdata.set('HAVE_LIBDMAPSHARING4', 1)
have_libdmapsharing = true
+ else
+ libdmapsharing = dependency('libdmapsharing-3.0', version: '>= 2.9.19', required: get_option('daap'))
+ if libdmapsharing.found()
+ cdata.set('HAVE_LIBDMAPSHARING', 1)
+ have_libdmapsharing = true
+ endif
endif
endif
diff --git a/plugins/daap/meson.build b/plugins/daap/meson.build
index f9e28f2fa..d433b4bb6 100644
--- a/plugins/daap/meson.build
+++ b/plugins/daap/meson.build
@@ -21,7 +21,15 @@ daap_sources = [
'rb-rhythmdb-query-model-dmap-db-adapter.c',
]
-daap_dependencies = [rhythmbox_core_dep, libdmapsharing, pango]
+daap_dependencies = [rhythmbox_core_dep, pango]
+args = ['-DHAVE_CONFIG_H']
+
+if libdmapsharing4.found()
+ daap_dependencies += libdmapsharing4
+else
+ args += '-DLIBDMAPSHARING_COMPAT'
+ daap_dependencies += libdmapsharing
+endif
if use_libsecret
daap_dependencies += libsecret
@@ -29,7 +37,7 @@ endif
shared_module('daap',
daap_sources,
- c_args: ['-DHAVE_CONFIG_H'],
+ c_args: args,
dependencies: daap_dependencies,
install: true,
install_dir: daap_plugin_dir)
diff --git a/plugins/daap/rb-daap-compat.h b/plugins/daap/rb-daap-compat.h
new file mode 100644
index 000000000..d5e38c342
--- /dev/null
+++ b/plugins/daap/rb-daap-compat.h
@@ -0,0 +1,96 @@
+/*
+ * Compatibility layer between libdmapsharing 3.0 and 4.0 APIs
+ *
+ * Copyright (C) 2020 W. Michael Petullo <mike flyn org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Rhythmbox authors hereby grant permission for non-GPL compatible
+ * GStreamer plugins to be used and distributed together with GStreamer
+ * and Rhythmbox. This permission is above and beyond the permissions granted
+ * by the GPL license by which Rhythmbox is covered. If you modify this code
+ * you may extend this exception to your version of the code, but you are not
+ * obligated to do so. If you do not wish to do so, delete this exception
+ * statement from your version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef __RB_DAAP_COMPAT
+#define __RB_DAAP_COMPAT
+
+#include "rb-dmap-compat.h"
+
+#ifdef LIBDMAPSHARING_COMPAT
+
+/* Building against libdmapsharing 3 API. */
+
+#define dmap_av_connection_new daap_connection_new
+#define DmapAvRecord DAAPRecord
+#define DMAP_AV_RECORD DAAP_RECORD
+#define DmapAvRecordInterface DAAPRecordIface
+#define DmapAvShare DAAPShare
+#define dmap_av_share_new daap_share_new
+#define DMAP_TYPE_AV_RECORD DAAP_TYPE_RECORD
+
+DmapRecord *rb_daap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error);
+
+void rb_daap_container_record_add_entry(DmapContainerRecord *container_record,
+ DmapRecord *record,
+ gint id,
+ GError **error);
+
+static inline DmapRecord *
+rb_daap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data)
+{
+ return rb_daap_record_factory_create (factory, user_data, NULL);
+}
+
+static inline void
+rb_daap_container_record_add_entry_compat(DmapContainerRecord *container_record,
+ DmapRecord *record,
+ gint id)
+{
+ rb_daap_container_record_add_entry(container_record, record, id, NULL);
+}
+
+#else
+
+/* Building against libdmapsharing 4 API. */
+
+void rb_daap_container_record_add_entry(DmapContainerRecord *container_record,
+ DmapRecord *record,
+ gint id,
+ GError **error);
+
+DmapRecord *rb_daap_record_factory_create (DmapRecordFactory *factory, gpointer user_data, GError **error);
+
+static inline DmapRecord *
+rb_daap_record_factory_create_compat (DmapRecordFactory *factory, gpointer user_data, GError **error)
+{
+ return rb_daap_record_factory_create (factory, user_data, error);
+}
+
+static inline void
+rb_daap_container_record_add_entry_compat(DmapContainerRecord *container_record,
+ DmapRecord *record,
+ gint id,
+ GError **error)
+{
+ rb_daap_container_record_add_entry(container_record, record, id, error);
+}
+
+#endif
+
+#endif /* __RB_DAAP_COMPAT */
diff --git a/plugins/daap/rb-daap-container-record.c b/plugins/daap/rb-daap-container-record.c
index fe972ded0..e9088565d 100644
--- a/plugins/daap/rb-daap-container-record.c
+++ b/plugins/daap/rb-daap-container-record.c
@@ -89,20 +89,20 @@ rb_daap_container_record_get_property (GObject *object,
}
guint
-rb_daap_container_record_get_id (DMAPContainerRecord *record)
+rb_daap_container_record_get_id (DmapContainerRecord *record)
{
return GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (RB_DAAP_CONTAINER_RECORD
(record)->priv->source), "daap_id"));
}
void
-rb_daap_container_record_add_entry (DMAPContainerRecord *container_record,
- DMAPRecord *record, gint id)
+rb_daap_container_record_add_entry (DmapContainerRecord *container_record,
+ DmapRecord *record, gint id, GError **error)
{
g_error ("Unimplemented");
}
guint64
-rb_daap_container_record_get_entry_count (DMAPContainerRecord *record)
+rb_daap_container_record_get_entry_count (DmapContainerRecord *record)
{
RhythmDBQueryModel *model;
guint64 count;
@@ -115,8 +115,8 @@ rb_daap_container_record_get_entry_count (DMAPContainerRecord *record)
return count;
}
-DMAPDb *
-rb_daap_container_record_get_entries (DMAPContainerRecord *record)
+DmapDb *
+rb_daap_container_record_get_entries (DmapContainerRecord *record)
{
RhythmDBQueryModel *model;
g_object_get (RB_DAAP_CONTAINER_RECORD (record)->priv->source,
@@ -154,12 +154,12 @@ rb_daap_container_record_class_finalize (RBDAAPContainerRecordClass *klass)
static void
rb_daap_container_record_daap_iface_init (gpointer iface, gpointer data)
{
- DMAPContainerRecordIface *dmap_container_record = iface;
+ DmapContainerRecordInterface *dmap_container_record = iface;
g_assert (G_TYPE_FROM_INTERFACE (dmap_container_record) == DMAP_TYPE_CONTAINER_RECORD);
dmap_container_record->get_id = rb_daap_container_record_get_id;
- dmap_container_record->add_entry = rb_daap_container_record_add_entry;
+ dmap_container_record->add_entry = rb_daap_container_record_add_entry_compat;
dmap_container_record->get_entry_count = rb_daap_container_record_get_entry_count;
dmap_container_record->get_entries = rb_daap_container_record_get_entries;
}
diff --git a/plugins/daap/rb-daap-container-record.h b/plugins/daap/rb-daap-container-record.h
index fc068b321..4ce53830f 100644
--- a/plugins/daap/rb-daap-container-record.h
+++ b/plugins/daap/rb-daap-container-record.h
@@ -32,6 +32,7 @@
#include <libdmapsharing/dmap.h>
+#include "rb-daap-compat.h"
#include "rb-playlist-source.h"
G_BEGIN_DECLS
@@ -57,15 +58,16 @@ typedef struct {
GType rb_daap_container_record_get_type (void);
-guint rb_daap_container_record_get_id (DMAPContainerRecord *record);
+guint rb_daap_container_record_get_id (DmapContainerRecord *record);
-void rb_daap_container_record_add_entry (DMAPContainerRecord *container_record,
- DMAPRecord *record,
- gint id);
+void rb_daap_container_record_add_entry (DmapContainerRecord *container_record,
+ DmapRecord *record,
+ gint id,
+ GError **error);
-guint64 rb_daap_container_record_get_entry_count (DMAPContainerRecord *record);
+guint64 rb_daap_container_record_get_entry_count (DmapContainerRecord *record);
-DMAPDb *rb_daap_container_record_get_entries (DMAPContainerRecord *record);
+DmapDb *rb_daap_container_record_get_entries (DmapContainerRecord *record);
RBDAAPContainerRecord *rb_daap_container_record_new (char *name,
RBPlaylistSource *model);
diff --git a/plugins/daap/rb-daap-plugin.c b/plugins/daap/rb-daap-plugin.c
index d0ac4e622..f0570b100 100644
--- a/plugins/daap/rb-daap-plugin.c
+++ b/plugins/daap/rb-daap-plugin.c
@@ -94,9 +94,9 @@ struct _RBDaapPlugin
GSimpleAction *new_share_action;
- DMAPMdnsBrowser *mdns_browser;
+ DmapMdnsBrowser *mdns_browser;
- DACPShare *dacp_share;
+ DmapControlShare *dacp_share;
GHashTable *source_lookup;
@@ -206,7 +206,8 @@ impl_activate (PeasActivatable *bplugin)
plugin->dacp_share = rb_daap_create_dacp_share (G_OBJECT (plugin));
if (g_settings_get_boolean (plugin->dacp_settings, "enable-remote")) {
- dacp_share_start_lookup (plugin->dacp_share);
+ GError *error = NULL;
+ dmap_control_share_start_lookup_compat (plugin->dacp_share, &error);
}
register_daap_dbus_iface (plugin);
@@ -270,48 +271,65 @@ find_source_by_service_name (RBDaapPlugin *plugin,
}
static void
-mdns_service_added (DMAPMdnsBrowser *browser,
- DMAPMdnsBrowserService *service,
+mdns_service_added (DmapMdnsBrowser *browser,
+ DmapMdnsService *service,
RBDaapPlugin *plugin)
{
RBSource *source;
g_autoptr(RBShell) shell = NULL;
+ gchar *service_name = NULL;
+ gchar *name = NULL;
+ gchar *host = NULL;
+ guint port;
+ gboolean password_protected;
+
+ rb_dmap_mdns_service_get_compat(service,
+ &service_name,
+ &name,
+ &host,
+ &port,
+ &password_protected);
+
rb_debug ("New service: %s name=%s host=%s port=%u password=%d",
- service->service_name,
- service->name,
- service->host,
- service->port,
- service->password_protected);
+ service_name,
+ name,
+ host,
+ port,
+ password_protected);
- source = find_source_by_service_name (plugin, service->service_name);
+ source = find_source_by_service_name (plugin, service_name);
if (source == NULL) {
g_object_get (plugin, "object", &shell, NULL);
source = rb_daap_source_new (shell,
G_OBJECT (plugin),
- service->service_name,
- service->name,
- service->host,
- service->port,
- service->password_protected);
- g_hash_table_insert (plugin->source_lookup, g_strdup (service->service_name), source);
+ service_name,
+ name,
+ host,
+ port,
+ password_protected);
+ g_hash_table_insert (plugin->source_lookup, g_strdup (service_name), source);
rb_shell_append_display_page (shell,
RB_DISPLAY_PAGE (source),
RB_DISPLAY_PAGE_GROUP_SHARED);
} else {
g_object_set (source,
- "name", service->name,
- "host", service->host,
- "port", service->port,
- "password-protected", service->password_protected,
+ "name", name,
+ "host", host,
+ "port", port,
+ "password-protected", password_protected,
NULL);
}
+
+ g_free (service_name);
+ g_free (name);
+ g_free (host);
}
static void
-mdns_service_removed (DMAPMdnsBrowser *browser,
+mdns_service_removed (DmapMdnsBrowser *browser,
const char *service_name,
RBDaapPlugin *plugin)
{
@@ -347,7 +365,7 @@ start_browsing (RBDaapPlugin *plugin)
return;
}
- plugin->mdns_browser = dmap_mdns_browser_new (DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP);
+ plugin->mdns_browser = dmap_mdns_browser_new (DMAP_MDNS_SERVICE_TYPE_DAAP);
if (plugin->mdns_browser == NULL) {
g_warning ("Unable to start mDNS browsing");
return;
@@ -406,10 +424,11 @@ static void
dacp_settings_changed_cb (GSettings *settings, const char *key, RBDaapPlugin *plugin)
{
if (g_strcmp0 (key, "enable-remote") == 0) {
+ GError *error = NULL;
if (g_settings_get_boolean (settings, key)) {
- dacp_share_start_lookup (plugin->dacp_share);
+ dmap_control_share_start_lookup_compat (plugin->dacp_share, &error);
} else {
- dacp_share_stop_lookup (plugin->dacp_share);
+ dmap_control_share_stop_lookup_compat (plugin->dacp_share, &error);
}
}
}
@@ -447,7 +466,7 @@ new_daap_share_location_added_cb (RBURIDialog *dialog,
char *host;
char *p;
int port = 3689;
- DMAPMdnsBrowserService service;
+ DmapMdnsService *service;
host = g_strdup (location);
p = strrchr (host, ':');
@@ -457,17 +476,18 @@ new_daap_share_location_added_cb (RBURIDialog *dialog,
}
rb_debug ("adding manually specified DAAP share at %s", location);
- service.name = (char *) location;
- service.host = (char *) host;
- service.service_name = service.name;
- service.port = port;
- service.password_protected = FALSE;
+ service = rb_dmap_mdns_service_new_compat(location,
+ location,
+ host,
+ port,
+ FALSE);
+
mdns_service_added (NULL,
- &service,
+ service,
plugin);
g_free (host);
-
+ rb_dmap_mdns_service_free_compat(service);
}
static void
@@ -743,16 +763,27 @@ daap_dbus_method_call (GDBusConnection *connection,
}
if (g_strcmp0 (method_name, "AddDAAPSource") == 0) {
- DMAPMdnsBrowserService service = {0,};
- g_variant_get (parameters, "(&s&su)", &service.name, &service.host, &service.port);
- service.password_protected = FALSE;
- service.service_name = service.name;
+ DmapMdnsService *service;
+ gchar *name = NULL;
+ gchar *host = NULL;
+ guint port;
+
+ g_variant_get (parameters, "(&s&su)", &name, &host, &port);
+
+ service = rb_dmap_mdns_service_new_compat(name,
+ name,
+ host,
+ port,
+ FALSE);
- rb_debug ("adding DAAP source %s (%s:%d)", service.name, service.host, service.port);
- mdns_service_added (NULL, &service, plugin);
+ rb_debug ("adding DAAP source %s (%s:%d)", name, host, port);
+ mdns_service_added (NULL, service, plugin);
g_dbus_method_invocation_return_value (invocation, NULL);
+ g_free(name);
+ g_free(host);
+ rb_dmap_mdns_service_free_compat(service);
} else if (g_strcmp0 (method_name, "RemoveDAAPSource") == 0) {
const char *service_name;
diff --git a/plugins/daap/rb-daap-plugin.h b/plugins/daap/rb-daap-plugin.h
index 7a06064b5..5119a890a 100644
--- a/plugins/daap/rb-daap-plugin.h
+++ b/plugins/daap/rb-daap-plugin.h
@@ -29,7 +29,9 @@
#define __RB_DAAP_PLUGIN_H
#include <libpeas/peas.h>
+#include <libdmapsharing/dmap.h>
+#include "rb-daap-compat.h"
#include "rb-daap-source.h"
G_BEGIN_DECLS
diff --git a/plugins/daap/rb-daap-record-factory.c b/plugins/daap/rb-daap-record-factory.c
index 35d920ead..cae9f52a6 100644
--- a/plugins/daap/rb-daap-record-factory.c
+++ b/plugins/daap/rb-daap-record-factory.c
@@ -31,13 +31,14 @@
#include "rb-daap-record-factory.h"
#include "rb-daap-record.h"
-DMAPRecord *
-rb_daap_record_factory_create (DMAPRecordFactory *factory,
- gpointer user_data)
+DmapRecord *
+rb_daap_record_factory_create (DmapRecordFactory *factory,
+ gpointer user_data,
+ GError **error)
{
- DAAPRecord *record;
+ DmapAvRecord *record;
- record = DAAP_RECORD (rb_daap_record_new ((RhythmDBEntry *) user_data));
+ record = DMAP_AV_RECORD (rb_daap_record_new ((RhythmDBEntry *) user_data));
return (DMAP_RECORD (record));
}
@@ -60,11 +61,11 @@ rb_daap_record_factory_class_finalize (RBDAAPRecordFactoryClass *klass)
static void
rb_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 = rb_daap_record_factory_create;
+ factory->create = rb_daap_record_factory_create_compat;
}
G_DEFINE_DYNAMIC_TYPE_EXTENDED (RBDAAPRecordFactory,
diff --git a/plugins/daap/rb-daap-record-factory.h b/plugins/daap/rb-daap-record-factory.h
index f0b6bf018..5cf07c17e 100644
--- a/plugins/daap/rb-daap-record-factory.h
+++ b/plugins/daap/rb-daap-record-factory.h
@@ -32,6 +32,8 @@
#include <libdmapsharing/dmap.h>
+#include "rb-daap-compat.h"
+
G_BEGIN_DECLS
#define RB_TYPE_DAAP_RECORD_FACTORY (rb_daap_record_factory_get_type ())
@@ -60,7 +62,7 @@ GType rb_daap_record_factory_get_type (void);
RBDAAPRecordFactory *rb_daap_record_factory_new (void);
-DMAPRecord *rb_daap_record_factory_create (DMAPRecordFactory *factory, gpointer user_data);
+DmapRecord *rb_daap_record_factory_create (DmapRecordFactory *factory, gpointer user_data,
GError **error);
void _rb_daap_record_factory_register_type (GTypeModule *module);
diff --git a/plugins/daap/rb-daap-record.c b/plugins/daap/rb-daap-record.c
index 400ad97a5..9fcbe7669 100644
--- a/plugins/daap/rb-daap-record.c
+++ b/plugins/daap/rb-daap-record.c
@@ -254,7 +254,7 @@ rb_daap_record_get_property (GObject *object,
}
gboolean
-rb_daap_record_itunes_compat (DAAPRecord *record)
+rb_daap_record_itunes_compat (DmapAvRecord *record)
{
const gchar *format = RB_DAAP_RECORD (record)->priv->real_format;
@@ -265,7 +265,7 @@ rb_daap_record_itunes_compat (DAAPRecord *record)
}
GInputStream *
-rb_daap_record_read (DAAPRecord *record, GError **error)
+rb_daap_record_read (DmapAvRecord *record, GError **error)
{
GFile *file;
GInputStream *fnval = NULL;
@@ -353,9 +353,9 @@ rb_daap_record_class_finalize (RBDAAPRecordClass *klass)
static void
rb_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->itunes_compat = rb_daap_record_itunes_compat;
daap_record->read = rb_daap_record_read;
@@ -364,7 +364,7 @@ rb_daap_record_daap_iface_init (gpointer iface, gpointer data)
static void
rb_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);
}
@@ -373,7 +373,7 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (RBDAAPRecord,
rb_daap_record,
G_TYPE_OBJECT,
0,
- G_IMPLEMENT_INTERFACE_DYNAMIC (DAAP_TYPE_RECORD,
rb_daap_record_daap_iface_init)
+ G_IMPLEMENT_INTERFACE_DYNAMIC (DMAP_TYPE_AV_RECORD,
rb_daap_record_daap_iface_init)
G_IMPLEMENT_INTERFACE_DYNAMIC (DMAP_TYPE_RECORD,
rb_daap_record_dmap_iface_init))
static void
diff --git a/plugins/daap/rb-daap-record.h b/plugins/daap/rb-daap-record.h
index 1f128a399..597f81425 100644
--- a/plugins/daap/rb-daap-record.h
+++ b/plugins/daap/rb-daap-record.h
@@ -32,6 +32,8 @@
#include <libdmapsharing/dmap.h>
+#include "rb-daap-compat.h"
+
G_BEGIN_DECLS
#define RB_TYPE_DAAP_RECORD (rb_daap_record_get_type ())
@@ -57,15 +59,15 @@ GType rb_daap_record_get_type (void);
RBDAAPRecord *rb_daap_record_new (RhythmDBEntry *entry);
-gint rb_daap_record_get_id (DAAPRecord *record);
+gint rb_daap_record_get_id (DmapAvRecord *record);
-gboolean rb_daap_record_itunes_compat (DAAPRecord *record);
+gboolean rb_daap_record_itunes_compat (DmapAvRecord *record);
-void rb_daap_record_set_transcode_format (DAAPRecord *record,
- const gint format);
+void rb_daap_record_set_transcode_format (DmapAvRecord *record,
+ const gint format);
-GInputStream *rb_daap_record_read (DAAPRecord *record,
- GError **err);
+GInputStream *rb_daap_record_read (DmapAvRecord *record,
+ GError **err);
void _rb_daap_record_register_type (GTypeModule *module);
diff --git a/plugins/daap/rb-daap-sharing.c b/plugins/daap/rb-daap-sharing.c
index 63e5dbc7e..80196661f 100644
--- a/plugins/daap/rb-daap-sharing.c
+++ b/plugins/daap/rb-daap-sharing.c
@@ -45,7 +45,7 @@
#include <libdmapsharing/dmap.h>
-static DAAPShare *share = NULL;
+static DmapAvShare *share = NULL;
static GSettings *settings = NULL;
char *
@@ -79,8 +79,8 @@ static void
create_share (RBShell *shell)
{
RhythmDB *rdb;
- DMAPDb *db;
- DMAPContainerDb *container_db;
+ DmapDb *db;
+ DmapContainerDb *container_db;
RBPlaylistManager *playlist_manager;
char *name;
char *password;
@@ -108,7 +108,7 @@ create_share (RBShell *shell)
password = NULL;
}
- share = daap_share_new (name, password, db, container_db, NULL);
+ share = dmap_av_share_new (name, password, db, container_db, NULL);
g_settings_bind_with_mapping (settings, "share-name",
share, "name",
diff --git a/plugins/daap/rb-daap-sharing.h b/plugins/daap/rb-daap-sharing.h
index f5765152e..774bac39b 100644
--- a/plugins/daap/rb-daap-sharing.h
+++ b/plugins/daap/rb-daap-sharing.h
@@ -30,6 +30,9 @@
#ifndef __DAAP_SHARING_H
#define __DAAP_SHARING_H
+#include <libdmapsharing/dmap.h>
+
+#include "rb-daap-compat.h"
#include "rb-shell.h"
G_BEGIN_DECLS
diff --git a/plugins/daap/rb-daap-source.c b/plugins/daap/rb-daap-source.c
index ef30cd8fa..a43bf8513 100644
--- a/plugins/daap/rb-daap-source.c
+++ b/plugins/daap/rb-daap-source.c
@@ -377,7 +377,7 @@ rb_daap_source_new (RBShell *shell,
typedef struct {
RBDAAPSource *source;
- DMAPConnection *connection;
+ DmapConnection *connection;
SoupSession *session;
SoupMessage *message;
SoupAuth *auth;
@@ -479,7 +479,7 @@ ask_password (RBDAAPSource *source,
}
static void
-connection_auth_cb (DMAPConnection *connection,
+connection_auth_cb (DmapConnection *connection,
const char *name,
SoupSession *session,
SoupMessage *msg,
@@ -517,8 +517,8 @@ connection_auth_cb (DMAPConnection *connection,
}
static void
-connection_connecting_cb (DMAPConnection *connection,
- DMAPConnectionState state,
+connection_connecting_cb (DmapConnection *connection,
+ DmapConnectionState state,
float progress,
RBDAAPSource *source)
{
@@ -535,7 +535,7 @@ connection_connecting_cb (DMAPConnection *connection,
case DMAP_GET_REVISION_NUMBER:
g_object_set (source, "load-status", RB_SOURCE_LOAD_STATUS_LOADING, NULL);
case DMAP_GET_DB_INFO:
- case DMAP_GET_SONGS:
+ case DMAP_GET_MEDIA:
case DMAP_GET_PLAYLISTS:
case DMAP_GET_PLAYLIST_ENTRIES:
g_object_set (source->priv->connection_status,
@@ -566,7 +566,7 @@ connection_connecting_cb (DMAPConnection *connection,
}
static void
-connection_disconnected_cb (DMAPConnection *connection,
+connection_disconnected_cb (DmapConnection *connection,
RBDAAPSource *source)
{
GIcon *icon;
@@ -605,7 +605,7 @@ _add_location_to_playlist (const char *uri, RBStaticPlaylistSource *source)
}
static void
-rb_daap_source_connection_cb (DMAPConnection *connection,
+rb_daap_source_connection_cb (DmapConnection *connection,
gboolean result,
const char *reason,
RBSource *source)
@@ -640,7 +640,7 @@ rb_daap_source_connection_cb (DMAPConnection *connection,
NULL);
playlists = dmap_connection_get_playlists (DMAP_CONNECTION (daap_source->priv->connection));
for (l = playlists; l != NULL; l = g_slist_next (l)) {
- DMAPPlaylist *playlist = l->data;
+ DmapPlaylist *playlist = l->data;
RBSource *playlist_source;
playlist_source = rb_static_playlist_source_new (shell, playlist->name, settings, FALSE,
entry_type);
@@ -661,9 +661,9 @@ rb_daap_source_selected (RBDisplayPage *page)
{
RBDAAPSource *daap_source = RB_DAAP_SOURCE (page);
RBShell *shell = NULL;
- DMAPRecordFactory *factory;
+ DmapRecordFactory *factory;
RhythmDB *rdb = NULL;
- DMAPDb *db = NULL;
+ DmapDb *db = NULL;
char *name = NULL;
RhythmDBEntryType *entry_type;
RBTaskList *tasklist;
@@ -695,11 +695,11 @@ rb_daap_source_selected (RBDisplayPage *page)
rb_task_list_add_task (tasklist, RB_TASK_PROGRESS (daap_source->priv->connection_status));
g_object_unref (tasklist);
- daap_source->priv->connection = daap_connection_new (name,
- daap_source->priv->host,
- daap_source->priv->port,
- db,
- factory);
+ daap_source->priv->connection = dmap_av_connection_new (name,
+ daap_source->priv->host,
+ daap_source->priv->port,
+ db,
+ factory);
g_object_unref (entry_type);
g_object_add_weak_pointer (G_OBJECT (daap_source->priv->connection), (gpointer
*)&daap_source->priv->connection);
@@ -718,16 +718,16 @@ rb_daap_source_selected (RBDisplayPage *page)
G_CALLBACK (connection_disconnected_cb),
page);
- dmap_connection_connect (DMAP_CONNECTION (daap_source->priv->connection),
- (DMAPConnectionCallback) rb_daap_source_connection_cb,
- page);
+ dmap_connection_start (DMAP_CONNECTION (daap_source->priv->connection),
+ (DmapConnectionFunc) rb_daap_source_connection_cb,
+ page);
g_object_unref (rdb);
g_object_unref (shell);
}
static void
-rb_daap_source_disconnect_cb (DMAPConnection *connection,
+rb_daap_source_disconnect_cb (DmapConnection *connection,
gboolean result,
const char *reason,
RBSource *source)
@@ -792,9 +792,9 @@ rb_daap_source_disconnect (RBDAAPSource *daap_source)
/* keep the source alive until the disconnect completes */
g_object_ref (daap_source);
- dmap_connection_disconnect (daap_source->priv->connection,
- (DMAPConnectionCallback) rb_daap_source_disconnect_cb,
- daap_source);
+ dmap_connection_stop (daap_source->priv->connection,
+ (DmapConnectionFunc) rb_daap_source_disconnect_cb,
+ daap_source);
/* wait until disconnected */
rb_debug ("Waiting for DAAP connection to finish");
diff --git a/plugins/daap/rb-daap-source.h b/plugins/daap/rb-daap-source.h
index b3c22b755..6a06830c5 100644
--- a/plugins/daap/rb-daap-source.h
+++ b/plugins/daap/rb-daap-source.h
@@ -30,12 +30,14 @@
#ifndef __RB_DAAP_SOURCE_H
#define __RB_DAAP_SOURCE_H
-#include "rb-shell.h"
-#include "rb-browser-source.h"
-
#include <gst/gst.h>
+#include <libdmapsharing/dmap.h>
#include <libsoup/soup.h>
+#include "rb-daap-compat.h"
+#include "rb-shell.h"
+#include "rb-browser-source.h"
+
G_BEGIN_DECLS
#define RB_TYPE_DAAP_SOURCE (rb_daap_source_get_type ())
diff --git a/plugins/daap/rb-dacp-compat.h b/plugins/daap/rb-dacp-compat.h
new file mode 100644
index 000000000..fd88dfea2
--- /dev/null
+++ b/plugins/daap/rb-dacp-compat.h
@@ -0,0 +1,99 @@
+/*
+ * Compatibility layer between libdmapsharing 3.0 and 4.0 APIs
+ *
+ * Copyright (C) 2020 W. Michael Petullo <mike flyn org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Rhythmbox authors hereby grant permission for non-GPL compatible
+ * GStreamer plugins to be used and distributed together with GStreamer
+ * and Rhythmbox. This permission is above and beyond the permissions granted
+ * by the GPL license by which Rhythmbox is covered. If you modify this code
+ * you may extend this exception to your version of the code, but you are not
+ * obligated to do so. If you do not wish to do so, delete this exception
+ * statement from your version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef __RB_DACP_COMPAT
+#define __RB_DACP_COMPAT
+
+#include "rb-dmap-compat.h"
+
+#ifdef LIBDMAPSHARING_COMPAT
+
+/* Building against libdmapsharing 3 API. */
+
+#define DmapControlPlayer DACPPlayer
+#define DMAP_CONTROL_PLAYER DACP_PLAYER
+#define DmapControlPlayerInterface DACPPlayerIface
+#define DMAP_CONTROL_PLAY_PAUSED DACP_PLAY_PAUSED
+#define DMAP_CONTROL_PLAY_PLAYING DACP_PLAY_PLAYING
+#define DMAP_CONTROL_PLAY_STOPPED DACP_PLAY_STOPPED
+#define DMAP_CONTROL_REPEAT_ALL DACP_REPEAT_ALL
+#define DMAP_CONTROL_REPEAT_NONE DACP_REPEAT_NONE
+#define DmapControlShare DACPShare
+#define dmap_control_share_new dacp_share_new
+#define dmap_control_share_pair dacp_share_pair
+#define dmap_control_share_player_updated dacp_share_player_updated
+#define DMAP_TYPE_CONTROL_PLAYER DACP_TYPE_PLAYER
+
+gchar *rb_dacp_player_now_playing_artwork (DmapControlPlayer *player, guint width, guint height);
+
+static inline void
+dmap_control_share_start_lookup_compat(DmapControlShare *share, GError **error)
+{
+ dacp_share_start_lookup(share);
+}
+
+static inline void
+dmap_control_share_stop_lookup_compat(DmapControlShare *share, GError **error)
+{
+ dacp_share_stop_lookup(share);
+}
+
+static inline guchar *
+rb_dacp_player_now_playing_artwork_compat(DmapControlPlayer *player, guint width, guint height)
+{
+ return (guchar *) rb_dacp_player_now_playing_artwork(player, width, height);
+}
+
+#else
+
+/* Building against libdmapsharing 4 API. */
+
+gchar *rb_dacp_player_now_playing_artwork (DmapControlPlayer *player, guint width, guint height);
+
+static inline void
+dmap_control_share_start_lookup_compat(DmapControlShare *share, GError **error)
+{
+ dmap_control_share_start_lookup(share, error);
+}
+
+static inline void
+dmap_control_share_stop_lookup_compat(DmapControlShare *share, GError **error)
+{
+ dmap_control_share_stop_lookup(share, error);
+}
+
+static inline gchar *
+rb_dacp_player_now_playing_artwork_compat(DmapControlPlayer *player, guint width, guint height)
+{
+ return rb_dacp_player_now_playing_artwork(player, width, height);
+}
+
+#endif
+
+#endif /* __RB_DACP_COMPAT */
diff --git a/plugins/daap/rb-dacp-pairing-page.c b/plugins/daap/rb-dacp-pairing-page.c
index 93a5f98af..bfb74d40e 100644
--- a/plugins/daap/rb-dacp-pairing-page.c
+++ b/plugins/daap/rb-dacp-pairing-page.c
@@ -51,14 +51,11 @@
#include "rb-rhythmdb-dmap-db-adapter.h"
#include "rb-dmap-container-db-adapter.h"
+#include "rb-dacp-pairing-page.h"
#include "rb-daap-plugin.h"
#include "rb-daap-sharing.h"
#include "rb-dacp-player.h"
-#include <libdmapsharing/dmap.h>
-
-#include "rb-dacp-pairing-page.h"
-
static void impl_constructed (GObject *object);
static void impl_dispose (GObject *object);
static void impl_set_property (GObject *object,
@@ -73,16 +70,16 @@ static void impl_get_property (GObject *object,
static void rb_dacp_pairing_page_connecting (RBDACPPairingPage *page, gboolean connecting);
static gboolean entry_insert_text_cb (GtkWidget *entry, gchar *text, gint len, gint *position,
RBDACPPairingPage *page);
static gboolean entry_backspace_cb (GtkWidget *entry, RBDACPPairingPage *page);
-static void remote_paired_cb (DACPShare *share, gchar *service_name, gboolean connected, RBDACPPairingPage
*page);
+static void remote_paired_cb (DmapControlShare *share, gchar *service_name, gboolean connected,
RBDACPPairingPage *page);
-static void dacp_remote_added (DACPShare *share, gchar *service_name, gchar *display_name, RBDaapPlugin
*plugin);
-static void dacp_remote_removed (DACPShare *share, gchar *service_name, RBDaapPlugin *plugin);
+static void dacp_remote_added (DmapControlShare *share, gchar *service_name, gchar *display_name,
RBDaapPlugin *plugin);
+static void dacp_remote_removed (DmapControlShare *share, gchar *service_name, RBDaapPlugin *plugin);
-/* DACPShare signals */
-static gboolean dacp_lookup_guid (DACPShare *share, gchar *guid, GSettings *settings);
-static void dacp_add_guid (DACPShare *share, gchar *guid, GSettings *settings);
+/* DmapControlShare signals */
+static gboolean dacp_lookup_guid (DmapControlShare *share, gchar *guid, GSettings *settings);
+static void dacp_add_guid (DmapControlShare *share, gchar *guid, GSettings *settings);
-static void dacp_player_updated (RBDACPPlayer *player, DACPShare *share);
+static void dacp_player_updated (RBDACPPlayer *player, DmapControlShare *share);
struct RBDACPPairingPagePrivate
{
@@ -90,7 +87,7 @@ struct RBDACPPairingPagePrivate
gboolean done_pairing;
- DACPShare *dacp_share;
+ DmapControlShare *dacp_share;
GtkBuilder *builder;
GtkWidget *entries[4];
@@ -138,10 +135,10 @@ entry_insert_text_cb (GtkWidget *entry, gchar *text, gint len, gint *position, R
/* The last character is still not in the entry */
passcode[3] = new_char;
rb_dacp_pairing_page_connecting (page, TRUE);
- /* Let DACPShare do the heavy-lifting */
- dacp_share_pair (page->priv->dacp_share,
- page->priv->service_name,
- passcode);
+ /* Let DmapControlShare do the heavy-lifting */
+ dmap_control_share_pair (page->priv->dacp_share,
+ page->priv->service_name,
+ passcode);
}
/* let the default handler display the number */
return FALSE;
@@ -329,7 +326,7 @@ impl_get_property (GObject *object,
RBDACPPairingPage *
rb_dacp_pairing_page_new (GObject *plugin,
RBShell *shell,
- DACPShare *dacp_share,
+ DmapControlShare *dacp_share,
const char *display_name,
const char *service_name)
{
@@ -400,7 +397,7 @@ rb_dacp_pairing_page_connecting (RBDACPPairingPage *page, gboolean connecting) {
}
static void
-remote_paired_cb (DACPShare *share, gchar *service_name, gboolean connected, RBDACPPairingPage *page)
+remote_paired_cb (DmapControlShare *share, gchar *service_name, gboolean connected, RBDACPPairingPage *page)
{
/* Check if this remote is the remote paired */
if (g_strcmp0 (service_name, page->priv->service_name) != 0)
@@ -417,14 +414,14 @@ remote_paired_cb (DACPShare *share, gchar *service_name, gboolean connected, RBD
}
}
-DACPShare *
+DmapControlShare *
rb_daap_create_dacp_share (GObject *plugin)
{
- DACPShare *share;
- DACPPlayer *player;
+ DmapControlShare *share;
+ DmapControlPlayer *player;
RhythmDB *rdb;
- DMAPDb *db;
- DMAPContainerDb *container_db;
+ DmapDb *db;
+ DmapContainerDb *container_db;
RBPlaylistManager *playlist_manager;
RBShell *shell;
GSettings *share_settings;
@@ -441,7 +438,7 @@ rb_daap_create_dacp_share (GObject *plugin)
db = DMAP_DB (rb_rhythmdb_dmap_db_adapter_new (rdb, RHYTHMDB_ENTRY_TYPE_SONG));
container_db = DMAP_CONTAINER_DB (rb_dmap_container_db_adapter_new (playlist_manager));
- player = DACP_PLAYER (rb_dacp_player_new (shell));
+ player = DMAP_CONTROL_PLAYER (rb_dacp_player_new (shell));
share_settings = g_settings_new ("org.gnome.rhythmbox.sharing");
name = g_settings_get_string (share_settings, "share-name");
@@ -451,7 +448,7 @@ rb_daap_create_dacp_share (GObject *plugin)
}
g_object_unref (share_settings);
- share = dacp_share_new (name, player, db, container_db);
+ share = dmap_control_share_new (name, player, db, container_db);
daap_settings = g_settings_new ("org.gnome.rhythmbox.plugins.daap");
settings = g_settings_get_child (daap_settings, "dacp");
@@ -497,13 +494,13 @@ rb_daap_create_dacp_share (GObject *plugin)
static void
dacp_player_updated (RBDACPPlayer *player,
- DACPShare *share)
+ DmapControlShare *share)
{
- dacp_share_player_updated (share);
+ dmap_control_share_player_updated (share);
}
static void
-dacp_add_guid (DACPShare *share,
+dacp_add_guid (DmapControlShare *share,
gchar *guid,
GSettings *settings)
{
@@ -528,7 +525,7 @@ dacp_add_guid (DACPShare *share,
}
static gboolean
-dacp_lookup_guid (DACPShare *share,
+dacp_lookup_guid (DmapControlShare *share,
gchar *guid,
GSettings *settings)
{
@@ -589,10 +586,10 @@ find_dacp_page (RBShell *shell, const gchar *service_name)
}
static void
-dacp_remote_added (DACPShare *share,
- gchar *service_name,
- gchar *display_name,
- RBDaapPlugin *plugin)
+dacp_remote_added (DmapControlShare *share,
+ gchar *service_name,
+ gchar *display_name,
+ RBDaapPlugin *plugin)
{
RBDACPPairingPage *page;
RBShell *shell;
@@ -625,9 +622,9 @@ dacp_remote_added (DACPShare *share,
}
static void
-dacp_remote_removed (DACPShare *share,
- gchar *service_name,
- RBDaapPlugin *plugin)
+dacp_remote_removed (DmapControlShare *share,
+ gchar *service_name,
+ RBDaapPlugin *plugin)
{
RBDACPPairingPage *page;
RBShell *shell;
diff --git a/plugins/daap/rb-dacp-pairing-page.h b/plugins/daap/rb-dacp-pairing-page.h
index fc8e06d38..2b66df1b3 100644
--- a/plugins/daap/rb-dacp-pairing-page.h
+++ b/plugins/daap/rb-dacp-pairing-page.h
@@ -30,11 +30,12 @@
#ifndef __RB_DACP_PAIRING_PAGE_H
#define __RB_DACP_PAIRING_PAGE_H
+#include <libdmapsharing/dmap.h>
+
+#include "rb-dacp-compat.h"
#include "rb-shell.h"
#include "rb-display-page.h"
-#include <libdmapsharing/dmap.h>
-
G_BEGIN_DECLS
#define RB_TYPE_DACP_PAIRING_PAGE (rb_dacp_pairing_page_get_type ())
@@ -60,14 +61,14 @@ GType rb_dacp_pairing_page_get_type (void);
RBDACPPairingPage *rb_dacp_pairing_page_new (GObject *plugin,
RBShell *shell,
- DACPShare *dacp_share,
+ DmapControlShare *dacp_share,
const char *display_name,
const char *service_name);
void rb_dacp_pairing_page_remote_found (RBDACPPairingPage *page);
void rb_dacp_pairing_page_remote_lost (RBDACPPairingPage *page);
-DACPShare *rb_daap_create_dacp_share (GObject *plugin);
+DmapControlShare *rb_daap_create_dacp_share (GObject *plugin);
void _rb_dacp_pairing_page_register_type (GTypeModule *module);
diff --git a/plugins/daap/rb-dacp-player.c b/plugins/daap/rb-dacp-player.c
index dce8a2254..9371fa123 100644
--- a/plugins/daap/rb-dacp-player.c
+++ b/plugins/daap/rb-dacp-player.c
@@ -38,14 +38,11 @@
#include "rhythmdb.h"
#include "rb-shell.h"
#include "rb-shell-player.h"
+#include "rb-dacp-player.h"
#include "rb-daap-record.h"
#include "rb-playlist-manager.h"
#include "rb-play-queue-source.h"
-#include <libdmapsharing/dmap.h>
-
-#include "rb-dacp-player.h"
-
struct _RBDACPPlayerPrivate {
RBShell *shell;
RBShellPlayer *shell_player;
@@ -60,15 +57,15 @@ static void rb_dacp_player_set_property (GObject *object, guint prop_id,
static void playing_song_changed (RBShellPlayer *shell_player, RhythmDBEntry *entry, RBDACPPlayer *player);
static void elapsed_changed (RBShellPlayer *shell_player, guint elapsed, RBDACPPlayer *player);
-static DAAPRecord *rb_dacp_player_now_playing_record (DACPPlayer *player);
-static guchar *rb_dacp_player_now_playing_artwork (DACPPlayer *player, guint width, guint height);
-static void rb_dacp_player_play_pause (DACPPlayer *player);
-static void rb_dacp_player_pause (DACPPlayer *player);
-static void rb_dacp_player_next_item (DACPPlayer *player);
-static void rb_dacp_player_prev_item (DACPPlayer *player);
+static DmapAvRecord *rb_dacp_player_now_playing_record (DmapControlPlayer *player);
+gchar *rb_dacp_player_now_playing_artwork (DmapControlPlayer *player, guint width, guint height);
+static void rb_dacp_player_play_pause (DmapControlPlayer *player);
+static void rb_dacp_player_pause (DmapControlPlayer *player);
+static void rb_dacp_player_next_item (DmapControlPlayer *player);
+static void rb_dacp_player_prev_item (DmapControlPlayer *player);
-static void rb_dacp_player_cue_clear (DACPPlayer *player);
-static void rb_dacp_player_cue_play (DACPPlayer *player, GList *records, guint index);
+static void rb_dacp_player_cue_clear (DmapControlPlayer *player);
+static void rb_dacp_player_cue_play (DmapControlPlayer *player, GList *records, guint index);
enum {
PROP_0,
@@ -89,12 +86,12 @@ static guint signals[LAST_SIGNAL] = { 0 };
static void
rb_dacp_player_iface_init (gpointer iface, gpointer data)
{
- DACPPlayerIface *dacp_player = iface;
+ DmapControlPlayerInterface *dacp_player = iface;
- g_assert (G_TYPE_FROM_INTERFACE (dacp_player) == DACP_TYPE_PLAYER);
+ g_assert (G_TYPE_FROM_INTERFACE (dacp_player) == DMAP_TYPE_CONTROL_PLAYER);
dacp_player->now_playing_record = rb_dacp_player_now_playing_record;
- dacp_player->now_playing_artwork = rb_dacp_player_now_playing_artwork;
+ dacp_player->now_playing_artwork = rb_dacp_player_now_playing_artwork_compat;
dacp_player->play_pause = rb_dacp_player_play_pause;
dacp_player->pause = rb_dacp_player_pause;
dacp_player->next_item = rb_dacp_player_next_item;
@@ -108,7 +105,7 @@ G_DEFINE_DYNAMIC_TYPE_EXTENDED (RBDACPPlayer,
rb_dacp_player,
G_TYPE_OBJECT,
0,
- G_IMPLEMENT_INTERFACE_DYNAMIC (DACP_TYPE_PLAYER,
+ G_IMPLEMENT_INTERFACE_DYNAMIC (DMAP_TYPE_CONTROL_PLAYER,
rb_dacp_player_iface_init))
static void
@@ -190,16 +187,16 @@ rb_dacp_player_get_property (GObject *object,
break;
case PROP_REPEAT_STATE:
rb_shell_player_get_playback_state (player->priv->shell_player, &shuffle, &repeat);
- g_value_set_enum (value, repeat ? DACP_REPEAT_ALL : DACP_REPEAT_NONE);
+ g_value_set_enum (value, repeat ? DMAP_CONTROL_REPEAT_ALL : DMAP_CONTROL_REPEAT_NONE);
break;
case PROP_PLAY_STATE:
entry = rb_shell_player_get_playing_entry (player->priv->shell_player);
if (entry) {
g_object_get (player->priv->shell_player, "playing", &playing, NULL);
- g_value_set_enum (value, playing ? DACP_PLAY_PLAYING : DACP_PLAY_PAUSED);
+ g_value_set_enum (value, playing ? DMAP_CONTROL_PLAY_PLAYING :
DMAP_CONTROL_PLAY_PAUSED);
rhythmdb_entry_unref (entry);
} else {
- g_value_set_enum (value, DACP_PLAY_STOPPED);
+ g_value_set_enum (value, DMAP_CONTROL_PLAY_STOPPED);
}
break;
case PROP_VOLUME:
@@ -236,7 +233,7 @@ rb_dacp_player_set_property (GObject *object,
break;
case PROP_REPEAT_STATE:
rb_shell_player_get_playback_state (player->priv->shell_player, &shuffle, &repeat);
- rb_shell_player_set_playback_state (player->priv->shell_player, shuffle,
g_value_get_enum (value) != DACP_REPEAT_NONE);
+ rb_shell_player_set_playback_state (player->priv->shell_player, shuffle,
g_value_get_enum (value) != DMAP_CONTROL_REPEAT_NONE);
break;
case PROP_VOLUME:
volume = ((double) g_value_get_ulong (value)) / 100.0;
@@ -291,54 +288,54 @@ rb_dacp_player_new (RBShell *shell)
return player;
}
-static DAAPRecord *
-rb_dacp_player_now_playing_record (DACPPlayer *player)
+static DmapAvRecord *
+rb_dacp_player_now_playing_record (DmapControlPlayer *player)
{
RhythmDBEntry *entry;
- DAAPRecord *record;
+ DmapAvRecord *record;
entry = rb_shell_player_get_playing_entry (RB_DACP_PLAYER (player)->priv->shell_player);
if (entry == NULL) {
return NULL;
} else {
- record = DAAP_RECORD (rb_daap_record_new (entry));
+ record = DMAP_AV_RECORD (rb_daap_record_new (entry));
rhythmdb_entry_unref (entry);
return record;
}
}
-static guchar *
-rb_dacp_player_now_playing_artwork (DACPPlayer *player, guint width, guint height)
+gchar *
+rb_dacp_player_now_playing_artwork (DmapControlPlayer *player, guint width, guint height)
{
return NULL;
}
static void
-rb_dacp_player_play_pause (DACPPlayer *player)
+rb_dacp_player_play_pause (DmapControlPlayer *player)
{
rb_shell_player_playpause (RB_DACP_PLAYER (player)->priv->shell_player, NULL);
}
static void
-rb_dacp_player_pause (DACPPlayer *player)
+rb_dacp_player_pause (DmapControlPlayer *player)
{
rb_shell_player_pause (RB_DACP_PLAYER (player)->priv->shell_player, NULL);
}
static void
-rb_dacp_player_next_item (DACPPlayer *player)
+rb_dacp_player_next_item (DmapControlPlayer *player)
{
rb_shell_player_do_next (RB_DACP_PLAYER (player)->priv->shell_player, NULL);
}
static void
-rb_dacp_player_prev_item (DACPPlayer *player)
+rb_dacp_player_prev_item (DmapControlPlayer *player)
{
rb_shell_player_do_previous (RB_DACP_PLAYER (player)->priv->shell_player, NULL);
}
static void
-rb_dacp_player_cue_clear (DACPPlayer *player)
+rb_dacp_player_cue_clear (DmapControlPlayer *player)
{
RBDACPPlayer *rbplayer;
rbplayer = RB_DACP_PLAYER (player);
@@ -346,7 +343,7 @@ rb_dacp_player_cue_clear (DACPPlayer *player)
}
static void
-rb_dacp_player_cue_play (DACPPlayer *player, GList *records, guint index)
+rb_dacp_player_cue_play (DmapControlPlayer *player, GList *records, guint index)
{
GList *record;
gint current = 0;
diff --git a/plugins/daap/rb-dacp-player.h b/plugins/daap/rb-dacp-player.h
index ff2aa18fd..96b0830b6 100644
--- a/plugins/daap/rb-dacp-player.h
+++ b/plugins/daap/rb-dacp-player.h
@@ -33,6 +33,8 @@
#include <glib-object.h>
#include <libdmapsharing/dmap.h>
+#include "rb-dacp-compat.h"
+
G_BEGIN_DECLS
#define RB_TYPE_DACP_PLAYER (rb_dacp_player_get_type ())
@@ -52,7 +54,7 @@ struct _RBDACPPlayerClass
{
GObjectClass parent_class;
- void (*player_updated) (DACPPlayer *player);
+ void (*player_updated) (DmapControlPlayer *player);
};
struct _RBDACPPlayer
diff --git a/plugins/daap/rb-dmap-compat.h b/plugins/daap/rb-dmap-compat.h
new file mode 100644
index 000000000..d1dc77de2
--- /dev/null
+++ b/plugins/daap/rb-dmap-compat.h
@@ -0,0 +1,173 @@
+/*
+ * Compatibility layer between libdmapsharing 3.0 and 4.0 APIs
+ *
+ * Copyright (C) 2020 W. Michael Petullo <mike flyn org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Rhythmbox authors hereby grant permission for non-GPL compatible
+ * GStreamer plugins to be used and distributed together with GStreamer
+ * and Rhythmbox. This permission is above and beyond the permissions granted
+ * by the GPL license by which Rhythmbox is covered. If you modify this code
+ * you may extend this exception to your version of the code, but you are not
+ * obligated to do so. If you do not wish to do so, delete this exception
+ * statement from your version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef _RB_DMAP_COMPAT
+#define _RB_DMAP_COMPAT
+
+#ifdef LIBDMAPSHARING_COMPAT
+
+/* Building against libdmapsharing 3 API. */
+
+#define DmapConnection DMAPConnection
+#define DmapConnectionFunc DMAPConnectionCallback
+#define dmap_connection_start dmap_connection_connect
+#define DmapConnectionState DMAPConnectionState
+#define dmap_connection_stop dmap_connection_disconnect
+#define DmapContainerDb DMAPContainerDb
+#define DmapContainerDbInterface DMAPContainerDbIface
+#define DmapContainerRecord DMAPContainerRecord
+#define DmapContainerRecordInterface DMAPContainerRecordIface
+#define DmapDb DMAPDb
+#define DmapDbInterface DMAPDbIface
+#define DMAP_GET_MEDIA DMAP_GET_SONGS
+#define DmapIdContainerRecordFunc GHFunc
+#define DmapIdRecordFunc GHFunc
+#define DmapMdnsBrowser DMAPMdnsBrowser
+#define DmapMdnsService DMAPMdnsBrowserService
+#define DMAP_MDNS_SERVICE_TYPE_DAAP DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP
+#define DmapPlaylist DMAPPlaylist
+#define DmapRecord DMAPRecord
+#define DmapRecordFactory DMAPRecordFactory
+#define DmapRecordFactoryInterface DMAPRecordFactoryIface
+#define DmapRecordInterface DMAPRecordIface
+
+guint rb_rhythmdb_dmap_db_adapter_add (DMAPDb *_db, DMAPRecord *_record, GError **error);
+guint rb_rhythmdb_query_model_dmap_db_adapter_add (DmapDb *db, DmapRecord *record, GError **error);
+
+static inline guint
+rb_rhythmdb_dmap_db_adapter_add_compat (DmapDb *_db, DmapRecord *_record)
+{
+ return rb_rhythmdb_dmap_db_adapter_add (_db, _record, NULL);
+}
+
+static inline guint
+rb_rhythmdb_query_model_dmap_db_adapter_add_compat (DmapDb *db, DmapRecord *record)
+{
+ return rb_rhythmdb_query_model_dmap_db_adapter_add(db, record, NULL);
+}
+
+static inline DmapMdnsService *
+rb_dmap_mdns_service_new_compat(const gchar *service_name,
+ const gchar *name,
+ gchar *host,
+ guint port,
+ gboolean password_protected)
+{
+ DmapMdnsService *service = g_new(DmapMdnsService, 1);
+
+ service->service_name = g_strdup(service_name);
+ service->name = g_strdup(name);
+ service->host = g_strdup(host);
+ service->port = port;
+ service->password_protected = password_protected;
+
+ return service;
+}
+
+static inline void
+rb_dmap_mdns_service_get_compat(DmapMdnsService *service,
+ gchar **service_name,
+ gchar **name,
+ gchar **host,
+ guint *port,
+ gboolean *password_protected)
+{
+ *service_name = g_strdup(service->service_name);
+ *name = g_strdup(service->name);
+ *host = g_strdup(service->host);
+ *port = service->port;
+ *password_protected = service->password_protected;
+}
+
+static inline void
+rb_dmap_mdns_service_free_compat(DmapMdnsService *service)
+{
+ g_free(service);
+}
+
+#else
+
+/* Building against libdmapsharing 4 API. */
+
+guint rb_rhythmdb_dmap_db_adapter_add (DmapDb *_db, DmapRecord *_record, GError **error);
+guint rb_rhythmdb_query_model_dmap_db_adapter_add (DmapDb *db, DmapRecord *record, GError **error);
+
+static inline guint
+rb_rhythmdb_dmap_db_adapter_add_compat (DmapDb *_db, DmapRecord *_record, GError **error)
+{
+ return rb_rhythmdb_dmap_db_adapter_add (_db, _record, error);
+}
+
+static inline guint
+rb_rhythmdb_query_model_dmap_db_adapter_add_compat (DmapDb *db, DmapRecord *record, GError **error)
+{
+ return rb_rhythmdb_query_model_dmap_db_adapter_add(db, record, error);
+}
+
+static inline DmapMdnsService *
+rb_dmap_mdns_service_new_compat(const gchar *service_name,
+ const gchar *name,
+ gchar *host,
+ guint port,
+ gboolean password_protected)
+{
+ return g_object_new(DMAP_TYPE_MDNS_SERVICE,
+ "service-name", service_name,
+ "name", name,
+ "host", host,
+ "port", port,
+ "password-protected", FALSE,
+ NULL);
+}
+
+static inline void
+rb_dmap_mdns_service_get_compat(DmapMdnsService *service,
+ gchar **service_name,
+ gchar **name,
+ gchar **host,
+ guint *port,
+ gboolean *password_protected)
+{
+ g_object_get(service, "service-name", service_name,
+ "name", name,
+ "host", host,
+ "port", port,
+ "password-protected", password_protected,
+ NULL);
+}
+
+static inline void
+rb_dmap_mdns_service_free_compat(DmapMdnsService *service)
+{
+ g_object_unref(service);
+}
+
+#endif
+
+#endif /* _RB_DMAP_COMPAT */
diff --git a/plugins/daap/rb-dmap-container-db-adapter.c b/plugins/daap/rb-dmap-container-db-adapter.c
index 11a4b6cc7..3e435df78 100644
--- a/plugins/daap/rb-dmap-container-db-adapter.c
+++ b/plugins/daap/rb-dmap-container-db-adapter.c
@@ -44,7 +44,7 @@ struct RBDMAPContainerDbAdapterPrivate {
typedef struct ForeachAdapterData {
gpointer data;
- GHFunc func;
+ DmapIdContainerRecordFunc func;
} ForeachAdapterData;
static guint find_by_id (gconstpointer a, gconstpointer b)
@@ -52,12 +52,12 @@ static guint find_by_id (gconstpointer a, gconstpointer b)
return GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (a), "daap_id")) != GPOINTER_TO_UINT (b);
}
-static DMAPContainerRecord *
-rb_dmap_container_db_adapter_lookup_by_id (DMAPContainerDb *db, guint id)
+static DmapContainerRecord *
+rb_dmap_container_db_adapter_lookup_by_id (DmapContainerDb *db, guint id)
{
gchar *name;
GList *playlists;
- DMAPContainerRecord *fnval = NULL;
+ DmapContainerRecord *fnval = NULL;
playlists = rb_playlist_manager_get_playlists (RB_DMAP_CONTAINER_DB_ADAPTER
(db)->priv->playlist_manager);
@@ -80,24 +80,32 @@ rb_dmap_container_db_adapter_lookup_by_id (DMAPContainerDb *db, guint id)
static void
foreach_adapter (RBPlaylistSource *entry, gpointer data)
{
+ guint id;
gchar *name;
- DMAPContainerRecord *record;
+ DmapContainerRecord *record;
ForeachAdapterData *foreach_adapter_data;
foreach_adapter_data = data;
g_object_get (entry, "name", &name, NULL);
record = DMAP_CONTAINER_RECORD (rb_daap_container_record_new (name, entry));
+ id = rb_daap_container_record_get_id (record);
- foreach_adapter_data->func (GINT_TO_POINTER (rb_daap_container_record_get_id (record)),
+#ifdef LIBDMAPSHARING_COMPAT
+ foreach_adapter_data->func (GINT_TO_POINTER(id),
record,
foreach_adapter_data->data);
+#else
+ foreach_adapter_data->func (id,
+ record,
+ foreach_adapter_data->data);
+#endif
g_object_unref (record);
}
static void
-rb_dmap_container_db_adapter_foreach (DMAPContainerDb *db,
- GHFunc func,
+rb_dmap_container_db_adapter_foreach (DmapContainerDb *db,
+ DmapIdContainerRecordFunc func,
gpointer data)
{
ForeachAdapterData *foreach_adapter_data;
@@ -115,7 +123,7 @@ rb_dmap_container_db_adapter_foreach (DMAPContainerDb *db,
}
static gint64
-rb_dmap_container_db_adapter_count (DMAPContainerDb *db)
+rb_dmap_container_db_adapter_count (DmapContainerDb *db)
{
gint64 count = 0;
GList *playlists = rb_playlist_manager_get_playlists (
@@ -145,7 +153,7 @@ rb_dmap_container_db_adapter_class_finalize (RBDMAPContainerDbAdapterClass *klas
static void
rb_dmap_container_db_adapter_interface_init (gpointer iface, gpointer data)
{
- DMAPContainerDbIface *dmap_db = iface;
+ DmapContainerDbInterface *dmap_db = iface;
g_assert (G_TYPE_FROM_INTERFACE (dmap_db) == DMAP_TYPE_CONTAINER_DB);
diff --git a/plugins/daap/rb-dmap-container-db-adapter.h b/plugins/daap/rb-dmap-container-db-adapter.h
index 2587a8eab..12e7aa042 100644
--- a/plugins/daap/rb-dmap-container-db-adapter.h
+++ b/plugins/daap/rb-dmap-container-db-adapter.h
@@ -32,6 +32,7 @@
#include <libdmapsharing/dmap.h>
+#include "rb-dmap-compat.h"
#include "rb-playlist-manager.h"
G_BEGIN_DECLS
diff --git a/plugins/daap/rb-rhythmdb-dmap-db-adapter.c b/plugins/daap/rb-rhythmdb-dmap-db-adapter.c
index 412fb2cfb..1212b4baf 100644
--- a/plugins/daap/rb-rhythmdb-dmap-db-adapter.c
+++ b/plugins/daap/rb-rhythmdb-dmap-db-adapter.c
@@ -45,11 +45,11 @@ struct RBRhythmDBDMAPDbAdapterPrivate {
typedef struct ForeachAdapterData {
gpointer data;
- GHFunc func;
+ DmapIdRecordFunc func;
} ForeachAdapterData;
-static DMAPRecord *
-rb_rhythmdb_dmap_db_adapter_lookup_by_id (const DMAPDb *db, guint id)
+static DmapRecord *
+rb_rhythmdb_dmap_db_adapter_lookup_by_id (const DmapDb *db, guint id)
{
RhythmDBEntry *entry;
@@ -66,7 +66,7 @@ static void
foreach_adapter (RhythmDBEntry *entry, gpointer data)
{
gulong id;
- DMAPRecord *record;
+ DmapRecord *record;
ForeachAdapterData *foreach_adapter_data;
char *playback_uri;
@@ -81,18 +81,24 @@ foreach_adapter (RhythmDBEntry *entry, gpointer data)
foreach_adapter_data = data;
record = DMAP_RECORD (rb_daap_record_new (entry));
- foreach_adapter_data->func (GUINT_TO_POINTER (id),
+#ifdef LIBDMAPSHARING_COMPAT
+ foreach_adapter_data->func (GUINT_TO_POINTER(id),
record,
foreach_adapter_data->data);
+#else
+ foreach_adapter_data->func (id,
+ record,
+ foreach_adapter_data->data);
+#endif
g_free (playback_uri);
g_object_unref (record);
}
static void
-rb_rhythmdb_dmap_db_adapter_foreach (const DMAPDb *db,
- GHFunc func,
- gpointer data)
+rb_rhythmdb_dmap_db_adapter_foreach (const DmapDb *db,
+ DmapIdRecordFunc func,
+ gpointer data)
{
ForeachAdapterData *foreach_adapter_data;
@@ -111,7 +117,7 @@ rb_rhythmdb_dmap_db_adapter_foreach (const DMAPDb *db,
}
static gint64
-rb_rhythmdb_dmap_db_adapter_count (const DMAPDb *db)
+rb_rhythmdb_dmap_db_adapter_count (const DmapDb *db)
{
g_assert (RB_RHYTHMDB_DMAP_DB_ADAPTER (db)->priv->db != NULL);
return rhythmdb_entry_count_by_type (
@@ -140,8 +146,8 @@ entry_set_string_prop (RhythmDB *db,
g_value_unset (&value);
}
-static guint
-rb_rhythmdb_dmap_db_adapter_add (DMAPDb *db, DMAPRecord *record)
+guint
+rb_rhythmdb_dmap_db_adapter_add (DmapDb *db, DmapRecord *record, GError **error)
{
gchar *uri = NULL;
const gchar *title = NULL;
@@ -265,11 +271,11 @@ rb_rhythmdb_dmap_db_adapter_class_finalize (RBRhythmDBDMAPDbAdapterClass *klass)
static void
rb_rhythmdb_dmap_db_adapter_interface_init (gpointer iface, gpointer data)
{
- DMAPDbIface *dmap_db = iface;
+ DmapDbInterface *dmap_db = iface;
g_assert (G_TYPE_FROM_INTERFACE (dmap_db) == DMAP_TYPE_DB);
- dmap_db->add = rb_rhythmdb_dmap_db_adapter_add;
+ dmap_db->add = rb_rhythmdb_dmap_db_adapter_add_compat;
dmap_db->lookup_by_id = rb_rhythmdb_dmap_db_adapter_lookup_by_id;
dmap_db->foreach = rb_rhythmdb_dmap_db_adapter_foreach;
dmap_db->count = rb_rhythmdb_dmap_db_adapter_count;
diff --git a/plugins/daap/rb-rhythmdb-query-model-dmap-db-adapter.c
b/plugins/daap/rb-rhythmdb-query-model-dmap-db-adapter.c
index 63462f39b..6c2a0057f 100644
--- a/plugins/daap/rb-rhythmdb-query-model-dmap-db-adapter.c
+++ b/plugins/daap/rb-rhythmdb-query-model-dmap-db-adapter.c
@@ -43,11 +43,11 @@ struct RBRhythmDBQueryModelDMAPDbAdapterPrivate {
typedef struct ForeachAdapterData {
gpointer data;
- GHFunc func;
+ DmapIdRecordFunc func;
} ForeachAdapterData;
-static DMAPRecord *
-rb_rhythmdb_query_model_dmap_db_adapter_lookup_by_id (const DMAPDb *db,
+static DmapRecord *
+rb_rhythmdb_query_model_dmap_db_adapter_lookup_by_id (const DmapDb *db,
guint id)
{
g_error ("Not implemented");
@@ -61,7 +61,7 @@ foreach_adapter (GtkTreeModel *model,
gpointer data)
{
gulong id;
- DMAPRecord *record;
+ DmapRecord *record;
RhythmDBEntry *entry;
ForeachAdapterData *foreach_adapter_data;
@@ -71,9 +71,15 @@ foreach_adapter (GtkTreeModel *model,
foreach_adapter_data = data;
record = DMAP_RECORD (rb_daap_record_new (entry));
- foreach_adapter_data->func (GUINT_TO_POINTER (id),
+#ifdef LIBDMAPSHARING_COMPAT
+ foreach_adapter_data->func (GUINT_TO_POINTER(id),
record,
foreach_adapter_data->data);
+#else
+ foreach_adapter_data->func (id,
+ record,
+ foreach_adapter_data->data);
+#endif
g_object_unref (record);
rhythmdb_entry_unref (entry);
@@ -82,9 +88,9 @@ foreach_adapter (GtkTreeModel *model,
}
static void
-rb_rhythmdb_query_model_dmap_db_adapter_foreach (const DMAPDb *db,
- GHFunc func,
- gpointer data)
+rb_rhythmdb_query_model_dmap_db_adapter_foreach (const DmapDb *db,
+ DmapIdRecordFunc func,
+ gpointer data)
{
ForeachAdapterData *foreach_adapter_data;
@@ -102,15 +108,15 @@ rb_rhythmdb_query_model_dmap_db_adapter_foreach (const DMAPDb *db,
}
static gint64
-rb_rhythmdb_query_model_dmap_db_adapter_count (const DMAPDb *db)
+rb_rhythmdb_query_model_dmap_db_adapter_count (const DmapDb *db)
{
g_assert (RB_RHYTHMDB_QUERY_MODEL_DMAP_DB_ADAPTER (db)->priv->model != NULL);
return gtk_tree_model_iter_n_children (
GTK_TREE_MODEL (RB_RHYTHMDB_QUERY_MODEL_DMAP_DB_ADAPTER (db)->priv->model), NULL);
}
-static guint
-rb_rhythmdb_query_model_dmap_db_adapter_add (DMAPDb *db, DMAPRecord *record)
+guint
+rb_rhythmdb_query_model_dmap_db_adapter_add (DmapDb *db, DmapRecord *record, GError **error)
{
g_error ("Not implemented");
return 0;
@@ -136,11 +142,11 @@ rb_rhythmdb_query_model_dmap_db_adapter_class_finalize (RBRhythmDBQueryModelDMAP
static void
rb_rhythmdb_query_model_dmap_db_adapter_interface_init (gpointer iface, gpointer data)
{
- DMAPDbIface *dmap_db = iface;
+ DmapDbInterface *dmap_db = iface;
g_assert (G_TYPE_FROM_INTERFACE (dmap_db) == DMAP_TYPE_DB);
- dmap_db->add = rb_rhythmdb_query_model_dmap_db_adapter_add;
+ dmap_db->add = rb_rhythmdb_query_model_dmap_db_adapter_add_compat;
dmap_db->lookup_by_id = rb_rhythmdb_query_model_dmap_db_adapter_lookup_by_id;
dmap_db->foreach = rb_rhythmdb_query_model_dmap_db_adapter_foreach;
dmap_db->count = rb_rhythmdb_query_model_dmap_db_adapter_count;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]