comparison libpurple/disco.c @ 26252:535c866b433c

Hide the structs, add accessors, and fix various smaller things: * Make the flags an enum instead of #defines * There were two sets of _in_progress functions, removed one. * Adjusted a few return types to match usage * Move the fetch_count into the prpl's protocol_data (which is no longer the JabberStream but a dedicated struct)
author Paul Aurich <paul@darkrain42.org>
date Mon, 30 Mar 2009 00:42:15 +0000
parents 2efdd76f5dc0
children c619bef09bec
comparison
equal deleted inserted replaced
26251:31e05bafd7a3 26252:535c866b433c
27 #include "internal.h" 27 #include "internal.h"
28 #include "debug.h" 28 #include "debug.h"
29 29
30 #include "disco.h" 30 #include "disco.h"
31 31
32 /**************************************************************************/
33 /* Main structures, members and constants */
34 /**************************************************************************/
35
36 /**
37 * Represents a list of services for a given connection on a given protocol.
38 */
39 struct _PurpleDiscoList {
40 PurpleAccount *account; /**< The account this list belongs to. */
41 GList *services; /**< The list of services. */
42
43 gboolean in_progress;
44
45 gpointer ui_data; /**< UI private data. */
46 gpointer proto_data; /** Prpl private data. */
47 guint ref; /**< The reference count. */
48 };
49
50 /**
51 * Represents a list of services for a given connection on a given protocol.
52 */
53 struct _PurpleDiscoService {
54 PurpleDiscoList *list;
55 gchar *name; /**< The name of the service. */
56 gchar *description; /**< The name of the service. */
57
58 PurpleDiscoServiceCategory category; /**< The category of service. */
59 PurpleDiscoServiceType type; /**< The type of service. */
60 PurpleDiscoServiceFlags flags;
61 };
62
32 static PurpleDiscoUiOps *ops = NULL; 63 static PurpleDiscoUiOps *ops = NULL;
33 64
34 PurpleDiscoList *purple_disco_list_new(PurpleAccount *account, void *ui_data) 65 PurpleDiscoList *purple_disco_list_new(PurpleAccount *account, void *ui_data)
35 { 66 {
36 PurpleDiscoList *list; 67 PurpleDiscoList *list;
46 ops->create(list); 77 ops->create(list);
47 78
48 return list; 79 return list;
49 } 80 }
50 81
51 void purple_disco_list_ref(PurpleDiscoList *list) 82 PurpleDiscoList *purple_disco_list_ref(PurpleDiscoList *list)
52 { 83 {
53 g_return_if_fail(list != NULL); 84 g_return_val_if_fail(list != NULL, NULL);
54 85
55 list->ref++; 86 list->ref++;
56 purple_debug_misc("disco", "reffing list, ref count now %d\n", list->ref); 87 purple_debug_misc("disco", "reffing list, ref count now %d\n", list->ref);
88
89 return list;
57 } 90 }
58 91
59 static void purple_disco_list_service_destroy(PurpleDiscoList *list, PurpleDiscoService *r) 92 static void purple_disco_list_service_destroy(PurpleDiscoList *list, PurpleDiscoService *r)
60 { 93 {
61 g_free(r->name); 94 g_free(r->name);
104 if (ops && ops->add_service) 137 if (ops && ops->add_service)
105 ops->add_service(list, service, parent); 138 ops->add_service(list, service, parent);
106 } 139 }
107 140
108 PurpleDiscoService *purple_disco_list_service_new(PurpleDiscoServiceCategory category, const gchar *name, 141 PurpleDiscoService *purple_disco_list_service_new(PurpleDiscoServiceCategory category, const gchar *name,
109 PurpleDiscoServiceType type, const gchar *description, int flags) 142 PurpleDiscoServiceType type, const gchar *description, PurpleDiscoServiceFlags flags)
110 { 143 {
111 PurpleDiscoService *s; 144 PurpleDiscoService *s;
112 145
113 g_return_val_if_fail(name != NULL, NULL); 146 g_return_val_if_fail(name != NULL, NULL);
147 g_return_val_if_fail(category != PURPLE_DISCO_SERVICE_CAT_UNSET, NULL);
114 148
115 s = g_new0(PurpleDiscoService, 1); 149 s = g_new0(PurpleDiscoService, 1);
116 s->category = category; 150 s->category = category;
117 s->name = g_strdup(name); 151 s->name = g_strdup(name);
118 s->type = type; 152 s->type = type;
120 s->flags = flags; 154 s->flags = flags;
121 155
122 return s; 156 return s;
123 } 157 }
124 158
125 void purple_disco_get_list(PurpleConnection *gc, PurpleDiscoList *list) 159 void purple_disco_get_list(PurpleDiscoList *list)
126 { 160 {
161 PurpleConnection *pc = NULL;
127 PurplePlugin *prpl = NULL; 162 PurplePlugin *prpl = NULL;
128 PurplePluginProtocolInfo *prpl_info = NULL; 163 PurplePluginProtocolInfo *prpl_info = NULL;
129 164
130 g_return_if_fail(gc != NULL); 165 g_return_if_fail(list != NULL);
131 166
132 prpl = purple_connection_get_prpl(gc); 167 pc = purple_account_get_connection(list->account);
168
169 g_return_if_fail(pc != NULL);
170
171 prpl = purple_connection_get_prpl(pc);
133 172
134 if (prpl != NULL) 173 if (prpl != NULL)
135 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); 174 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
136 175
137 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_get_list)) 176 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_get_list))
138 prpl_info->disco_get_list(gc, list); 177 prpl_info->disco_get_list(pc, list);
139 } 178 }
140 179
141 void purple_disco_cancel_get_list(PurpleDiscoList *list) 180 void purple_disco_cancel_get_list(PurpleDiscoList *list)
142 { 181 {
143 PurplePlugin *prpl = NULL; 182 PurplePlugin *prpl = NULL;
158 197
159 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_cancel)) 198 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_cancel))
160 prpl_info->disco_cancel(list); 199 prpl_info->disco_cancel(list);
161 } 200 }
162 201
163 int purple_disco_service_register(PurpleConnection *gc, PurpleDiscoService *service) 202 void purple_disco_service_register(PurpleDiscoService *service)
164 { 203 {
204 PurpleConnection *pc;
165 PurplePlugin *prpl = NULL; 205 PurplePlugin *prpl = NULL;
166 PurplePluginProtocolInfo *prpl_info = NULL; 206 PurplePluginProtocolInfo *prpl_info = NULL;
167 207
168 g_return_val_if_fail(gc != NULL, -EINVAL); 208 g_return_if_fail(service != NULL);
169 209
170 prpl = purple_connection_get_prpl(gc); 210 pc = purple_account_get_connection(service->list->account);
211
212 g_return_if_fail(pc != NULL);
213
214 prpl = purple_connection_get_prpl(pc);
171 215
172 if (prpl != NULL) 216 if (prpl != NULL)
173 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); 217 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
174 218
175 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_service_register)) 219 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_service_register))
176 return prpl_info->disco_service_register(gc, service); 220 prpl_info->disco_service_register(pc, service);
177 221 }
178 return -EINVAL; 222
179 } 223 const gchar *purple_disco_service_get_name(PurpleDiscoService *service)
180 224 {
181 void purple_disco_set_in_progress(PurpleDiscoList *list, gboolean in_progress) 225 g_return_val_if_fail(service != NULL, NULL);
226
227 return service->name;
228 }
229
230 const gchar *purple_disco_service_get_description(PurpleDiscoService *service)
231 {
232 g_return_val_if_fail(service != NULL, NULL);
233
234 return service->description;
235 }
236
237 PurpleDiscoServiceCategory
238 purple_disco_service_get_category(PurpleDiscoService *service)
239 {
240 g_return_val_if_fail(service != NULL, PURPLE_DISCO_SERVICE_CAT_UNSET);
241
242 return service->category;
243 }
244
245 PurpleDiscoServiceType
246 purple_disco_service_get_type(PurpleDiscoService *service)
247 {
248 g_return_val_if_fail(service != NULL, PURPLE_DISCO_SERVICE_TYPE_NONE);
249
250 return service->type;
251 }
252
253 PurpleDiscoServiceFlags
254 purple_disco_service_get_flags(PurpleDiscoService *service)
255 {
256 g_return_val_if_fail(service != NULL, PURPLE_DISCO_NONE);
257
258 return service->flags;
259 }
260
261 PurpleAccount* purple_disco_list_get_account(PurpleDiscoList *list)
262 {
263 g_return_val_if_fail(list != NULL, NULL);
264
265 return list->account;
266 }
267
268 GList* purple_disco_list_get_services(PurpleDiscoList *list)
269 {
270 g_return_val_if_fail(list != NULL, NULL);
271
272 return list->services;
273 }
274
275 void purple_disco_list_set_ui_data(PurpleDiscoList *list, gpointer ui_data)
276 {
277 g_return_if_fail(list != NULL);
278
279 list->ui_data = ui_data;
280 }
281
282 gpointer purple_disco_list_get_ui_data(PurpleDiscoList *list)
283 {
284 g_return_val_if_fail(list != NULL, NULL);
285
286 return list->ui_data;
287 }
288
289 void purple_disco_list_set_in_progress(PurpleDiscoList *list,
290 gboolean in_progress)
182 { 291 {
183 g_return_if_fail(list != NULL); 292 g_return_if_fail(list != NULL);
184 293
185 list->in_progress = in_progress; 294 list->in_progress = in_progress;
186 295
187 if (ops && ops->in_progress) 296 if (ops && ops->in_progress)
188 ops->in_progress(list, in_progress); 297 ops->in_progress(list, in_progress);
189 } 298 }
190 299
191 gboolean purple_disco_get_in_progress(PurpleDiscoList *list) 300 gboolean purple_disco_list_get_in_progress(PurpleDiscoList *list)
192 { 301 {
193 g_return_val_if_fail(list != NULL, FALSE); 302 g_return_val_if_fail(list != NULL, FALSE);
194 303
195 return list->in_progress; 304 return list->in_progress;
196 } 305 }
197 306
198 void purple_disco_list_set_account(PurpleDiscoList *list, PurpleAccount *account) 307 void purple_disco_list_set_protocol_data(PurpleDiscoList *list,
199 { 308 gpointer proto_data)
200 list->account = account; 309 {
201 } 310 g_return_if_fail(list != NULL);
202 311
203 PurpleAccount* purple_disco_list_get_account(PurpleDiscoList *list)
204 {
205 return list->account;
206 }
207
208 GList* spurple_disco_list_get_services(PurpleDiscoList *dl)
209 {
210 return dl->services;
211 }
212
213 void purple_disco_list_set_ui_data(PurpleDiscoList *list, gpointer ui_data)
214 {
215 list->ui_data = ui_data;
216 }
217
218 gpointer purple_disco_list_get_ui_data(PurpleDiscoList *list)
219 {
220 return list->ui_data;
221 }
222
223 void purple_disco_list_set_in_progress(PurpleDiscoList *list, gboolean in_progress)
224 {
225 list->in_progress = in_progress;
226 }
227
228 gboolean purple_disco_list_get_in_progress(PurpleDiscoList *list)
229 {
230 return list->in_progress;
231 }
232
233 void purple_disco_list_set_fetch_count(PurpleDiscoList *list, gint fetch_count)
234 {
235 list->fetch_count = fetch_count;
236 purple_debug_info("disco", "fetch_count = %d\n", fetch_count);
237 }
238
239 gint purple_disco_list_get_fetch_count(PurpleDiscoList *list)
240 {
241 return list->fetch_count;
242 }
243
244 void purple_disco_list_set_proto_data(PurpleDiscoList *list, gpointer proto_data)
245 {
246 list->proto_data = proto_data; 312 list->proto_data = proto_data;
247 } 313 }
248 314
249 gpointer purple_disco_list_get_proto_data(PurpleDiscoList *list) 315 gpointer purple_disco_list_get_protocol_data(PurpleDiscoList *list)
250 { 316 {
317 g_return_val_if_fail(list != NULL, NULL);
318
251 return list->proto_data; 319 return list->proto_data;
252 } 320 }
253 321
254 void purple_disco_set_ui_ops(PurpleDiscoUiOps *ui_ops) 322 void purple_disco_set_ui_ops(PurpleDiscoUiOps *ui_ops)
255 { 323 {