From 0a690f61a4fc87f2d19114c0f1ca1763688695b8 Mon Sep 17 00:00:00 2001
From: Julian Bouzas <julian.bouzas@collabora.com>
Date: Wed, 8 Jan 2020 09:48:35 -0500
Subject: [PATCH] core: add wp_core_create_local_object API

---
 lib/wp/core.c | 37 +++++++++++++++++++++++++++++++++++++
 lib/wp/core.h |  3 +++
 2 files changed, 40 insertions(+)

diff --git a/lib/wp/core.c b/lib/wp/core.c
index e4af4445..85d45b68 100644
--- a/lib/wp/core.c
+++ b/lib/wp/core.c
@@ -545,6 +545,43 @@ wp_core_get_remote_state (WpCore * self, const gchar ** error)
   return (WpRemoteState) pw_remote_get_state (self->pw_remote, error);
 }
 
+WpProxy *
+wp_core_create_local_object (WpCore * self, const gchar *factory_name,
+    guint32 interface_type, guint32 interface_version,
+    WpProperties * properties)
+{
+  struct pw_proxy *pw_proxy = NULL;
+  struct pw_factory *factory = NULL;
+  gpointer iface = NULL;
+
+  g_return_val_if_fail (WP_IS_CORE (self), NULL);
+  g_return_val_if_fail (self->pw_core, NULL);
+  g_return_val_if_fail (self->pw_remote, NULL);
+
+  factory = pw_core_find_factory (self->pw_core, factory_name);
+  if (!factory)
+    return NULL;
+
+  iface = pw_factory_create_object (factory,
+      NULL,
+      interface_type,
+      interface_version,
+      properties ? wp_properties_to_pw_properties (properties) : NULL,
+      0);
+  if (!iface)
+    return NULL;
+
+  pw_proxy = pw_remote_export (self->pw_remote,
+      interface_type,
+      properties ? wp_properties_to_pw_properties (properties) : NULL,
+      iface,
+      0);
+  if (!pw_proxy)
+    return NULL;
+
+  return wp_proxy_new_wrap (self, pw_proxy, interface_type, interface_version);
+}
+
 WpProxy *
 wp_core_create_remote_object (WpCore *self,
     const gchar *factory_name, guint32 interface_type,
diff --git a/lib/wp/core.h b/lib/wp/core.h
index 96f4cad9..a31d6499 100644
--- a/lib/wp/core.h
+++ b/lib/wp/core.h
@@ -50,6 +50,9 @@ struct pw_remote * wp_core_get_pw_remote (WpCore * self);
 gboolean wp_core_connect (WpCore * self);
 WpRemoteState wp_core_get_remote_state (WpCore * self, const gchar ** error);
 
+WpProxy * wp_core_create_local_object (WpCore * self,
+    const gchar *factory_name, guint32 interface_type,
+    guint32 interface_version, WpProperties * properties);
 WpProxy * wp_core_create_remote_object (WpCore * self,
     const gchar * factory_name, guint32 interface_type,
     guint32 interface_version, WpProperties * properties);
-- 
GitLab