Mercurial > pidgin
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 { |