5
#include "status-provider.h"
6
#include "status-provider-pidgin.h"
8
#include <dbus/dbus-glib.h>
14
PG_STATUS_UNAVAILABLE,
17
PG_STATUS_EXTENDEND_AWAY,
22
static const StatusProviderStatus pg_to_sp_map[] = {
23
/* PG_STATUS_UNKNOWN, */ STATUS_PROVIDER_STATUS_OFFLINE,
24
/* PG_STATUS_OFFLINE, */ STATUS_PROVIDER_STATUS_OFFLINE,
25
/* PG_STATUS_AVAILABLE, */ STATUS_PROVIDER_STATUS_ONLINE,
26
/* PG_STATUS_UNAVAILABLE, */ STATUS_PROVIDER_STATUS_DND,
27
/* PG_STATUS_INVISIBLE, */ STATUS_PROVIDER_STATUS_INVISIBLE,
28
/* PG_STATUS_AWAY, */ STATUS_PROVIDER_STATUS_AWAY,
29
/* PG_STATUS_EXTENDEND_AWAY, */ STATUS_PROVIDER_STATUS_AWAY,
30
/* PG_STATUS_MOBILE, */ STATUS_PROVIDER_STATUS_OFFLINE,
31
/* PG_STATUS_TUNE */ STATUS_PROVIDER_STATUS_OFFLINE
34
static const pg_status_t sp_to_pg_map[STATUS_PROVIDER_STATUS_LAST] = {
35
/* STATUS_PROVIDER_STATUS_ONLINE, */ PG_STATUS_AVAILABLE,
36
/* STATUS_PROVIDER_STATUS_AWAY, */ PG_STATUS_AWAY,
37
/* STATUS_PROVIDER_STATUS_DND */ PG_STATUS_UNAVAILABLE,
38
/* STATUS_PROVIDER_STATUS_INVISIBLE*/ PG_STATUS_INVISIBLE,
39
/* STATUS_PROVIDER_STATUS_OFFLINE */ PG_STATUS_OFFLINE
42
typedef struct _StatusProviderPidginPrivate StatusProviderPidginPrivate;
43
struct _StatusProviderPidginPrivate {
45
pg_status_t pg_status;
48
#define STATUS_PROVIDER_PIDGIN_GET_PRIVATE(o) \
49
(G_TYPE_INSTANCE_GET_PRIVATE ((o), STATUS_PROVIDER_PIDGIN_TYPE, StatusProviderPidginPrivate))
53
static void status_provider_pidgin_class_init (StatusProviderPidginClass *klass);
54
static void status_provider_pidgin_init (StatusProviderPidgin *self);
55
static void status_provider_pidgin_dispose (GObject *object);
56
static void status_provider_pidgin_finalize (GObject *object);
58
static void set_status (StatusProvider * sp, StatusProviderStatus status);
59
static StatusProviderStatus get_status (StatusProvider * sp);
61
G_DEFINE_TYPE (StatusProviderPidgin, status_provider_pidgin, STATUS_PROVIDER_TYPE);
64
status_provider_pidgin_class_init (StatusProviderPidginClass *klass)
66
GObjectClass *object_class = G_OBJECT_CLASS (klass);
68
g_type_class_add_private (klass, sizeof (StatusProviderPidginPrivate));
70
object_class->dispose = status_provider_pidgin_dispose;
71
object_class->finalize = status_provider_pidgin_finalize;
73
StatusProviderClass * spclass = STATUS_PROVIDER_CLASS(klass);
75
spclass->set_status = set_status;
76
spclass->get_status = get_status;
82
status_provider_pidgin_init (StatusProviderPidgin *self)
84
StatusProviderPidginPrivate * priv = STATUS_PROVIDER_PIDGIN_GET_PRIVATE(self);
87
priv->pg_status = PG_STATUS_OFFLINE;
89
DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
90
g_return_if_fail(bus != NULL); /* Can't do anymore DBus stuff without this,
91
all non-DBus stuff should be done */
93
GError * error = NULL;
94
priv->proxy = dbus_g_proxy_new_for_name_owner (bus,
95
"im.pidgin.purple.PurpleService",
96
"/im/pidgin/purple/PurpleObject",
97
"im.pidgin.purple.PurpleInterface",
100
g_debug("Unable to get Pidgin proxy: %s", error->message);
108
status_provider_pidgin_dispose (GObject *object)
111
G_OBJECT_CLASS (status_provider_pidgin_parent_class)->dispose (object);
116
status_provider_pidgin_finalize (GObject *object)
119
G_OBJECT_CLASS (status_provider_pidgin_parent_class)->finalize (object);
124
status_provider_pidgin_new:
126
Creates a new #StatusProviderPidgin object. No parameters or anything
127
like that. Just a convience function.
129
Return value: A new instance of #StatusProviderPidgin
132
status_provider_pidgin_new (void)
134
return STATUS_PROVIDER(g_object_new(STATUS_PROVIDER_PIDGIN_TYPE, NULL));
137
/* Takes the status provided generically for Status providers
138
and turns it into a Pidgin status and sends it to Pidgin. */
140
set_status (StatusProvider * sp, StatusProviderStatus status)
142
g_debug("\tSetting Pidgin Status: %d", status);
143
g_return_if_fail(IS_STATUS_PROVIDER_PIDGIN(sp));
144
StatusProviderPidginPrivate * priv = STATUS_PROVIDER_PIDGIN_GET_PRIVATE(sp);
145
pg_status_t pg_status = sp_to_pg_map[status];
146
priv->pg_status = pg_status;
150
/* Takes the cached Pidgin status and makes it into the generic
151
Status provider status */
152
static StatusProviderStatus
153
get_status (StatusProvider * sp)
155
g_return_val_if_fail(IS_STATUS_PROVIDER_PIDGIN(sp), STATUS_PROVIDER_STATUS_OFFLINE);
156
StatusProviderPidginPrivate * priv = STATUS_PROVIDER_PIDGIN_GET_PRIVATE(sp);
157
return pg_to_sp_map[priv->pg_status];