[Telepathy-commits] [telepathy-mission-control/master] Map MC errors as DBus errors
Alberto Mardegan
alberto.mardegan at nokia.com
Thu Feb 26 23:32:41 PST 2009
Register a GType for the McError enum, and register it to DBus for error
mapping.
Code mostly copied from tp-glib.
---
libmcclient/mc-errors.c | 46 ++++++++++++++++++++++++++++++++++++++++++----
libmcclient/mc-errors.h | 11 ++++++++++-
src/mcd-misc.c | 2 --
3 files changed, 52 insertions(+), 7 deletions(-)
diff --git a/libmcclient/mc-errors.c b/libmcclient/mc-errors.c
index 624a743..2b34557 100644
--- a/libmcclient/mc-errors.c
+++ b/libmcclient/mc-errors.c
@@ -21,12 +21,50 @@
*/
#include "mc-errors.h"
+#include <dbus/dbus-glib.h>
GQuark mc_error_quark (void)
{
- static GQuark quark = 0;
- if (quark == 0)
- quark = g_quark_from_static_string ("mission-control-quark");
- return quark;
+ static gsize quark = 0;
+
+ if (g_once_init_enter (&quark))
+ {
+ GQuark domain = g_quark_from_static_string ("mc-errors");
+
+ g_assert (sizeof (GQuark) <= sizeof (gsize));
+
+ g_type_init ();
+ dbus_g_error_domain_register (domain, MC_ERROR_PREFIX, MC_TYPE_ERROR);
+ g_once_init_leave (&quark, domain);
+ }
+ return (GQuark) quark;
+}
+
+GType
+mc_error_get_type (void)
+{
+ static GType etype = 0;
+ if (G_UNLIKELY (etype == 0))
+ {
+ static const GEnumValue values[] = {
+ { MC_DISCONNECTED_ERROR, "MC_DISCONNECTED_ERROR", "Disconnected" },
+ { MC_INVALID_HANDLE_ERROR, "MC_INVALID_HANDLE_ERROR", "InvalidHandle" },
+ { MC_NO_MATCHING_CONNECTION_ERROR, "MC_NO_MATCHING_CONNECTION_ERROR", "NoMatchingConnection" },
+ { MC_INVALID_ACCOUNT_ERROR, "MC_INVALID_ACCOUNT_ERROR", "InvalidAccount" },
+ { MC_PRESENCE_FAILURE_ERROR, "MC_PRESENCE_FAILURE_ERROR", "PresenceFailure" },
+ { MC_NO_ACCOUNTS_ERROR, "MC_NO_ACCOUNTS_ERROR", "NoAccounts" },
+ { MC_NETWORK_ERROR, "MC_NETWORK_ERROR", "NetworkError" },
+ { MC_CONTACT_DOES_NOT_SUPPORT_VOICE_ERROR, "MC_CONTACT_DOES_NOT_SUPPORT_VOICE_ERROR", "ContactDoesNotSupportVoice" },
+ { MC_LOWMEM_ERROR, "MC_LOWMEM_ERROR", "Lowmem" },
+ { MC_CHANNEL_REQUEST_GENERIC_ERROR, "MC_CHANNEL_REQUEST_GENERIC_ERROR", "ChannelRequestGenericError" },
+ { MC_CHANNEL_BANNED_ERROR, "MC_CHANNEL_BANNED_ERROR", "ChannelBanned" },
+ { MC_CHANNEL_FULL_ERROR, "MC_CHANNEL_FULL_ERROR", "ChannelFull" },
+ { MC_CHANNEL_INVITE_ONLY_ERROR, "MC_CHANNEL_INVITE_ONLY_ERROR", "ChannelInviteOnly" },
+ { 0 }
+ };
+
+ etype = g_enum_register_static ("McError", values);
+ }
+ return etype;
}
diff --git a/libmcclient/mc-errors.h b/libmcclient/mc-errors.h
index 235d74a..a2da9af 100644
--- a/libmcclient/mc-errors.h
+++ b/libmcclient/mc-errors.h
@@ -25,6 +25,12 @@
#define __LIBMCCLIENT_ERRORS_H__
#include <glib.h>
+#include <glib-object.h>
+
+#define MC_ERROR_PREFIX "com.nokia.MissionControl.Errors"
+
+#define MC_TYPE_ERROR (mc_error_get_type())
+GType mc_error_get_type (void);
#define MC_ERROR (mc_error_quark())
@@ -43,7 +49,10 @@ typedef enum {
MC_CHANNEL_FULL_ERROR,
MC_CHANNEL_INVITE_ONLY_ERROR,
MC_LAST_ERROR /*< skip >*/
-} MCError;
+} McError;
+
+/* Keep API compatibility: */
+#define MCError McError
GQuark mc_error_quark (void);
diff --git a/src/mcd-misc.c b/src/mcd-misc.c
index 177fec3..5ec5102 100644
--- a/src/mcd-misc.c
+++ b/src/mcd-misc.c
@@ -104,8 +104,6 @@ _mcd_deepcopy_asv (GHashTable *asv)
return copy;
}
-#define MC_ERROR_PREFIX "com.nokia.MissionControl.Errors"
-
const gchar *
_mcd_get_error_string (const GError *error)
{
--
1.5.6.5
More information about the telepathy-commits
mailing list