1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Added /disconnect command

This commit is contained in:
James Booth 2012-10-27 18:12:04 +01:00
parent 852112cda8
commit 28d388319a
4 changed files with 41 additions and 2 deletions

View File

@ -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.",
@ -564,6 +574,27 @@ _cmd_connect(const char * const inp, struct cmd_help_t help)
return result;
}
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)
{

View File

@ -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)

View File

@ -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

View File

@ -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");