about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-10-27 18:12:04 +0100
committerJames Booth <boothj5@gmail.com>2012-10-27 18:12:04 +0100
commit28d388319abd2fc6aafe17ce1d4bc80c2bac5ae5 (patch)
tree52d82445fb3a783469e09b744ccc83e30dd1c9fe /src
parent852112cda81a861e7895de00233ea20b86c80a82 (diff)
downloadprofani-tty-28d388319abd2fc6aafe17ce1d4bc80c2bac5ae5.tar.gz
Added /disconnect command
Diffstat (limited to 'src')
-rw-r--r--src/command.c31
-rw-r--r--src/jabber.c7
-rw-r--r--src/jabber.h1
-rw-r--r--src/profanity.c4
4 files changed, 41 insertions, 2 deletions
diff --git a/src/command.c b/src/command.c
index d5245e0d..938142e4 100644
--- a/src/command.c
+++ b/src/command.c
@@ -65,6 +65,7 @@ static gboolean _cmd_about(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_prefs(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_who(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_connect(const char * const inp, struct cmd_help_t help);
+static gboolean _cmd_disconnect(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_msg(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_tiny(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_close(const char * const inp, struct cmd_help_t help);
@@ -124,6 +125,15 @@ static struct cmd_t main_commands[] =
           "Example: /connect myuser@gmail.com",
           NULL  } } },
 
+    { "/disconnect",
+        _cmd_disconnect,
+        { "/disconnect", "Logout of current jabber session.",
+        { "/disconnect",
+          "------------------",
+          "Disconnect from the current jabber session.",
+          "See the /connect command for connecting again.",
+          NULL  } } },
+
     { "/prefs",
         _cmd_prefs,
         { "/prefs", "Show current preferences.",
@@ -565,6 +575,27 @@ _cmd_connect(const char * const inp, struct cmd_help_t help)
 }
 
 static gboolean
+_cmd_disconnect(const char * const inp, struct cmd_help_t help)
+{
+    char *jid = strdup(jabber_get_jid());
+    gboolean wait_response = jabber_disconnect();
+
+    if (wait_response) {
+        while (jabber_get_connection_status() == JABBER_DISCONNECTING) {
+            jabber_process_events();
+        }
+        jabber_free_resources();
+    }
+
+    contact_list_clear();
+    jabber_restart();
+    cons_show("%s logged out successfully.", jid);
+    free(jid);
+
+    return TRUE;
+}
+
+static gboolean
 _cmd_quit(const char * const inp, struct cmd_help_t help)
 {
     log_info("Profanity is shutting down...");
diff --git a/src/jabber.c b/src/jabber.c
index ea7e38c4..2a199676 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -70,6 +70,13 @@ jabber_init(const int disable_tls)
     jabber_conn.tls_disabled = disable_tls;
 }
 
+void
+jabber_restart(void)
+{
+    jabber_conn.conn_status = JABBER_STARTED;
+    jabber_conn.presence = PRESENCE_OFFLINE;
+}
+
 jabber_conn_status_t
 jabber_connect(const char * const user,
     const char * const passwd)
diff --git a/src/jabber.h b/src/jabber.h
index b7e3f87c..a03566a7 100644
--- a/src/jabber.h
+++ b/src/jabber.h
@@ -51,5 +51,6 @@ void jabber_update_presence(jabber_presence_t status, const char * const msg);
 const char * jabber_get_jid(void);
 jabber_conn_status_t jabber_get_connection_status(void);
 void jabber_free_resources(void);
+void jabber_restart(void);
 
 #endif
diff --git a/src/profanity.c b/src/profanity.c
index c13e13a9..11270d3e 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -134,7 +134,7 @@ loop_out:
 void
 prof_handle_login_success(const char *jid)
 {
-    const char *msg = " logged in successfully.";
+    const char *msg = "logged in successfully.";
     cons_show("%s %s", jid, msg);
     title_bar_set_status(PRESENCE_ONLINE);
     log_info("%s %s", jid, msg);
@@ -201,7 +201,7 @@ prof_handle_roster(GSList *roster)
 }
 
 static void
-_create_config_directory()
+_create_config_directory(void)
 {
     GString *dir = g_string_new(getenv("HOME"));
     g_string_append(dir, "/.profanity");