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