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