Mercurial > pidgin
comparison src/account.c @ 5563:9eb5b13fd412
[gaim-migrate @ 5965]
Just a taste of what's coming.
Standard "This won't compile" thing. Plugin authors, you're going to hate
me, but that's okay, because I have friends too!
It's really late. My brain resembles that of fish swimming in jello pudding
with neon lights flying around chanting musicals. I'm not on drugs. I'm
just that tired.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Fri, 30 May 2003 09:38:29 +0000 |
parents | |
children | 187c740f2a4e |
comparison
equal
deleted
inserted
replaced
5562:3c8d34574601 | 5563:9eb5b13fd412 |
---|---|
1 /** | |
2 * @file account.c Account API | |
3 * @ingroup core | |
4 * | |
5 * gaim | |
6 * | |
7 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
8 * | |
9 * This program is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * This program is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License | |
20 * along with this program; if not, write to the Free Software | |
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
22 */ | |
23 #include "account.h" | |
24 #include "prefs.h" | |
25 | |
26 typedef struct | |
27 { | |
28 GaimPrefType type; | |
29 | |
30 union | |
31 { | |
32 int integer; | |
33 char *string; | |
34 gboolean bool; | |
35 | |
36 } value; | |
37 | |
38 } GaimAccountSetting; | |
39 | |
40 static GList *accounts = NULL; | |
41 | |
42 static void | |
43 __delete_setting(void *data) | |
44 { | |
45 GaimAccountSetting *setting = (GaimAccountSetting *)data; | |
46 | |
47 if (setting->type == GAIM_PREF_STRING) | |
48 g_free(setting->value.string); | |
49 | |
50 g_free(setting); | |
51 } | |
52 | |
53 GaimAccount * | |
54 gaim_account_new(const char *username, GaimProtocol protocol) | |
55 { | |
56 GaimAccount *account; | |
57 | |
58 g_return_val_if_fail(username != NULL, NULL); | |
59 | |
60 account = g_new0(GaimAccount, 1); | |
61 | |
62 gaim_account_set_username(account, username); | |
63 gaim_account_set_protocol(account, protocol); | |
64 | |
65 account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, | |
66 g_free, __delete_setting); | |
67 | |
68 accounts = g_list_append(accounts, account); | |
69 | |
70 return account; | |
71 } | |
72 | |
73 void | |
74 gaim_account_destroy(GaimAccount *account) | |
75 { | |
76 g_return_if_fail(account != NULL); | |
77 | |
78 if (account->gc != NULL) | |
79 gaim_connection_destroy(account->gc); | |
80 | |
81 if (account->username != NULL) g_free(account->username); | |
82 if (account->alias != NULL) g_free(account->alias); | |
83 if (account->password != NULL) g_free(account->password); | |
84 if (account->user_info != NULL) g_free(account->user_info); | |
85 | |
86 g_hash_table_destroy(account->settings); | |
87 | |
88 accounts = g_list_remove(accounts, account); | |
89 | |
90 g_free(account); | |
91 } | |
92 | |
93 GaimConnection * | |
94 gaim_account_connect(GaimAccount *account) | |
95 { | |
96 GaimConnection *gc; | |
97 | |
98 g_return_val_if_fail(account != NULL, NULL); | |
99 g_return_val_if_fail(!gaim_account_is_connected(account), NULL); | |
100 | |
101 gc = gaim_connection_new(account); | |
102 | |
103 gaim_connection_connect(gc); | |
104 | |
105 return gc; | |
106 } | |
107 | |
108 void | |
109 gaim_account_disconnect(GaimAccount *account) | |
110 { | |
111 g_return_if_fail(account != NULL); | |
112 g_return_if_fail(gaim_account_is_connected(account)); | |
113 | |
114 gaim_connection_disconnect(account->gc); | |
115 gaim_connection_destroy(account->gc); | |
116 | |
117 account->gc = NULL; | |
118 } | |
119 | |
120 void | |
121 gaim_account_set_username(GaimAccount *account, const char *username) | |
122 { | |
123 g_return_if_fail(account != NULL); | |
124 g_return_if_fail(username != NULL); | |
125 | |
126 if (account->username != NULL) | |
127 g_free(account->username); | |
128 | |
129 account->username = (username == NULL ? NULL : g_strdup(username)); | |
130 } | |
131 | |
132 void | |
133 gaim_account_set_password(GaimAccount *account, const char *password) | |
134 { | |
135 g_return_if_fail(account != NULL); | |
136 g_return_if_fail(password != NULL); | |
137 | |
138 if (account->password != NULL) | |
139 g_free(account->password); | |
140 | |
141 account->password = (password == NULL ? NULL : g_strdup(password)); | |
142 } | |
143 | |
144 void | |
145 gaim_account_set_alias(GaimAccount *account, const char *alias) | |
146 { | |
147 g_return_if_fail(account != NULL); | |
148 g_return_if_fail(alias != NULL); | |
149 | |
150 if (account->alias != NULL) | |
151 g_free(account->alias); | |
152 | |
153 account->alias = (alias == NULL ? NULL : g_strdup(alias)); | |
154 } | |
155 | |
156 void | |
157 gaim_account_set_user_info(GaimAccount *account, const char *user_info) | |
158 { | |
159 g_return_if_fail(account != NULL); | |
160 g_return_if_fail(user_info != NULL); | |
161 | |
162 if (account->user_info != NULL) | |
163 g_free(account->user_info); | |
164 | |
165 account->user_info = (user_info == NULL ? NULL : g_strdup(user_info)); | |
166 } | |
167 | |
168 void | |
169 gaim_account_set_buddy_icon(GaimAccount *account, const char *icon) | |
170 { | |
171 g_return_if_fail(account != NULL); | |
172 g_return_if_fail(icon != NULL); | |
173 | |
174 if (account->buddy_icon != NULL) | |
175 g_free(account->buddy_icon); | |
176 | |
177 account->buddy_icon = (icon == NULL ? NULL : g_strdup(icon)); | |
178 } | |
179 | |
180 void | |
181 gaim_account_set_protocol(GaimAccount *account, GaimProtocol protocol) | |
182 { | |
183 g_return_if_fail(account != NULL); | |
184 | |
185 account->protocol = protocol; | |
186 } | |
187 | |
188 void | |
189 gaim_account_set_connection(GaimAccount *account, GaimConnection *gc) | |
190 { | |
191 g_return_if_fail(account != NULL); | |
192 g_return_if_fail(gc != NULL); | |
193 | |
194 account->gc = gc; | |
195 } | |
196 | |
197 void | |
198 gaim_account_set_remember_password(GaimAccount *account, gboolean value) | |
199 { | |
200 g_return_if_fail(account != NULL); | |
201 | |
202 account->remember_pass = value; | |
203 } | |
204 | |
205 void | |
206 gaim_account_set_int(GaimAccount *account, const char *name, int value) | |
207 { | |
208 GaimAccountSetting *setting; | |
209 | |
210 g_return_if_fail(account != NULL); | |
211 g_return_if_fail(name != NULL); | |
212 | |
213 setting = g_new0(GaimAccountSetting, 1); | |
214 | |
215 setting->type = GAIM_PREF_INT; | |
216 setting->value.integer = value; | |
217 | |
218 g_hash_table_insert(account->settings, g_strdup(name), setting); | |
219 } | |
220 | |
221 void | |
222 gaim_account_set_string(GaimAccount *account, const char *name, | |
223 const char *value) | |
224 { | |
225 GaimAccountSetting *setting; | |
226 | |
227 g_return_if_fail(account != NULL); | |
228 g_return_if_fail(name != NULL); | |
229 | |
230 setting = g_new0(GaimAccountSetting, 1); | |
231 | |
232 setting->type = GAIM_PREF_STRING; | |
233 setting->value.string = g_strdup(value); | |
234 | |
235 g_hash_table_insert(account->settings, g_strdup(name), setting); | |
236 } | |
237 | |
238 void | |
239 gaim_account_set_bool(GaimAccount *account, const char *name, gboolean value) | |
240 { | |
241 GaimAccountSetting *setting; | |
242 | |
243 g_return_if_fail(account != NULL); | |
244 g_return_if_fail(name != NULL); | |
245 | |
246 setting = g_new0(GaimAccountSetting, 1); | |
247 | |
248 setting->type = GAIM_PREF_BOOLEAN; | |
249 setting->value.bool = value; | |
250 | |
251 g_hash_table_insert(account->settings, g_strdup(name), setting); | |
252 } | |
253 | |
254 gboolean | |
255 gaim_account_is_connected(const GaimAccount *account) | |
256 { | |
257 g_return_val_if_fail(account != NULL, FALSE); | |
258 | |
259 return (account->gc != NULL && | |
260 gaim_connection_get_state(account->gc) == GAIM_CONNECTED); | |
261 } | |
262 | |
263 const char * | |
264 gaim_account_get_username(const GaimAccount *account) | |
265 { | |
266 g_return_val_if_fail(account != NULL, NULL); | |
267 | |
268 return account->username; | |
269 } | |
270 | |
271 const char * | |
272 gaim_account_get_password(const GaimAccount *account) | |
273 { | |
274 g_return_val_if_fail(account != NULL, NULL); | |
275 | |
276 return account->password; | |
277 } | |
278 | |
279 const char * | |
280 gaim_account_get_alias(const GaimAccount *account) | |
281 { | |
282 g_return_val_if_fail(account != NULL, NULL); | |
283 | |
284 return account->alias; | |
285 } | |
286 | |
287 const char * | |
288 gaim_account_get_user_info(const GaimAccount *account) | |
289 { | |
290 g_return_val_if_fail(account != NULL, NULL); | |
291 | |
292 return account->user_info; | |
293 } | |
294 | |
295 const char * | |
296 gaim_account_get_buddy_icon(const GaimAccount *account) | |
297 { | |
298 g_return_val_if_fail(account != NULL, NULL); | |
299 | |
300 return account->buddy_icon; | |
301 } | |
302 | |
303 GaimProtocol | |
304 gaim_account_get_protocol(const GaimAccount *account) | |
305 { | |
306 g_return_val_if_fail(account != NULL, -1); | |
307 | |
308 return account->protocol; | |
309 } | |
310 | |
311 GaimConnection * | |
312 gaim_account_get_connection(const GaimAccount *account) | |
313 { | |
314 g_return_val_if_fail(account != NULL, NULL); | |
315 | |
316 return account->gc; | |
317 } | |
318 | |
319 gboolean | |
320 gaim_account_get_remember_password(const GaimAccount *account) | |
321 { | |
322 g_return_val_if_fail(account != NULL, FALSE); | |
323 | |
324 return account->remember_pass; | |
325 } | |
326 | |
327 int | |
328 gaim_account_get_int(const GaimAccount *account, const char *name) | |
329 { | |
330 GaimAccountSetting *setting; | |
331 | |
332 g_return_val_if_fail(account != NULL, -1); | |
333 g_return_val_if_fail(name != NULL, -1); | |
334 | |
335 setting = g_hash_table_lookup(account->settings, name); | |
336 | |
337 g_return_val_if_fail(setting->type == GAIM_PREF_INT, -1); | |
338 | |
339 return setting->value.integer; | |
340 } | |
341 | |
342 const char * | |
343 gaim_account_get_string(const GaimAccount *account, const char *name) | |
344 { | |
345 GaimAccountSetting *setting; | |
346 | |
347 g_return_val_if_fail(account != NULL, NULL); | |
348 g_return_val_if_fail(name != NULL, NULL); | |
349 | |
350 setting = g_hash_table_lookup(account->settings, name); | |
351 | |
352 g_return_val_if_fail(setting->type == GAIM_PREF_STRING, NULL); | |
353 | |
354 return setting->value.string; | |
355 } | |
356 | |
357 gboolean | |
358 gaim_account_get_bool(const GaimAccount *account, const char *name) | |
359 { | |
360 GaimAccountSetting *setting; | |
361 | |
362 g_return_val_if_fail(account != NULL, FALSE); | |
363 g_return_val_if_fail(name != NULL, FALSE); | |
364 | |
365 setting = g_hash_table_lookup(account->settings, name); | |
366 | |
367 g_return_val_if_fail(setting->type == GAIM_PREF_BOOLEAN, FALSE); | |
368 | |
369 return setting->value.bool; | |
370 } | |
371 | |
372 GList * | |
373 gaim_accounts_get_all(void) | |
374 { | |
375 return accounts; | |
376 } |