about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/command.c33
-rw-r--r--src/config/preferences.c4
-rw-r--r--src/config/preferences.h3
-rw-r--r--src/profanity.c4
-rw-r--r--src/ui/console.c10
-rw-r--r--src/ui/ui.h1
6 files changed, 53 insertions, 2 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 296cf38d..95f16f93 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -94,6 +94,7 @@ static int _strtoi(char *str, int *saveptr, int min, int max);
 static gboolean _cmd_about(gchar **args, struct cmd_help_t help);
 static gboolean _cmd_account(gchar **args, struct cmd_help_t help);
 static gboolean _cmd_autoaway(gchar **args, struct cmd_help_t help);
+static gboolean _cmd_autoconnect(gchar **args, struct cmd_help_t help);
 static gboolean _cmd_autoping(gchar **args, struct cmd_help_t help);
 static gboolean _cmd_away(gchar **args, struct cmd_help_t help);
 static gboolean _cmd_beep(gchar **args, struct cmd_help_t help);
@@ -579,6 +580,16 @@ static struct cmd_t command_defs[] =
           "Switch on or off the ascii logo on start up and when the /about command is called.",
           NULL } } },
 
+    { "/autoconnect",
+        _cmd_autoconnect, parse_args, 0, 1, cons_autoconnect_setting,
+        { "/autoconnect [account]", "Set account to autoconnect with.",
+        { "/autoconnect [account]",
+          "----------------------",
+          "Set the account to autoconnect with.",
+          "Will be overridden by any command line options specified.",
+          "Passing no account will clear the setting.",
+          NULL } } },
+
     { "/vercheck",
         _cmd_vercheck, parse_args, 0, 1, NULL,
         { "/vercheck [on|off]", "Check for a new release.",
@@ -1302,6 +1313,13 @@ _cmd_complete_parameters(char *input, int *size)
         return;
     }
 
+    result = autocomplete_param_with_func(input, size, "/autoconnect", accounts_find_enabled);
+    if (result != NULL) {
+        inp_replace_input(input, result, size);
+        g_free(result);
+        return;
+    }
+
     gchar *cmds[] = { "/help", "/prefs", "/log", "/disco", "/close", "/wins" };
     Autocomplete completers[] = { help_ac, prefs_ac, log_ac, disco_ac, close_ac, wins_ac };
 
@@ -1809,7 +1827,7 @@ _cmd_help(gchar **args, struct cmd_help_t help)
         _cmd_show_filtered_help("Service discovery commands", filter, ARRAY_SIZE(filter));
 
     } else if (strcmp(args[0], "settings") == 0) {
-        gchar *filter[] = { "/account", "/autoaway", "/autoping", "/beep",
+        gchar *filter[] = { "/account", "/autoaway", "/autoping", "/autoconnect", "/beep",
             "/chlog", "/flash", "/gone", "/grlog", "/history", "/intype",
             "/log", "/mouse", "/notify", "/outtype", "/prefs", "/priority",
             "/reconnect", "/roster", "/splash", "/states", "/statuses", "/theme",
@@ -3448,6 +3466,19 @@ _cmd_splash(gchar **args, struct cmd_help_t help)
 }
 
 static gboolean
+_cmd_autoconnect(gchar **args, struct cmd_help_t help)
+{
+    if (args[0] == NULL) {
+         prefs_set_string(PREF_CONNECT_ACCOUNT, NULL);
+         cons_show("Autoconnect account disabled.");
+    } else {
+        prefs_set_string(PREF_CONNECT_ACCOUNT, args[0]);
+        cons_show("Autoconnect account set to: %s.", args[0]);
+    }
+    return true;
+}
+
+static gboolean
 _cmd_chlog(gchar **args, struct cmd_help_t help)
 {
     gboolean result = _cmd_set_boolean_preference(args[0], help,
diff --git a/src/config/preferences.c b/src/config/preferences.c
index 1d417e41..18f10dee 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -309,6 +309,8 @@ _get_group(preference_t pref)
         case PREF_AUTOAWAY_MODE:
         case PREF_AUTOAWAY_MESSAGE:
             return "presence";
+        case PREF_CONNECT_ACCOUNT:
+            return "connection";
         default:
             return NULL;
     }
@@ -361,6 +363,8 @@ _get_key(preference_t pref)
             return "autoaway.mode";
         case PREF_AUTOAWAY_MESSAGE:
             return "autoaway.message";
+        case PREF_CONNECT_ACCOUNT:
+            return "account";
         default:
             return NULL;
     }
diff --git a/src/config/preferences.h b/src/config/preferences.h
index cb1f9204..5affe002 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -56,7 +56,8 @@ typedef enum {
     PREF_GRLOG,
     PREF_AUTOAWAY_CHECK,
     PREF_AUTOAWAY_MODE,
-    PREF_AUTOAWAY_MESSAGE
+    PREF_AUTOAWAY_MESSAGE,
+    PREF_CONNECT_ACCOUNT
 } preference_t;
 
 void prefs_load(void);
diff --git a/src/profanity.c b/src/profanity.c
index 38be5531..116e8b9c 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -76,6 +76,10 @@ prof_run(const int disable_tls, char *log_level, char *account_name)
       char *cmd = "/connect";
       snprintf(inp, sizeof(inp), "%s %s", cmd, account_name);
       _process_input(inp);
+    } else if (prefs_get_string(PREF_CONNECT_ACCOUNT) != NULL) {
+      char *cmd = "/connect";
+      snprintf(inp, sizeof(inp), "%s %s", cmd, prefs_get_string(PREF_CONNECT_ACCOUNT));
+      _process_input(inp);
     }
 
     while(cmd_result == TRUE) {
diff --git a/src/ui/console.c b/src/ui/console.c
index 1de7cf51..bbf0cef6 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -943,6 +943,15 @@ cons_splash_setting(void)
 }
 
 void
+cons_autoconnect_setting(void)
+{
+    if (prefs_get_string(PREF_CONNECT_ACCOUNT) != NULL)
+        cons_show("Autoconnect (/autoconnect)      : %s", prefs_get_string(PREF_CONNECT_ACCOUNT));
+    else
+        cons_show("Autoconnect (/autoconnect)      : OFF");
+}
+
+void
 cons_vercheck_setting(void)
 {
     if (prefs_get_boolean(PREF_VERCHECK))
@@ -1218,6 +1227,7 @@ cons_show_connection_prefs(void)
     cons_show("");
     cons_reconnect_setting();
     cons_autoping_setting();
+    cons_autoconnect_setting();
 
     wins_refresh_console();
     cons_alert();
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 7fff0703..1fa932b7 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -216,6 +216,7 @@ void cons_autoaway_setting(void);
 void cons_reconnect_setting(void);
 void cons_autoping_setting(void);
 void cons_priority_setting(void);
+void cons_autoconnect_setting(void);
 
 // status bar actions
 void status_bar_refresh(void);