comparison plugins/dbus-example.c @ 11173:91ca67258564

[gaim-migrate @ 13278] The DBus plugin example I forgot to upload last time. committer: Tailor Script <tailor@pidgin.im>
author Piotr Zielinski <zielaj>
date Sat, 30 Jul 2005 16:34:18 +0000
parents
children 4295083cf489
comparison
equal deleted inserted replaced
11172:1f0844561c7e 11173:91ca67258564
1 /*
2 This is an example of a gaim dbus plugin. After enabling this
3 plugin, the following commands should work from the command line:
4
5 prompt$ gaim-send DbusExampleGetHelloObject
6
7 returns, say: int32 74
8
9 prompt$ gaim-send DbusExampleGetText int32:74
10
11 returns: string "Hello."
12
13 prompt$ gaim-send DbusExampleSetText int32:74 string:Bye!
14
15 prompt$ gaim-send DbusExampleGetText int32:74
16
17 returns: string "Bye!"
18
19 */
20
21 #include "internal.h"
22
23 #include "plugin.h"
24 #include "blist.h"
25 #include "version.h"
26
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <string.h>
30
31 #define DBUS_API_SUBJECT_TO_CHANGE
32 #include "dbus-maybe.h"
33 #include "dbus-bindings.h"
34
35 typedef struct {
36 char *text;
37 } GaimText;
38
39 /* This makes the structure GaimText visible to the gaim-dbus type
40 system. It defines GaimText as a type with no parent. From now
41 on, we will be able to register pointers to structures of this
42 type. You to dbus-define types you want to be directly accessible
43 by external applications. */
44 GAIM_DBUS_DEFINE_TYPE(GaimText)
45
46 /* Here we make four functions accessible to other applications by
47 DBus. These functions can access types defined in gaim proper
48 (GaimBuddy) as well as the types defined in the plugin (GaimText). */
49 DBUS_EXPORT GaimText* dbus_example_get_hello_object(void);
50 DBUS_EXPORT void dbus_example_set_text(GaimText *obj, const char *text);
51 DBUS_EXPORT const char *dbus_example_get_text(GaimText *obj);
52 DBUS_EXPORT const char *dbus_example_get_buddy_name(GaimBuddy *buddy);
53
54 /* This file has been generated by the #dbus-analize-functions.py
55 script. It contains dbus wrappers for the four functions declared
56 above. */
57 #include "dbus-example-bindings.c"
58
59 /* This is the GaimText object we want to make publicly visible. */
60 static GaimText hello;
61
62 /* Here come the definitions of the four exported functions. */
63 GaimText* dbus_example_get_hello_object(void)
64 {
65 return &hello;
66 }
67
68 void dbus_example_set_text(GaimText *obj, const char *text)
69 {
70 if (obj != NULL) {
71 g_free(obj->text);
72 obj->text = g_strdup(text);
73 }
74 }
75
76 const char *dbus_example_get_text(GaimText *obj)
77 {
78 if (obj != NULL)
79 return obj->text;
80 else
81 return NULL;
82 }
83
84 const char *dbus_example_get_buddy_name(GaimBuddy *buddy)
85 {
86 return gaim_buddy_get_name(buddy);
87 }
88
89 /* And now standard plugin stuff */
90
91 static gboolean
92 plugin_load(GaimPlugin *plugin)
93 {
94 /* First, we have to register our four exported functions with the
95 main gaim dbus loop. Without this statement, the gaim dbus
96 code wouldn't know about our functions. */
97 GAIM_DBUS_REGISTER_BINDINGS(plugin);
98
99 /* Then, we register the hello object of type GaimText. Note that
100 pointer registrations / unregistrations are completely dynamic;
101 they don't have to be made when the plugin is loaded /
102 unloaded. Without this statement the dbus gaim code wouldn't
103 know about the hello object. */
104 GAIM_DBUS_REGISTER_POINTER(&hello, GaimText);
105
106 hello.text = g_strdup("Hello.");
107
108 return TRUE;
109 }
110
111
112 static gboolean
113 plugin_unload(GaimPlugin *plugin)
114 {
115 g_free(hello.text);
116
117 /* It is necessary to unregister all pointers registered by the module. */
118 GAIM_DBUS_UNREGISTER_POINTER(&hello);
119
120 return TRUE;
121 }
122
123 static GaimPluginInfo info =
124 {
125 GAIM_PLUGIN_MAGIC,
126 GAIM_MAJOR_VERSION,
127 GAIM_MINOR_VERSION,
128 GAIM_PLUGIN_STANDARD, /**< type */
129 NULL, /**< ui_requirement */
130 0, /**< flags */
131 NULL, /**< dependencies */
132 GAIM_PRIORITY_DEFAULT, /**< priority */
133
134 "dbus-example", /**< id */
135 N_("DBus"), /**< name */
136 VERSION, /**< version */
137 /** summary */
138 N_("DBus Plugin Example"),
139 /** description */
140 N_("DBus Plugin Example"),
141 "Piotr Zielinski (http://cl.cam.ac.uk/~pz215)", /**< author */
142 GAIM_WEBSITE, /**< homepage */
143
144 plugin_load, /**< load */
145 plugin_unload, /**< unload */
146 NULL, /**< destroy */
147
148 NULL, /**< ui_info */
149 NULL, /**< extra_info */
150 NULL, /**< prefs_info */
151 NULL
152 };
153
154 static void init_plugin(GaimPlugin *plugin)
155 {
156 }
157
158 GAIM_INIT_PLUGIN(dbus_example, init_plugin, info)
159
160