Mercurial > pidgin.yaz
diff 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 |
line wrap: on
line diff
--- a/src/account.c Fri Jun 06 21:46:16 2003 +0000 +++ b/src/account.c Sat Jun 07 00:30:09 2003 +0000 @@ -136,9 +136,8 @@ account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, __delete_setting); - account->ui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, __delete_setting); + g_free, (GDestroyNotify)g_hash_table_destroy); return account; } @@ -158,6 +157,7 @@ if (account->protocol_id != NULL) g_free(account->protocol_id); g_hash_table_destroy(account->settings); + g_hash_table_destroy(account->ui_settings); g_free(account); } @@ -303,6 +303,16 @@ } void +gaim_account_set_auto_login(GaimAccount *account, const char *ui, + gboolean value) +{ + g_return_if_fail(account != NULL); + g_return_if_fail(ui != NULL); + + gaim_account_set_ui_bool(account, ui, "auto-login", value); +} + +void gaim_account_set_proxy_info(GaimAccount *account, GaimProxyInfo *info) { g_return_if_fail(account != NULL); @@ -381,11 +391,28 @@ schedule_accounts_save(); } +static GHashTable * +_get_ui_settings_table(GaimAccount *account, const char *ui) +{ + GHashTable *table; + + table = g_hash_table_lookup(account->ui_settings, ui); + + if (table == NULL) { + table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, + __delete_setting); + g_hash_table_insert(account->ui_settings, g_strdup(ui), table); + } + + return table; +} + void gaim_account_set_ui_int(GaimAccount *account, const char *ui, const char *name, int value) { GaimAccountSetting *setting; + GHashTable *table; g_return_if_fail(account != NULL); g_return_if_fail(ui != NULL); @@ -397,7 +424,9 @@ setting->ui = g_strdup(ui); setting->value.integer = value; - g_hash_table_insert(account->ui_settings, g_strdup(name), setting); + table = _get_ui_settings_table(account, ui); + + g_hash_table_insert(table, g_strdup(name), setting); schedule_accounts_save(); } @@ -407,6 +436,7 @@ const char *name, const char *value) { GaimAccountSetting *setting; + GHashTable *table; g_return_if_fail(account != NULL); g_return_if_fail(ui != NULL); @@ -418,7 +448,9 @@ setting->ui = g_strdup(ui); setting->value.string = g_strdup(value); - g_hash_table_insert(account->ui_settings, g_strdup(name), setting); + table = _get_ui_settings_table(account, ui); + + g_hash_table_insert(table, g_strdup(name), setting); schedule_accounts_save(); } @@ -428,6 +460,7 @@ const char *name, gboolean value) { GaimAccountSetting *setting; + GHashTable *table; g_return_if_fail(account != NULL); g_return_if_fail(ui != NULL); @@ -439,7 +472,9 @@ setting->ui = g_strdup(ui); setting->value.bool = value; - g_hash_table_insert(account->ui_settings, g_strdup(name), setting); + table = _get_ui_settings_table(account, ui); + + g_hash_table_insert(table, g_strdup(name), setting); schedule_accounts_save(); } @@ -525,6 +560,15 @@ return account->check_mail; } +gboolean +gaim_account_get_auto_login(const GaimAccount *account, const char *ui) +{ + g_return_val_if_fail(account != NULL, FALSE); + g_return_val_if_fail(ui != NULL, FALSE); + + return gaim_account_get_ui_bool(account, ui, "auto-login", FALSE); +} + GaimProxyInfo * gaim_account_get_proxy_info(const GaimAccount *account) { @@ -590,6 +634,72 @@ return setting->value.bool; } +int +gaim_account_get_ui_int(const GaimAccount *account, const char *ui, + const char *name, int default_value) +{ + GaimAccountSetting *setting; + GHashTable *table; + + g_return_val_if_fail(account != NULL, default_value); + g_return_val_if_fail(ui != NULL, default_value); + g_return_val_if_fail(name != NULL, default_value); + + if ((table = g_hash_table_lookup(account->ui_settings, ui)) == NULL) + return default_value; + + if ((setting = g_hash_table_lookup(table, name)) == NULL) + return default_value; + + g_return_val_if_fail(setting->type == GAIM_PREF_INT, default_value); + + return setting->value.integer; +} + +const char * +gaim_account_get_ui_string(const GaimAccount *account, const char *ui, + const char *name, const char *default_value) +{ + GaimAccountSetting *setting; + GHashTable *table; + + g_return_val_if_fail(account != NULL, default_value); + g_return_val_if_fail(ui != NULL, default_value); + g_return_val_if_fail(name != NULL, default_value); + + if ((table = g_hash_table_lookup(account->ui_settings, ui)) == NULL) + return default_value; + + if ((setting = g_hash_table_lookup(table, name)) == NULL) + return default_value; + + g_return_val_if_fail(setting->type == GAIM_PREF_STRING, default_value); + + return setting->value.string; +} + +gboolean +gaim_account_get_ui_bool(const GaimAccount *account, const char *ui, + const char *name, gboolean default_value) +{ + GaimAccountSetting *setting; + GHashTable *table; + + g_return_val_if_fail(account != NULL, default_value); + g_return_val_if_fail(ui != NULL, default_value); + g_return_val_if_fail(name != NULL, default_value); + + if ((table = g_hash_table_lookup(account->ui_settings, ui)) == NULL) + return default_value; + + if ((setting = g_hash_table_lookup(table, name)) == NULL) + return default_value; + + g_return_val_if_fail(setting->type == GAIM_PREF_BOOLEAN, default_value); + + return setting->value.bool; +} + /* XML Stuff */ static void __free_parser_data(gpointer user_data) @@ -653,8 +763,10 @@ else if (!strcmp(element_name, "port")) data->tag = TAG_PORT; else if (!strcmp(element_name, "settings")) { - if ((value = g_hash_table_lookup(atts, "ui")) != NULL) + if ((value = g_hash_table_lookup(atts, "ui")) != NULL) { + gaim_debug(GAIM_DEBUG_INFO, "account", "Found ui: %s\n", value); data->setting_ui = g_strdup(value); + } } else if (!strcmp(element_name, "setting")) { data->tag = TAG_SETTING; @@ -764,6 +876,10 @@ } else if (data->tag == TAG_SETTING) { if (data->setting_ui != NULL) { + gaim_debug(GAIM_DEBUG_INFO, "account", + "Setting account. UI = %s, setting = %s, buffer = %s\n", + data->setting_ui, data->setting_name, buffer); + if (data->setting_type == GAIM_PREF_STRING) gaim_account_set_ui_string(data->account, data->setting_ui, data->setting_name, buffer); @@ -899,7 +1015,7 @@ } static void -__write_setting(gpointer key, gpointer value, gpointer user_data) +_write_setting(gpointer key, gpointer value, gpointer user_data) { GaimAccountSetting *setting; const char *name; @@ -924,6 +1040,22 @@ } static void +_write_ui_setting_list(gpointer key, gpointer value, gpointer user_data) +{ + GHashTable *table; + const char *ui; + FILE *fp; + + table = (GHashTable *)value; + ui = (const char *)key; + fp = (FILE *)user_data; + + fprintf(fp, " <settings ui='%s'>\n", ui); + g_hash_table_foreach(table, _write_setting, fp); + fprintf(fp, " </settings>\n"); +} + +static void gaim_accounts_write(FILE *fp, GaimAccount *account) { GaimProxyInfo *proxy_info; @@ -963,9 +1095,11 @@ } fprintf(fp, " <settings>\n"); - g_hash_table_foreach(account->settings, __write_setting, fp); + g_hash_table_foreach(account->settings, _write_setting, fp); fprintf(fp, " </settings>\n"); + g_hash_table_foreach(account->ui_settings, _write_ui_setting_list, fp); + if ((proxy_info = gaim_account_get_proxy_info(account)) != NULL && (proxy_type = gaim_proxy_info_get_type(proxy_info)) != GAIM_PROXY_NONE) { @@ -1079,6 +1213,22 @@ } void +gaim_accounts_auto_login(const char *ui) +{ + GaimAccount *account; + GList *l; + + g_return_if_fail(ui != NULL); + + for (l = gaim_connections_get_all(); l != NULL; l = l->next) { + account = l->data; + + if (gaim_account_get_auto_login(account, ui)) + gaim_account_connect(account); + } +} + +void gaim_accounts_reorder(GaimAccount *account, size_t new_index) { size_t index;