Mercurial > pidgin
comparison src/account.c @ 5777:1f786fb43ee6
[gaim-migrate @ 6202]
Added UI-specific account settings.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Fri, 06 Jun 2003 21:44:47 +0000 |
parents | e0a1a2110432 |
children | 758fa27534b3 |
comparison
equal
deleted
inserted
replaced
5776:147f4c25af15 | 5777:1f786fb43ee6 |
---|---|
55 | 55 |
56 typedef struct | 56 typedef struct |
57 { | 57 { |
58 GaimPrefType type; | 58 GaimPrefType type; |
59 | 59 |
60 char *ui; | |
61 | |
60 union | 62 union |
61 { | 63 { |
62 int integer; | 64 int integer; |
63 char *string; | 65 char *string; |
64 gboolean bool; | 66 gboolean bool; |
77 char *protocol_id; | 79 char *protocol_id; |
78 | 80 |
79 GString *buffer; | 81 GString *buffer; |
80 | 82 |
81 GaimPrefType setting_type; | 83 GaimPrefType setting_type; |
84 char *setting_ui; | |
82 char *setting_name; | 85 char *setting_name; |
83 | 86 |
84 gboolean in_proxy; | 87 gboolean in_proxy; |
85 | 88 |
86 } AccountParserData; | 89 } AccountParserData; |
92 static void | 95 static void |
93 __delete_setting(void *data) | 96 __delete_setting(void *data) |
94 { | 97 { |
95 GaimAccountSetting *setting = (GaimAccountSetting *)data; | 98 GaimAccountSetting *setting = (GaimAccountSetting *)data; |
96 | 99 |
100 if (setting->ui != NULL) | |
101 g_free(setting->ui); | |
102 | |
97 if (setting->type == GAIM_PREF_STRING) | 103 if (setting->type == GAIM_PREF_STRING) |
98 g_free(setting->value.string); | 104 g_free(setting->value.string); |
99 | 105 |
100 g_free(setting); | 106 g_free(setting); |
101 } | 107 } |
128 gaim_account_set_username(account, username); | 134 gaim_account_set_username(account, username); |
129 gaim_account_set_protocol(account, protocol); | 135 gaim_account_set_protocol(account, protocol); |
130 | 136 |
131 account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, | 137 account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
132 g_free, __delete_setting); | 138 g_free, __delete_setting); |
139 | |
140 account->ui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, | |
141 g_free, __delete_setting); | |
133 | 142 |
134 return account; | 143 return account; |
135 } | 144 } |
136 | 145 |
137 void | 146 void |
193 } | 202 } |
194 | 203 |
195 void | 204 void |
196 gaim_account_set_password(GaimAccount *account, const char *password) | 205 gaim_account_set_password(GaimAccount *account, const char *password) |
197 { | 206 { |
198 g_return_if_fail(account != NULL); | 207 g_return_if_fail(account != NULL); |
199 | 208 |
200 if (account->password != NULL) | 209 if (account->password != NULL) |
201 g_free(account->password); | 210 g_free(account->password); |
202 | 211 |
203 account->password = (password == NULL ? NULL : g_strdup(password)); | 212 account->password = (password == NULL ? NULL : g_strdup(password)); |
219 } | 228 } |
220 | 229 |
221 void | 230 void |
222 gaim_account_set_user_info(GaimAccount *account, const char *user_info) | 231 gaim_account_set_user_info(GaimAccount *account, const char *user_info) |
223 { | 232 { |
224 g_return_if_fail(account != NULL); | 233 g_return_if_fail(account != NULL); |
225 | 234 |
226 if (account->user_info != NULL) | 235 if (account->user_info != NULL) |
227 g_free(account->user_info); | 236 g_free(account->user_info); |
228 | 237 |
229 account->user_info = (user_info == NULL ? NULL : g_strdup(user_info)); | 238 account->user_info = (user_info == NULL ? NULL : g_strdup(user_info)); |
366 | 375 |
367 setting->type = GAIM_PREF_BOOLEAN; | 376 setting->type = GAIM_PREF_BOOLEAN; |
368 setting->value.bool = value; | 377 setting->value.bool = value; |
369 | 378 |
370 g_hash_table_insert(account->settings, g_strdup(name), setting); | 379 g_hash_table_insert(account->settings, g_strdup(name), setting); |
380 | |
381 schedule_accounts_save(); | |
382 } | |
383 | |
384 void | |
385 gaim_account_set_ui_int(GaimAccount *account, const char *ui, | |
386 const char *name, int value) | |
387 { | |
388 GaimAccountSetting *setting; | |
389 | |
390 g_return_if_fail(account != NULL); | |
391 g_return_if_fail(ui != NULL); | |
392 g_return_if_fail(name != NULL); | |
393 | |
394 setting = g_new0(GaimAccountSetting, 1); | |
395 | |
396 setting->type = GAIM_PREF_INT; | |
397 setting->ui = g_strdup(ui); | |
398 setting->value.integer = value; | |
399 | |
400 g_hash_table_insert(account->ui_settings, g_strdup(name), setting); | |
401 | |
402 schedule_accounts_save(); | |
403 } | |
404 | |
405 void | |
406 gaim_account_set_ui_string(GaimAccount *account, const char *ui, | |
407 const char *name, const char *value) | |
408 { | |
409 GaimAccountSetting *setting; | |
410 | |
411 g_return_if_fail(account != NULL); | |
412 g_return_if_fail(ui != NULL); | |
413 g_return_if_fail(name != NULL); | |
414 | |
415 setting = g_new0(GaimAccountSetting, 1); | |
416 | |
417 setting->type = GAIM_PREF_STRING; | |
418 setting->ui = g_strdup(ui); | |
419 setting->value.string = g_strdup(value); | |
420 | |
421 g_hash_table_insert(account->ui_settings, g_strdup(name), setting); | |
422 | |
423 schedule_accounts_save(); | |
424 } | |
425 | |
426 void | |
427 gaim_account_set_ui_bool(GaimAccount *account, const char *ui, | |
428 const char *name, gboolean value) | |
429 { | |
430 GaimAccountSetting *setting; | |
431 | |
432 g_return_if_fail(account != NULL); | |
433 g_return_if_fail(ui != NULL); | |
434 g_return_if_fail(name != NULL); | |
435 | |
436 setting = g_new0(GaimAccountSetting, 1); | |
437 | |
438 setting->type = GAIM_PREF_BOOLEAN; | |
439 setting->ui = g_strdup(ui); | |
440 setting->value.bool = value; | |
441 | |
442 g_hash_table_insert(account->ui_settings, g_strdup(name), setting); | |
371 | 443 |
372 schedule_accounts_save(); | 444 schedule_accounts_save(); |
373 } | 445 } |
374 | 446 |
375 gboolean | 447 gboolean |
538 const gchar *element_name, | 610 const gchar *element_name, |
539 const gchar **attribute_names, | 611 const gchar **attribute_names, |
540 const gchar **attribute_values, | 612 const gchar **attribute_values, |
541 gpointer user_data, GError **error) | 613 gpointer user_data, GError **error) |
542 { | 614 { |
615 const char *value; | |
543 AccountParserData *data = user_data; | 616 AccountParserData *data = user_data; |
617 GHashTable *atts; | |
544 int i; | 618 int i; |
619 | |
620 atts = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); | |
621 | |
622 for (i = 0; attribute_names[i] != NULL; i++) { | |
623 g_hash_table_insert(atts, g_strdup(attribute_names[i]), | |
624 g_strdup(attribute_values[i])); | |
625 } | |
545 | 626 |
546 if (data->buffer != NULL) { | 627 if (data->buffer != NULL) { |
547 g_string_free(data->buffer, TRUE); | 628 g_string_free(data->buffer, TRUE); |
548 data->buffer = NULL; | 629 data->buffer = NULL; |
549 } | 630 } |
569 data->tag = TAG_TYPE; | 650 data->tag = TAG_TYPE; |
570 else if (!strcmp(element_name, "host")) | 651 else if (!strcmp(element_name, "host")) |
571 data->tag = TAG_HOST; | 652 data->tag = TAG_HOST; |
572 else if (!strcmp(element_name, "port")) | 653 else if (!strcmp(element_name, "port")) |
573 data->tag = TAG_PORT; | 654 data->tag = TAG_PORT; |
655 else if (!strcmp(element_name, "settings")) { | |
656 if ((value = g_hash_table_lookup(atts, "ui")) != NULL) | |
657 data->setting_ui = g_strdup(value); | |
658 } | |
574 else if (!strcmp(element_name, "setting")) { | 659 else if (!strcmp(element_name, "setting")) { |
575 data->tag = TAG_SETTING; | 660 data->tag = TAG_SETTING; |
576 | 661 |
577 for (i = 0; attribute_names[i] != NULL; i++) { | 662 if ((value = g_hash_table_lookup(atts, "name")) != NULL) |
578 | 663 data->setting_name = g_strdup(value); |
579 if (!strcmp(attribute_names[i], "name")) | 664 |
580 data->setting_name = g_strdup(attribute_values[i]); | 665 if ((value = g_hash_table_lookup(atts, "type")) != NULL) { |
581 else if (!strcmp(attribute_names[i], "type")) { | 666 if (!strcmp(value, "string")) |
582 | 667 data->setting_type = GAIM_PREF_STRING; |
583 if (!strcmp(attribute_values[i], "string")) | 668 else if (!strcmp(value, "int")) |
584 data->setting_type = GAIM_PREF_STRING; | 669 data->setting_type = GAIM_PREF_INT; |
585 else if (!strcmp(attribute_values[i], "int")) | 670 else if (!strcmp(value, "bool")) |
586 data->setting_type = GAIM_PREF_INT; | 671 data->setting_type = GAIM_PREF_BOOLEAN; |
587 else if (!strcmp(attribute_values[i], "bool")) | |
588 data->setting_type = GAIM_PREF_BOOLEAN; | |
589 } | |
590 } | 672 } |
591 } | 673 } |
592 } | 674 } |
593 | 675 |
594 static void | 676 static void |
679 if (data->in_proxy) { | 761 if (data->in_proxy) { |
680 gaim_proxy_info_set_port(data->proxy_info, atoi(buffer)); | 762 gaim_proxy_info_set_port(data->proxy_info, atoi(buffer)); |
681 } | 763 } |
682 } | 764 } |
683 else if (data->tag == TAG_SETTING) { | 765 else if (data->tag == TAG_SETTING) { |
684 if (data->setting_type == GAIM_PREF_STRING) | 766 if (data->setting_ui != NULL) { |
685 gaim_account_set_string(data->account, data->setting_name, | 767 if (data->setting_type == GAIM_PREF_STRING) |
686 buffer); | 768 gaim_account_set_ui_string(data->account, data->setting_ui, |
687 else if (data->setting_type == GAIM_PREF_INT) | 769 data->setting_name, buffer); |
688 gaim_account_set_int(data->account, data->setting_name, | 770 else if (data->setting_type == GAIM_PREF_INT) |
689 atoi(buffer)); | 771 gaim_account_set_ui_int(data->account, data->setting_ui, |
690 else if (data->setting_type == GAIM_PREF_BOOLEAN) | 772 data->setting_name, atoi(buffer)); |
691 gaim_account_set_bool(data->account, data->setting_name, | 773 else if (data->setting_type == GAIM_PREF_BOOLEAN) |
692 (*buffer == '0' ? FALSE : TRUE)); | 774 gaim_account_set_ui_bool(data->account, data->setting_ui, |
775 data->setting_name, | |
776 (*buffer == '0' ? FALSE : TRUE)); | |
777 } | |
778 else { | |
779 if (data->setting_type == GAIM_PREF_STRING) | |
780 gaim_account_set_string(data->account, data->setting_name, | |
781 buffer); | |
782 else if (data->setting_type == GAIM_PREF_INT) | |
783 gaim_account_set_int(data->account, data->setting_name, | |
784 atoi(buffer)); | |
785 else if (data->setting_type == GAIM_PREF_BOOLEAN) | |
786 gaim_account_set_bool(data->account, data->setting_name, | |
787 (*buffer == '0' ? FALSE : TRUE)); | |
788 } | |
693 | 789 |
694 g_free(data->setting_name); | 790 g_free(data->setting_name); |
695 data->setting_name = NULL; | 791 data->setting_name = NULL; |
696 } | 792 } |
697 else if (!strcmp(element_name, "proxy")) { | 793 else if (!strcmp(element_name, "proxy")) { |
701 gaim_proxy_info_destroy(data->proxy_info); | 797 gaim_proxy_info_destroy(data->proxy_info); |
702 data->proxy_info = NULL; | 798 data->proxy_info = NULL; |
703 } | 799 } |
704 else { | 800 else { |
705 gaim_account_set_proxy_info(data->account, data->proxy_info); | 801 gaim_account_set_proxy_info(data->account, data->proxy_info); |
802 } | |
803 } | |
804 else if (!strcmp(element_name, "settings")) { | |
805 if (data->setting_ui != NULL) { | |
806 g_free(data->setting_ui); | |
807 data->setting_ui = NULL; | |
706 } | 808 } |
707 } | 809 } |
708 | 810 |
709 data->tag = TAG_NONE; | 811 data->tag = TAG_NONE; |
710 | 812 |