libmm-glib,manager: cleanup object implementation

This commit is contained in:
Aleksander Morgado
2012-10-01 13:41:34 +02:00
parent acf2e6d1e0
commit 2f16ef2278
2 changed files with 145 additions and 76 deletions

View File

@@ -17,7 +17,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA. * Boston, MA 02110-1301 USA.
* *
* Copyright (C) 2011 Google, Inc. * Copyright (C) 2011 - 2012 Aleksander Morgado <aleksander@gnu.org>
* Copyright (C) 2011 - 2012 Google, Inc.
* *
* Author: Aleksander Morgado <aleksander@lanedo.com> * Author: Aleksander Morgado <aleksander@lanedo.com>
*/ */
@@ -26,6 +27,18 @@
#include <mm-gdbus-manager.h> #include <mm-gdbus-manager.h>
#include "mm-manager.h" #include "mm-manager.h"
/**
* SECTION: mm-manager
* @title: MMManager
* @short_description: The Manager object
*
* The #MMManager is the object allowing access to the Manager interface.
*
* This object is also a #GDBusObjectManagerClient, and therefore it allows to
* use the standard ObjectManager interface to list and handle the managed
* modem objects.
*/
static void initable_iface_init (GInitableIface *iface); static void initable_iface_init (GInitableIface *iface);
static void async_initable_iface_init (GAsyncInitableIface *iface); static void async_initable_iface_init (GAsyncInitableIface *iface);
@@ -34,7 +47,7 @@ static GAsyncInitableIface *async_initable_parent_iface;
G_DEFINE_TYPE_EXTENDED (MMManager, mm_manager, MM_GDBUS_TYPE_OBJECT_MANAGER_CLIENT, 0, G_DEFINE_TYPE_EXTENDED (MMManager, mm_manager, MM_GDBUS_TYPE_OBJECT_MANAGER_CLIENT, 0,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init) G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init)
G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init)); G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init))
struct _MMManagerPrivate { struct _MMManagerPrivate {
/* The proxy for the Manager interface */ /* The proxy for the Manager interface */
@@ -78,6 +91,22 @@ get_proxy_type (GDBusObjectManagerClient *manager,
/*****************************************************************************/ /*****************************************************************************/
/**
* mm_manager_new_finish:
* @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_new().
* @error: Return location for error or %NULL
*
* Finishes an operation started with mm_manager_new().
*
* Returns: (transfer full) (type MMManager): The constructed object manager client or %NULL if @error is set.
*/
MMManager *
mm_manager_new_finish (GAsyncResult *res,
GError **error)
{
return MM_MANAGER (mm_gdbus_object_manager_client_new_finish (res, error));
}
/** /**
* mm_manager_new: * mm_manager_new:
* @connection: A #GDBusConnection. * @connection: A #GDBusConnection.
@@ -116,22 +145,6 @@ mm_manager_new (GDBusConnection *connection,
NULL); NULL);
} }
/**
* mm_manager_new_finish:
* @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_new().
* @error: Return location for error or %NULL
*
* Finishes an operation started with mm_manager_new().
*
* Returns: (transfer full) (type MMManager): The constructed object manager client or %NULL if @error is set.
*/
MMManager *
mm_manager_new_finish (GAsyncResult *res,
GError **error)
{
return MM_MANAGER (mm_gdbus_object_manager_client_new_finish (res, error));
}
/** /**
* mm_manager_new_sync: * mm_manager_new_sync:
* @connection: A #GDBusConnection. * @connection: A #GDBusConnection.
@@ -168,13 +181,15 @@ mm_manager_new_sync (GDBusConnection *connection,
return (ret ? MM_MANAGER (ret) : NULL); return (ret ? MM_MANAGER (ret) : NULL);
} }
/*****************************************************************************/
/** /**
* mm_manager_peek_proxy: * mm_manager_peek_proxy:
* @manager: A #MMManager. * @manager: A #MMManager.
* *
* Gets the #GDBusProxy interface of the %manager. * Gets the #GDBusProxy interface of the @manager.
* *
* Returns: (transfer none): The #GDBusProxy interface of %manager. Do not free the returned object, it is owned by @manager. * Returns: (transfer none): The #GDBusProxy interface of @manager. Do not free the returned object, it is owned by @manager.
*/ */
GDBusProxy * GDBusProxy *
mm_manager_peek_proxy (MMManager *manager) mm_manager_peek_proxy (MMManager *manager)
@@ -186,9 +201,9 @@ mm_manager_peek_proxy (MMManager *manager)
* mm_manager_get_proxy: * mm_manager_get_proxy:
* @manager: A #MMManager. * @manager: A #MMManager.
* *
* Gets the #GDBusProxy interface of the %manager. * Gets the #GDBusProxy interface of the @manager.
* *
* Returns: (transfer full): The #GDBusProxy interface of %manager, which must be freed with g_object_unref(). * Returns: (transfer full): The #GDBusProxy interface of @manager, which must be freed with g_object_unref().
*/ */
GDBusProxy * GDBusProxy *
mm_manager_get_proxy (MMManager *manager) mm_manager_get_proxy (MMManager *manager)
@@ -196,6 +211,26 @@ mm_manager_get_proxy (MMManager *manager)
return G_DBUS_PROXY (g_object_ref (manager->priv->manager_iface_proxy)); return G_DBUS_PROXY (g_object_ref (manager->priv->manager_iface_proxy));
} }
/*****************************************************************************/
/**
* mm_manager_set_logging_finish:
* @manager: A #MMManager.
* @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_set_logging().
* @error: Return location for error or %NULL.
*
* Finishes an operation started with mm_manager_set_logging().
*
* Returns: %TRUE if the call succeded, %FALSE if @error is set.
*/
gboolean
mm_manager_set_logging_finish (MMManager *manager,
GAsyncResult *res,
GError **error)
{
return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
}
static void static void
set_logging_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy, set_logging_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
GAsyncResult *res, GAsyncResult *res,
@@ -215,6 +250,23 @@ set_logging_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
g_object_unref (simple); g_object_unref (simple);
} }
/**
* mm_manager_set_logging:
* @manager: A #MMManager.
* @level: the login level to set.
* @cancellable: (allow-none): A #GCancellable or %NULL.
* @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
* @user_data: User data to pass to @callback.
*
* Asynchronously requests to set the specified logging level in the daemon.
*
* When the operation is finished, @callback will be invoked in the
* <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
* of the thread you are calling this method from. You can then call
* mm_manager_set_logging_finish() to get the result of the operation.
*
* See mm_manager_set_logging_sync() for the synchronous, blocking version of this method.
*/
void void
mm_manager_set_logging (MMManager *manager, mm_manager_set_logging (MMManager *manager,
const gchar *level, const gchar *level,
@@ -237,18 +289,21 @@ mm_manager_set_logging (MMManager *manager,
result); result);
} }
gboolean /**
mm_manager_set_logging_finish (MMManager *manager, * mm_manager_set_logging_sync:
GAsyncResult *res, * @manager: A #MMManager.
GError **error) * @level: the login level to set.
{ * @cancellable: (allow-none): A #GCancellable or %NULL.
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), * @error: Return location for error or %NULL.
error)) *
return FALSE; * Synchronously requests to set the specified logging level in the daemon..
*
return TRUE; * The calling thread is blocked until a reply is received.
} *
* See mm_manager_set_logging() for the asynchronous version of this method.
*
* Returns: %TRUE if the call succeded, %FALSE if @error is set.
*/
gboolean gboolean
mm_manager_set_logging_sync (MMManager *manager, mm_manager_set_logging_sync (MMManager *manager,
const gchar *level, const gchar *level,
@@ -262,6 +317,30 @@ mm_manager_set_logging_sync (MMManager *manager,
error)); error));
} }
/*****************************************************************************/
/**
* mm_manager_scan_devices_finish:
* @manager: A #MMManager.
* @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_scan_devices().
* @error: Return location for error or %NULL.
*
* Finishes an operation started with mm_manager_scan_devices().
*
* Returns: %TRUE if the call succeded, %FALSE if @error is set.
*/
gboolean
mm_manager_scan_devices_finish (MMManager *manager,
GAsyncResult *res,
GError **error)
{
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res),
error))
return FALSE;
return TRUE;
}
static void static void
scan_devices_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy, scan_devices_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
GAsyncResult *res, GAsyncResult *res,
@@ -288,11 +367,10 @@ scan_devices_ready (MmGdbusOrgFreedesktopModemManager1 *manager_iface_proxy,
* @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
* @user_data: User data to pass to @callback. * @user_data: User data to pass to @callback.
* *
* Requests to scan looking for devices. * Asynchronously requests to scan looking for devices.
* *
* Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-ModemManager1.ScanDevices">ScanDevices()</link> * When the operation is finished, @callback will be invoked in the
* D-Bus method on @manager. When the operation is finished, @callback will be * <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
* invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
* of the thread you are calling this method from. You can then call * of the thread you are calling this method from. You can then call
* mm_manager_scan_devices_finish() to get the result of the operation. * mm_manager_scan_devices_finish() to get the result of the operation.
* *
@@ -318,42 +396,19 @@ mm_manager_scan_devices (MMManager *manager,
result); result);
} }
/**
* mm_manager_scan_devices_finish:
* @manager: A #MMManager.
* @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mm_manager_scan_devices().
* @error: Return location for error or %NULL.
*
* Finishes an operation started with mm_manager_scan_devices().
*
* Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
*/
gboolean
mm_manager_scan_devices_finish (MMManager *manager,
GAsyncResult *res,
GError **error)
{
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res),
error))
return FALSE;
return TRUE;
}
/** /**
* mm_manager_scan_devices_sync: * mm_manager_scan_devices_sync:
* @manager: A #MMManager. * @manager: A #MMManager.
* @cancellable: (allow-none): A #GCancellable or %NULL. * @cancellable: (allow-none): A #GCancellable or %NULL.
* @error: Return location for error or %NULL. * @error: Return location for error or %NULL.
* *
* Requests to scan looking for devices. * Synchronously requests to scan looking for devices.
* *
* Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-ModemManager1.ScanDevices">ScanDevices()</link> * The calling thread is blocked until a reply is received.
* D-Bus method on @manager. The calling thread is blocked until a reply is received.
* *
* See mm_gdbus_org_freedesktop_modem_manager1_call_scan_devices() for the asynchronous version of this method. * See mm_manager_scan_devices() for the asynchronous version of this method.
* *
* Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. * Returns: %TRUE if the call succeded, %FALSE if @error is set.
*/ */
gboolean gboolean
mm_manager_scan_devices_sync (MMManager *manager, mm_manager_scan_devices_sync (MMManager *manager,
@@ -366,6 +421,8 @@ mm_manager_scan_devices_sync (MMManager *manager,
error)); error));
} }
/*****************************************************************************/
static gboolean static gboolean
initable_init_sync (GInitable *initable, initable_init_sync (GInitable *initable,
GCancellable *cancellable, GCancellable *cancellable,
@@ -411,6 +468,8 @@ initable_init_sync (GInitable *initable,
return TRUE; return TRUE;
} }
/*****************************************************************************/
typedef struct { typedef struct {
GSimpleAsyncResult *result; GSimpleAsyncResult *result;
int io_priority; int io_priority;
@@ -529,6 +588,8 @@ initable_init_async (GAsyncInitable *initable,
ctx); ctx);
} }
/*****************************************************************************/
static void static void
mm_manager_init (MMManager *manager) mm_manager_init (MMManager *manager)
{ {
@@ -539,14 +600,13 @@ mm_manager_init (MMManager *manager)
} }
static void static void
finalize (GObject *object) dispose (GObject *object)
{ {
MMManagerPrivate *priv = MM_MANAGER (object)->priv; MMManager *self = MM_MANAGER (object);
if (priv->manager_iface_proxy) g_clear_object (&self->priv->manager_iface_proxy);
g_object_unref (priv->manager_iface_proxy);
G_OBJECT_CLASS (mm_manager_parent_class)->finalize (object); G_OBJECT_CLASS (mm_manager_parent_class)->dispose (object);
} }
static void static void
@@ -572,5 +632,5 @@ mm_manager_class_init (MMManagerClass *manager_class)
g_type_class_add_private (object_class, sizeof (MMManagerPrivate)); g_type_class_add_private (object_class, sizeof (MMManagerPrivate));
/* Virtual methods */ /* Virtual methods */
object_class->finalize = finalize; object_class->dispose = dispose;
} }

View File

@@ -17,7 +17,8 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA. * Boston, MA 02110-1301 USA.
* *
* Copyright (C) 2011 Google, Inc. * Copyright (C) 2011 - 2012 Aleksander Morgado <aleksander@gnu.org>
* Copyright (C) 2011 - 2012 Google, Inc.
* *
* Author: Aleksander Morgado <aleksander@lanedo.com> * Author: Aleksander Morgado <aleksander@lanedo.com>
*/ */
@@ -37,18 +38,26 @@ G_BEGIN_DECLS
#define MM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), MM_TYPE_MANAGER)) #define MM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), MM_TYPE_MANAGER))
#define MM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MANAGER, MMManagerClass)) #define MM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MANAGER, MMManagerClass))
typedef struct _MMManager MMManager;
typedef struct _MMManagerClass MMManagerClass;
typedef struct _MMManagerPrivate MMManagerPrivate; typedef struct _MMManagerPrivate MMManagerPrivate;
typedef struct { /**
* MMManager:
*
* The #MMManager structure contains private data and should only be accessed
* using the provided API.
*/
struct _MMManager {
/*< private >*/ /*< private >*/
MmGdbusObjectManagerClient parent; MmGdbusObjectManagerClient parent;
MMManagerPrivate *priv; MMManagerPrivate *priv;
} MMManager; };
typedef struct { struct _MMManagerClass {
/*< private >*/ /*< private >*/
MmGdbusObjectManagerClientClass parent; MmGdbusObjectManagerClientClass parent;
} MMManagerClass; };
GType mm_manager_get_type (void); GType mm_manager_get_type (void);