Mercurial > pidgin.yaz
comparison src/account.c @ 5779:758fa27534b3
[gaim-migrate @ 6204]
Auto-login support is back in, and we have UI-specific settings, and some
bugs were fixed in the account editor (including a crash on gtk 2.0, I
hope!)
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sat, 07 Jun 2003 00:30:09 +0000 |
parents | 1f786fb43ee6 |
children | a9029bed0479 |
comparison
equal
deleted
inserted
replaced
5778:a6947aef5f13 | 5779:758fa27534b3 |
---|---|
134 gaim_account_set_username(account, username); | 134 gaim_account_set_username(account, username); |
135 gaim_account_set_protocol(account, protocol); | 135 gaim_account_set_protocol(account, protocol); |
136 | 136 |
137 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, |
138 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, | 139 account->ui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
141 g_free, __delete_setting); | 140 g_free, (GDestroyNotify)g_hash_table_destroy); |
142 | 141 |
143 return account; | 142 return account; |
144 } | 143 } |
145 | 144 |
146 void | 145 void |
156 if (account->password != NULL) g_free(account->password); | 155 if (account->password != NULL) g_free(account->password); |
157 if (account->user_info != NULL) g_free(account->user_info); | 156 if (account->user_info != NULL) g_free(account->user_info); |
158 if (account->protocol_id != NULL) g_free(account->protocol_id); | 157 if (account->protocol_id != NULL) g_free(account->protocol_id); |
159 | 158 |
160 g_hash_table_destroy(account->settings); | 159 g_hash_table_destroy(account->settings); |
160 g_hash_table_destroy(account->ui_settings); | |
161 | 161 |
162 g_free(account); | 162 g_free(account); |
163 } | 163 } |
164 | 164 |
165 GaimConnection * | 165 GaimConnection * |
301 | 301 |
302 schedule_accounts_save(); | 302 schedule_accounts_save(); |
303 } | 303 } |
304 | 304 |
305 void | 305 void |
306 gaim_account_set_auto_login(GaimAccount *account, const char *ui, | |
307 gboolean value) | |
308 { | |
309 g_return_if_fail(account != NULL); | |
310 g_return_if_fail(ui != NULL); | |
311 | |
312 gaim_account_set_ui_bool(account, ui, "auto-login", value); | |
313 } | |
314 | |
315 void | |
306 gaim_account_set_proxy_info(GaimAccount *account, GaimProxyInfo *info) | 316 gaim_account_set_proxy_info(GaimAccount *account, GaimProxyInfo *info) |
307 { | 317 { |
308 g_return_if_fail(account != NULL); | 318 g_return_if_fail(account != NULL); |
309 | 319 |
310 if (account->proxy_info != NULL) | 320 if (account->proxy_info != NULL) |
379 g_hash_table_insert(account->settings, g_strdup(name), setting); | 389 g_hash_table_insert(account->settings, g_strdup(name), setting); |
380 | 390 |
381 schedule_accounts_save(); | 391 schedule_accounts_save(); |
382 } | 392 } |
383 | 393 |
394 static GHashTable * | |
395 _get_ui_settings_table(GaimAccount *account, const char *ui) | |
396 { | |
397 GHashTable *table; | |
398 | |
399 table = g_hash_table_lookup(account->ui_settings, ui); | |
400 | |
401 if (table == NULL) { | |
402 table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, | |
403 __delete_setting); | |
404 g_hash_table_insert(account->ui_settings, g_strdup(ui), table); | |
405 } | |
406 | |
407 return table; | |
408 } | |
409 | |
384 void | 410 void |
385 gaim_account_set_ui_int(GaimAccount *account, const char *ui, | 411 gaim_account_set_ui_int(GaimAccount *account, const char *ui, |
386 const char *name, int value) | 412 const char *name, int value) |
387 { | 413 { |
388 GaimAccountSetting *setting; | 414 GaimAccountSetting *setting; |
415 GHashTable *table; | |
389 | 416 |
390 g_return_if_fail(account != NULL); | 417 g_return_if_fail(account != NULL); |
391 g_return_if_fail(ui != NULL); | 418 g_return_if_fail(ui != NULL); |
392 g_return_if_fail(name != NULL); | 419 g_return_if_fail(name != NULL); |
393 | 420 |
395 | 422 |
396 setting->type = GAIM_PREF_INT; | 423 setting->type = GAIM_PREF_INT; |
397 setting->ui = g_strdup(ui); | 424 setting->ui = g_strdup(ui); |
398 setting->value.integer = value; | 425 setting->value.integer = value; |
399 | 426 |
400 g_hash_table_insert(account->ui_settings, g_strdup(name), setting); | 427 table = _get_ui_settings_table(account, ui); |
428 | |
429 g_hash_table_insert(table, g_strdup(name), setting); | |
401 | 430 |
402 schedule_accounts_save(); | 431 schedule_accounts_save(); |
403 } | 432 } |
404 | 433 |
405 void | 434 void |
406 gaim_account_set_ui_string(GaimAccount *account, const char *ui, | 435 gaim_account_set_ui_string(GaimAccount *account, const char *ui, |
407 const char *name, const char *value) | 436 const char *name, const char *value) |
408 { | 437 { |
409 GaimAccountSetting *setting; | 438 GaimAccountSetting *setting; |
439 GHashTable *table; | |
410 | 440 |
411 g_return_if_fail(account != NULL); | 441 g_return_if_fail(account != NULL); |
412 g_return_if_fail(ui != NULL); | 442 g_return_if_fail(ui != NULL); |
413 g_return_if_fail(name != NULL); | 443 g_return_if_fail(name != NULL); |
414 | 444 |
416 | 446 |
417 setting->type = GAIM_PREF_STRING; | 447 setting->type = GAIM_PREF_STRING; |
418 setting->ui = g_strdup(ui); | 448 setting->ui = g_strdup(ui); |
419 setting->value.string = g_strdup(value); | 449 setting->value.string = g_strdup(value); |
420 | 450 |
421 g_hash_table_insert(account->ui_settings, g_strdup(name), setting); | 451 table = _get_ui_settings_table(account, ui); |
452 | |
453 g_hash_table_insert(table, g_strdup(name), setting); | |
422 | 454 |
423 schedule_accounts_save(); | 455 schedule_accounts_save(); |
424 } | 456 } |
425 | 457 |
426 void | 458 void |
427 gaim_account_set_ui_bool(GaimAccount *account, const char *ui, | 459 gaim_account_set_ui_bool(GaimAccount *account, const char *ui, |
428 const char *name, gboolean value) | 460 const char *name, gboolean value) |
429 { | 461 { |
430 GaimAccountSetting *setting; | 462 GaimAccountSetting *setting; |
463 GHashTable *table; | |
431 | 464 |
432 g_return_if_fail(account != NULL); | 465 g_return_if_fail(account != NULL); |
433 g_return_if_fail(ui != NULL); | 466 g_return_if_fail(ui != NULL); |
434 g_return_if_fail(name != NULL); | 467 g_return_if_fail(name != NULL); |
435 | 468 |
437 | 470 |
438 setting->type = GAIM_PREF_BOOLEAN; | 471 setting->type = GAIM_PREF_BOOLEAN; |
439 setting->ui = g_strdup(ui); | 472 setting->ui = g_strdup(ui); |
440 setting->value.bool = value; | 473 setting->value.bool = value; |
441 | 474 |
442 g_hash_table_insert(account->ui_settings, g_strdup(name), setting); | 475 table = _get_ui_settings_table(account, ui); |
476 | |
477 g_hash_table_insert(table, g_strdup(name), setting); | |
443 | 478 |
444 schedule_accounts_save(); | 479 schedule_accounts_save(); |
445 } | 480 } |
446 | 481 |
447 gboolean | 482 gboolean |
521 gaim_account_get_check_mail(const GaimAccount *account) | 556 gaim_account_get_check_mail(const GaimAccount *account) |
522 { | 557 { |
523 g_return_val_if_fail(account != NULL, FALSE); | 558 g_return_val_if_fail(account != NULL, FALSE); |
524 | 559 |
525 return account->check_mail; | 560 return account->check_mail; |
561 } | |
562 | |
563 gboolean | |
564 gaim_account_get_auto_login(const GaimAccount *account, const char *ui) | |
565 { | |
566 g_return_val_if_fail(account != NULL, FALSE); | |
567 g_return_val_if_fail(ui != NULL, FALSE); | |
568 | |
569 return gaim_account_get_ui_bool(account, ui, "auto-login", FALSE); | |
526 } | 570 } |
527 | 571 |
528 GaimProxyInfo * | 572 GaimProxyInfo * |
529 gaim_account_get_proxy_info(const GaimAccount *account) | 573 gaim_account_get_proxy_info(const GaimAccount *account) |
530 { | 574 { |
581 g_return_val_if_fail(name != NULL, default_value); | 625 g_return_val_if_fail(name != NULL, default_value); |
582 | 626 |
583 setting = g_hash_table_lookup(account->settings, name); | 627 setting = g_hash_table_lookup(account->settings, name); |
584 | 628 |
585 if (setting == NULL) | 629 if (setting == NULL) |
630 return default_value; | |
631 | |
632 g_return_val_if_fail(setting->type == GAIM_PREF_BOOLEAN, default_value); | |
633 | |
634 return setting->value.bool; | |
635 } | |
636 | |
637 int | |
638 gaim_account_get_ui_int(const GaimAccount *account, const char *ui, | |
639 const char *name, int default_value) | |
640 { | |
641 GaimAccountSetting *setting; | |
642 GHashTable *table; | |
643 | |
644 g_return_val_if_fail(account != NULL, default_value); | |
645 g_return_val_if_fail(ui != NULL, default_value); | |
646 g_return_val_if_fail(name != NULL, default_value); | |
647 | |
648 if ((table = g_hash_table_lookup(account->ui_settings, ui)) == NULL) | |
649 return default_value; | |
650 | |
651 if ((setting = g_hash_table_lookup(table, name)) == NULL) | |
652 return default_value; | |
653 | |
654 g_return_val_if_fail(setting->type == GAIM_PREF_INT, default_value); | |
655 | |
656 return setting->value.integer; | |
657 } | |
658 | |
659 const char * | |
660 gaim_account_get_ui_string(const GaimAccount *account, const char *ui, | |
661 const char *name, const char *default_value) | |
662 { | |
663 GaimAccountSetting *setting; | |
664 GHashTable *table; | |
665 | |
666 g_return_val_if_fail(account != NULL, default_value); | |
667 g_return_val_if_fail(ui != NULL, default_value); | |
668 g_return_val_if_fail(name != NULL, default_value); | |
669 | |
670 if ((table = g_hash_table_lookup(account->ui_settings, ui)) == NULL) | |
671 return default_value; | |
672 | |
673 if ((setting = g_hash_table_lookup(table, name)) == NULL) | |
674 return default_value; | |
675 | |
676 g_return_val_if_fail(setting->type == GAIM_PREF_STRING, default_value); | |
677 | |
678 return setting->value.string; | |
679 } | |
680 | |
681 gboolean | |
682 gaim_account_get_ui_bool(const GaimAccount *account, const char *ui, | |
683 const char *name, gboolean default_value) | |
684 { | |
685 GaimAccountSetting *setting; | |
686 GHashTable *table; | |
687 | |
688 g_return_val_if_fail(account != NULL, default_value); | |
689 g_return_val_if_fail(ui != NULL, default_value); | |
690 g_return_val_if_fail(name != NULL, default_value); | |
691 | |
692 if ((table = g_hash_table_lookup(account->ui_settings, ui)) == NULL) | |
693 return default_value; | |
694 | |
695 if ((setting = g_hash_table_lookup(table, name)) == NULL) | |
586 return default_value; | 696 return default_value; |
587 | 697 |
588 g_return_val_if_fail(setting->type == GAIM_PREF_BOOLEAN, default_value); | 698 g_return_val_if_fail(setting->type == GAIM_PREF_BOOLEAN, default_value); |
589 | 699 |
590 return setting->value.bool; | 700 return setting->value.bool; |
651 else if (!strcmp(element_name, "host")) | 761 else if (!strcmp(element_name, "host")) |
652 data->tag = TAG_HOST; | 762 data->tag = TAG_HOST; |
653 else if (!strcmp(element_name, "port")) | 763 else if (!strcmp(element_name, "port")) |
654 data->tag = TAG_PORT; | 764 data->tag = TAG_PORT; |
655 else if (!strcmp(element_name, "settings")) { | 765 else if (!strcmp(element_name, "settings")) { |
656 if ((value = g_hash_table_lookup(atts, "ui")) != NULL) | 766 if ((value = g_hash_table_lookup(atts, "ui")) != NULL) { |
767 gaim_debug(GAIM_DEBUG_INFO, "account", "Found ui: %s\n", value); | |
657 data->setting_ui = g_strdup(value); | 768 data->setting_ui = g_strdup(value); |
769 } | |
658 } | 770 } |
659 else if (!strcmp(element_name, "setting")) { | 771 else if (!strcmp(element_name, "setting")) { |
660 data->tag = TAG_SETTING; | 772 data->tag = TAG_SETTING; |
661 | 773 |
662 if ((value = g_hash_table_lookup(atts, "name")) != NULL) | 774 if ((value = g_hash_table_lookup(atts, "name")) != NULL) |
762 gaim_proxy_info_set_port(data->proxy_info, atoi(buffer)); | 874 gaim_proxy_info_set_port(data->proxy_info, atoi(buffer)); |
763 } | 875 } |
764 } | 876 } |
765 else if (data->tag == TAG_SETTING) { | 877 else if (data->tag == TAG_SETTING) { |
766 if (data->setting_ui != NULL) { | 878 if (data->setting_ui != NULL) { |
879 gaim_debug(GAIM_DEBUG_INFO, "account", | |
880 "Setting account. UI = %s, setting = %s, buffer = %s\n", | |
881 data->setting_ui, data->setting_name, buffer); | |
882 | |
767 if (data->setting_type == GAIM_PREF_STRING) | 883 if (data->setting_type == GAIM_PREF_STRING) |
768 gaim_account_set_ui_string(data->account, data->setting_ui, | 884 gaim_account_set_ui_string(data->account, data->setting_ui, |
769 data->setting_name, buffer); | 885 data->setting_name, buffer); |
770 else if (data->setting_type == GAIM_PREF_INT) | 886 else if (data->setting_type == GAIM_PREF_INT) |
771 gaim_account_set_ui_int(data->account, data->setting_ui, | 887 gaim_account_set_ui_int(data->account, data->setting_ui, |
897 | 1013 |
898 return TRUE; | 1014 return TRUE; |
899 } | 1015 } |
900 | 1016 |
901 static void | 1017 static void |
902 __write_setting(gpointer key, gpointer value, gpointer user_data) | 1018 _write_setting(gpointer key, gpointer value, gpointer user_data) |
903 { | 1019 { |
904 GaimAccountSetting *setting; | 1020 GaimAccountSetting *setting; |
905 const char *name; | 1021 const char *name; |
906 FILE *fp; | 1022 FILE *fp; |
907 | 1023 |
919 } | 1035 } |
920 else if (setting->type == GAIM_PREF_BOOLEAN) { | 1036 else if (setting->type == GAIM_PREF_BOOLEAN) { |
921 fprintf(fp, " <setting name='%s' type='bool'>%d</setting>\n", | 1037 fprintf(fp, " <setting name='%s' type='bool'>%d</setting>\n", |
922 name, setting->value.bool); | 1038 name, setting->value.bool); |
923 } | 1039 } |
1040 } | |
1041 | |
1042 static void | |
1043 _write_ui_setting_list(gpointer key, gpointer value, gpointer user_data) | |
1044 { | |
1045 GHashTable *table; | |
1046 const char *ui; | |
1047 FILE *fp; | |
1048 | |
1049 table = (GHashTable *)value; | |
1050 ui = (const char *)key; | |
1051 fp = (FILE *)user_data; | |
1052 | |
1053 fprintf(fp, " <settings ui='%s'>\n", ui); | |
1054 g_hash_table_foreach(table, _write_setting, fp); | |
1055 fprintf(fp, " </settings>\n"); | |
924 } | 1056 } |
925 | 1057 |
926 static void | 1058 static void |
927 gaim_accounts_write(FILE *fp, GaimAccount *account) | 1059 gaim_accounts_write(FILE *fp, GaimAccount *account) |
928 { | 1060 { |
961 fprintf(fp, " <buddyicon>%s</buddyicon>\n", esc); | 1093 fprintf(fp, " <buddyicon>%s</buddyicon>\n", esc); |
962 g_free(esc); | 1094 g_free(esc); |
963 } | 1095 } |
964 | 1096 |
965 fprintf(fp, " <settings>\n"); | 1097 fprintf(fp, " <settings>\n"); |
966 g_hash_table_foreach(account->settings, __write_setting, fp); | 1098 g_hash_table_foreach(account->settings, _write_setting, fp); |
967 fprintf(fp, " </settings>\n"); | 1099 fprintf(fp, " </settings>\n"); |
1100 | |
1101 g_hash_table_foreach(account->ui_settings, _write_ui_setting_list, fp); | |
968 | 1102 |
969 if ((proxy_info = gaim_account_get_proxy_info(account)) != NULL && | 1103 if ((proxy_info = gaim_account_get_proxy_info(account)) != NULL && |
970 (proxy_type = gaim_proxy_info_get_type(proxy_info)) != GAIM_PROXY_NONE) | 1104 (proxy_type = gaim_proxy_info_get_type(proxy_info)) != GAIM_PROXY_NONE) |
971 { | 1105 { |
972 const char *value; | 1106 const char *value; |
1077 | 1211 |
1078 schedule_accounts_save(); | 1212 schedule_accounts_save(); |
1079 } | 1213 } |
1080 | 1214 |
1081 void | 1215 void |
1216 gaim_accounts_auto_login(const char *ui) | |
1217 { | |
1218 GaimAccount *account; | |
1219 GList *l; | |
1220 | |
1221 g_return_if_fail(ui != NULL); | |
1222 | |
1223 for (l = gaim_connections_get_all(); l != NULL; l = l->next) { | |
1224 account = l->data; | |
1225 | |
1226 if (gaim_account_get_auto_login(account, ui)) | |
1227 gaim_account_connect(account); | |
1228 } | |
1229 } | |
1230 | |
1231 void | |
1082 gaim_accounts_reorder(GaimAccount *account, size_t new_index) | 1232 gaim_accounts_reorder(GaimAccount *account, size_t new_index) |
1083 { | 1233 { |
1084 size_t index; | 1234 size_t index; |
1085 GList *l; | 1235 GList *l; |
1086 | 1236 |