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 }