about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/accounts.c47
-rw-r--r--src/accounts.h6
-rw-r--r--src/command.c15
-rw-r--r--src/jabber.c5
4 files changed, 53 insertions, 20 deletions
diff --git a/src/accounts.c b/src/accounts.c
index 7729cfb4..bf5ef11b 100644
--- a/src/accounts.c
+++ b/src/accounts.c
@@ -33,7 +33,8 @@
 static gchar *accounts_loc;
 static GKeyFile *accounts;
 
-static PAutocomplete login_ac;
+static PAutocomplete all_ac;
+static PAutocomplete enabled_ac;
 
 static void _save_accounts(void);
 
@@ -41,7 +42,8 @@ void
 accounts_load(void)
 {
     log_info("Loading accounts");
-    login_ac = p_autocomplete_new();
+    all_ac = p_autocomplete_new();
+    enabled_ac = p_autocomplete_new();
     accounts_loc = files_get_accounts_file();
 
     accounts = g_key_file_new();
@@ -55,7 +57,10 @@ accounts_load(void)
 
     gsize i;
     for (i = 0; i < njids; i++) {
-        p_autocomplete_add(login_ac, strdup(jids[i]));
+        if (g_key_file_get_boolean(accounts, jids[i], "enabled", NULL)) {
+            p_autocomplete_add(enabled_ac, strdup(jids[i]));
+        }
+        p_autocomplete_add(all_ac, strdup(jids[i]));
     }
 
     for (i = 0; i < njids; i++) {
@@ -67,20 +72,33 @@ accounts_load(void)
 void
 accounts_close(void)
 {
-    p_autocomplete_clear(login_ac);
+    p_autocomplete_clear(all_ac);
+    p_autocomplete_clear(enabled_ac);
     g_key_file_free(accounts);
 }
 
 char *
-accounts_find_login(char *prefix)
+accounts_find_enabled(char *prefix)
+{
+    return p_autocomplete_complete(enabled_ac, prefix);
+}
+
+char *
+accounts_find_all(char *prefix)
 {
-    return p_autocomplete_complete(login_ac, prefix);
+    return p_autocomplete_complete(all_ac, prefix);
 }
 
 void
-accounts_reset_login_search(void)
+accounts_reset_all_search(void)
 {
-    p_autocomplete_reset(login_ac);
+    p_autocomplete_reset(all_ac);
+}
+
+void
+accounts_reset_enabled_search(void)
+{
+    p_autocomplete_reset(enabled_ac);
 }
 
 void
@@ -95,7 +113,8 @@ accounts_add_login(const char *jid, const char *altdomain)
         }
 
         _save_accounts();
-        p_autocomplete_add(login_ac, strdup(jid));
+        p_autocomplete_add(all_ac, strdup(jid));
+        p_autocomplete_add(enabled_ac, strdup(jid));
 
     // already exists, update old style accounts
     } else {
@@ -165,6 +184,7 @@ accounts_enable(const char * const name)
     if (g_key_file_has_group(accounts, name)) {
         g_key_file_set_boolean(accounts, name, "enabled", TRUE);
         _save_accounts();
+        p_autocomplete_add(enabled_ac, strdup(name));
         return TRUE;
     } else {
         return FALSE;
@@ -177,6 +197,7 @@ accounts_disable(const char * const name)
     if (g_key_file_has_group(accounts, name)) {
         g_key_file_set_boolean(accounts, name, "enabled", FALSE);
         _save_accounts();
+        p_autocomplete_remove(enabled_ac, strdup(name));
         return TRUE;
     } else {
         return FALSE;
@@ -212,8 +233,12 @@ accounts_rename(const char * const account_name, const char * const new_name)
     g_key_file_remove_group(accounts, account_name, NULL);
     _save_accounts();
 
-    p_autocomplete_remove(login_ac, strdup(account_name));
-    p_autocomplete_add(login_ac, strdup(new_name));
+    p_autocomplete_remove(all_ac, strdup(account_name));
+    p_autocomplete_add(all_ac, strdup(new_name));
+    if (g_key_file_get_boolean(accounts, new_name, "enabled", NULL)) {
+        p_autocomplete_remove(enabled_ac, strdup(account_name));
+        p_autocomplete_add(enabled_ac, strdup(new_name));
+    }
 
     return TRUE;
 }
diff --git a/src/accounts.h b/src/accounts.h
index 042eb058..b4abf100 100644
--- a/src/accounts.h
+++ b/src/accounts.h
@@ -33,8 +33,10 @@ typedef struct prof_account_t {
 void accounts_load(void);
 void accounts_close(void);
 
-char * accounts_find_login(char *prefix);
-void accounts_reset_login_search(void);
+char * accounts_find_all(char *prefix);
+char * accounts_find_enabled(char *prefix);
+void accounts_reset_all_search(void);
+void accounts_reset_enabled_search(void);
 void accounts_add_login(const char *jid, const char *altdomain);
 gchar** accounts_get_list(void);
 ProfAccount* accounts_get_account(const char * const name);
diff --git a/src/command.c b/src/command.c
index 6927bfa5..a116a88e 100644
--- a/src/command.c
+++ b/src/command.c
@@ -749,7 +749,8 @@ void
 cmd_reset_autocomplete()
 {
     contact_list_reset_search_attempts();
-    accounts_reset_login_search();
+    accounts_reset_all_search();
+    accounts_reset_enabled_search();
     prefs_reset_boolean_choice();
     p_autocomplete_reset(help_ac);
     p_autocomplete_reset(notify_ac);
@@ -896,7 +897,7 @@ _cmd_complete_parameters(char *input, int *size)
     _parameter_autocomplete(input, size, "/info",
         contact_list_find_contact);
     _parameter_autocomplete(input, size, "/connect",
-        accounts_find_login);
+        accounts_find_enabled);
     _parameter_autocomplete_with_ac(input, size, "/sub", sub_ac);
     _parameter_autocomplete_with_ac(input, size, "/help", help_ac);
     _parameter_autocomplete_with_ac(input, size, "/who", who_ac);
@@ -2220,15 +2221,15 @@ static void
 _account_autocomplete(char *input, int *size)
 {
     if ((strncmp(input, "/account set ", 13) == 0) && (*size > 13)) {
-        _parameter_autocomplete(input, size, "/account set", accounts_find_login);
+        _parameter_autocomplete(input, size, "/account set", accounts_find_all);
     } else if ((strncmp(input, "/account show ", 14) == 0) && (*size > 14)) {
-        _parameter_autocomplete(input, size, "/account show", accounts_find_login);
+        _parameter_autocomplete(input, size, "/account show", accounts_find_all);
     } else if ((strncmp(input, "/account enable ", 16) == 0) && (*size > 16)) {
-        _parameter_autocomplete(input, size, "/account enable", accounts_find_login);
+        _parameter_autocomplete(input, size, "/account enable", accounts_find_all);
     } else if ((strncmp(input, "/account disable ", 17) == 0) && (*size > 17)) {
-        _parameter_autocomplete(input, size, "/account disable", accounts_find_login);
+        _parameter_autocomplete(input, size, "/account disable", accounts_find_all);
     } else if ((strncmp(input, "/account rename ", 16) == 0) && (*size > 16)) {
-        _parameter_autocomplete(input, size, "/account rename", accounts_find_login);
+        _parameter_autocomplete(input, size, "/account rename", accounts_find_all);
     } else if ((strncmp(input, "/account ", 9) == 0) && (*size > 9)) {
         _parameter_autocomplete_with_ac(input, size, "/account", account_ac);
     }
diff --git a/src/jabber.c b/src/jabber.c
index cdb29d15..f9ce58fa 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -147,6 +147,11 @@ jabber_conn_status_t
 jabber_connect(const char * const user,
     const char * const passwd, const char * const altdomain)
 {
+    if (saved_account != NULL) {
+        free(saved_account);
+        saved_account = NULL)
+    }
+
     if (saved_user == NULL) {
         saved_user = strdup(user);
     }