Merge branch 'master' into otr

This commit is contained in:
James Booth
2013-08-30 00:58:06 +01:00
14 changed files with 1702 additions and 931 deletions

View File

@@ -144,6 +144,7 @@ static gboolean _cmd_tiny(gchar **args, struct cmd_help_t help);
static gboolean _cmd_titlebar(gchar **args, struct cmd_help_t help);
static gboolean _cmd_vercheck(gchar **args, struct cmd_help_t help);
static gboolean _cmd_who(gchar **args, struct cmd_help_t help);
static gboolean _cmd_win(gchar **args, struct cmd_help_t help);
static gboolean _cmd_wins(gchar **args, struct cmd_help_t help);
static gboolean _cmd_xa(gchar **args, struct cmd_help_t help);
@@ -410,6 +411,14 @@ static struct cmd_t command_defs[] =
"Example : /nick bob",
NULL } } },
{ "/win",
_cmd_win, parse_args, 1, 1, NULL,
{ "/win num", "View a window.",
{ "/win num",
"------------------",
"Show the contents of a specific window in the main window area.",
NULL } } },
{ "/wins",
_cmd_wins, parse_args, 0, 1, NULL,
{ "/wins [tidy|prune]", "List or tidy active windows.",
@@ -1196,8 +1205,6 @@ cmd_execute_default(const char * const inp)
break;
}
free(recipient);
return TRUE;
}
@@ -1226,7 +1233,6 @@ _cmd_complete_parameters(char *input, int *size)
if (ui_current_win_type() == WIN_MUC) {
char *recipient = ui_current_recipient();
Autocomplete nick_ac = muc_get_roster_ac(recipient);
free(recipient);
if (nick_ac != NULL) {
gchar *nick_choices[] = { "/msg", "/info", "/caps", "/status", "/software" } ;
@@ -1559,7 +1565,7 @@ _cmd_sub(gchar **args, struct cmd_help_t help)
return TRUE;
}
char *subcmd, *jid, *bare_jid;
char *subcmd, *jid;
subcmd = args[0];
jid = args[1];
@@ -1583,49 +1589,47 @@ _cmd_sub(gchar **args, struct cmd_help_t help)
return TRUE;
}
if (jid != NULL) {
jid = strdup(jid);
} else {
if (jid == NULL) {
jid = ui_current_recipient();
}
bare_jid = strtok(jid, "/");
Jid *jidp = jid_create(jid);
if (strcmp(subcmd, "allow") == 0) {
presence_subscription(bare_jid, PRESENCE_SUBSCRIBED);
cons_show("Accepted subscription for %s", bare_jid);
log_info("Accepted subscription for %s", bare_jid);
presence_subscription(jidp->barejid, PRESENCE_SUBSCRIBED);
cons_show("Accepted subscription for %s", jidp->barejid);
log_info("Accepted subscription for %s", jidp->barejid);
} else if (strcmp(subcmd, "deny") == 0) {
presence_subscription(bare_jid, PRESENCE_UNSUBSCRIBED);
cons_show("Deleted/denied subscription for %s", bare_jid);
log_info("Deleted/denied subscription for %s", bare_jid);
presence_subscription(jidp->barejid, PRESENCE_UNSUBSCRIBED);
cons_show("Deleted/denied subscription for %s", jidp->barejid);
log_info("Deleted/denied subscription for %s", jidp->barejid);
} else if (strcmp(subcmd, "request") == 0) {
presence_subscription(bare_jid, PRESENCE_SUBSCRIBE);
cons_show("Sent subscription request to %s.", bare_jid);
log_info("Sent subscription request to %s.", bare_jid);
presence_subscription(jidp->barejid, PRESENCE_SUBSCRIBE);
cons_show("Sent subscription request to %s.", jidp->barejid);
log_info("Sent subscription request to %s.", jidp->barejid);
} else if (strcmp(subcmd, "show") == 0) {
PContact contact = roster_get_contact(bare_jid);
PContact contact = roster_get_contact(jidp->barejid);
if ((contact == NULL) || (p_contact_subscription(contact) == NULL)) {
if (win_type == WIN_CHAT) {
ui_current_print_line("No subscription information for %s.", bare_jid);
ui_current_print_line("No subscription information for %s.", jidp->barejid);
} else {
cons_show("No subscription information for %s.", bare_jid);
cons_show("No subscription information for %s.", jidp->barejid);
}
} else {
if (win_type == WIN_CHAT) {
if (p_contact_pending_out(contact)) {
ui_current_print_line("%s subscription status: %s, request pending.",
bare_jid, p_contact_subscription(contact));
jidp->barejid, p_contact_subscription(contact));
} else {
ui_current_print_line("%s subscription status: %s.", bare_jid,
ui_current_print_line("%s subscription status: %s.", jidp->barejid,
p_contact_subscription(contact));
}
} else {
if (p_contact_pending_out(contact)) {
cons_show("%s subscription status: %s, request pending.",
bare_jid, p_contact_subscription(contact));
jidp->barejid, p_contact_subscription(contact));
} else {
cons_show("%s subscription status: %s.", bare_jid,
cons_show("%s subscription status: %s.", jidp->barejid,
p_contact_subscription(contact));
}
}
@@ -1634,7 +1638,8 @@ _cmd_sub(gchar **args, struct cmd_help_t help)
cons_show("Usage: %s", help.usage);
}
free(jid);
jid_destroy(jidp);
return TRUE;
}
@@ -1673,6 +1678,19 @@ _cmd_wins(gchar **args, struct cmd_help_t help)
return TRUE;
}
static gboolean
_cmd_win(gchar **args, struct cmd_help_t help)
{
int num = atoi(args[0]);
if (ui_win_exists(num)) {
ui_switch_win(num);
} else {
cons_show("Window %d does not exist.", num);
}
return TRUE;
}
static
gint _compare_commands(Command *a, Command *b)
{
@@ -1833,7 +1851,7 @@ _cmd_about(gchar **args, struct cmd_help_t help)
cons_show("");
cons_about();
if (ui_current_win_type() != WIN_CONSOLE) {
status_bar_new(0);
status_bar_new(1);
}
return TRUE;
}
@@ -2016,8 +2034,6 @@ _cmd_who(gchar **args, struct cmd_help_t help)
ui_room_roster(room, filtered, presence);
}
free(room);
// not in groupchat window
} else {
cons_show("");
@@ -2137,7 +2153,7 @@ _cmd_who(gchar **args, struct cmd_help_t help)
}
if (win_type != WIN_CONSOLE && win_type != WIN_MUC) {
status_bar_new(0);
status_bar_new(1);
}
return TRUE;
@@ -2157,11 +2173,6 @@ _cmd_msg(gchar **args, struct cmd_help_t help)
return TRUE;
}
if (ui_windows_full()) {
cons_show_error("Windows all used, close a window and try again.");
return TRUE;
}
if (win_type == WIN_MUC) {
char *room_name = ui_current_recipient();
if (muc_nick_in_roster(room_name, usr)) {
@@ -2182,8 +2193,6 @@ _cmd_msg(gchar **args, struct cmd_help_t help)
ui_current_print_line("No such participant \"%s\" in room.", usr);
}
free(room_name);
return TRUE;
} else {
@@ -2421,11 +2430,6 @@ _cmd_duck(gchar **args, struct cmd_help_t help)
return TRUE;
}
if (ui_windows_full()) {
cons_show_error("Windows all used, close a window and try again.");
return TRUE;
}
// if no duck win open, create it and send a help command
if (!ui_duck_exists()) {
ui_create_duck_win();
@@ -2581,8 +2585,6 @@ _cmd_info(gchar **args, struct cmd_help_t help)
break;
}
free(recipient);
return TRUE;
}
@@ -2611,7 +2613,6 @@ _cmd_caps(gchar **args, struct cmd_help_t help)
} else {
cons_show("No such participant \"%s\" in room.", args[0]);
}
free(recipient);
} else {
cons_show("No nickname supplied to /caps in chat room.");
}
@@ -2652,7 +2653,6 @@ _cmd_caps(gchar **args, struct cmd_help_t help)
cons_show_caps(jid->resourcepart, resource);
jid_destroy(jid);
}
free(recipient);
}
break;
default:
@@ -2689,7 +2689,6 @@ _cmd_software(gchar **args, struct cmd_help_t help)
} else {
cons_show("No such participant \"%s\" in room.", args[0]);
}
free(recipient);
} else {
cons_show("No nickname supplied to /software in chat room.");
}
@@ -2715,7 +2714,6 @@ _cmd_software(gchar **args, struct cmd_help_t help)
} else {
recipient = ui_current_recipient();
iq_send_software_version(recipient);
free(recipient);
}
break;
default:
@@ -2735,11 +2733,6 @@ _cmd_join(gchar **args, struct cmd_help_t help)
return TRUE;
}
if (ui_windows_full()) {
cons_show_error("Windows all used, close a window and try again.");
return TRUE;
}
Jid *room_arg = jid_create(args[0]);
if (room_arg == NULL) {
cons_show_error("Specified room has incorrect format");
@@ -2887,7 +2880,6 @@ _cmd_bookmark(gchar **args, struct cmd_help_t help)
cons_show_bookmarks(bookmark_get_list());
} else {
gboolean autojoin = FALSE;
gboolean jid_release = FALSE;
gchar *jid = NULL;
gchar *nick = NULL;
int idx = 1;
@@ -2913,7 +2905,6 @@ _cmd_bookmark(gchar **args, struct cmd_help_t help)
if (win_type == WIN_MUC) {
jid = ui_current_recipient();
jid_release = TRUE;
nick = muc_get_room_nick(jid);
} else {
cons_show("Usage: %s", help.usage);
@@ -2928,10 +2919,6 @@ _cmd_bookmark(gchar **args, struct cmd_help_t help)
} else {
cons_show("Usage: %s", help.usage);
}
if (jid_release) {
free(jid);
}
}
return TRUE;
@@ -3024,16 +3011,13 @@ _cmd_tiny(gchar **args, struct cmd_help_t help)
}
ui_outgoing_msg("me", recipient, tiny);
free(recipient);
} else if (win_type == WIN_PRIVATE) {
char *recipient = ui_current_recipient();
message_send(tiny, recipient);
ui_outgoing_msg("me", recipient, tiny);
free(recipient);
} else { // groupchat
char *recipient = ui_current_recipient();
message_send_groupchat(tiny, recipient);
free(recipient);
}
free(tiny);
} else {
@@ -3058,21 +3042,12 @@ _cmd_close(gchar **args, struct cmd_help_t help)
{
jabber_conn_status_t conn_status = jabber_get_connection_status();
int index = 0;
int curr = 0;
int count = 0;
if (args[0] == NULL) {
index = ui_current_win_index();
} else if (strcmp(args[0], "all") == 0) {
for (curr = 1; curr <= 9; curr++) {
if (ui_win_exists(curr)) {
if (conn_status == JABBER_CONNECTED) {
ui_close_connected_win(curr);
}
ui_close_win(curr);
count++;
}
}
count = ui_close_all_wins();
if (count == 0) {
cons_show("No windows to close.");
} else if (count == 1) {
@@ -3082,15 +3057,7 @@ _cmd_close(gchar **args, struct cmd_help_t help)
}
return TRUE;
} else if (strcmp(args[0], "read") == 0) {
for (curr = 1; curr <= 9; curr++) {
if (ui_win_exists(curr) && (ui_win_unread(curr) == 0)) {
if (conn_status == JABBER_CONNECTED) {
ui_close_connected_win(curr);
}
ui_close_win(curr);
count++;
}
}
count = ui_close_read_wins();
if (count == 0) {
cons_show("No windows to close.");
} else if (count == 1) {
@@ -3101,21 +3068,20 @@ _cmd_close(gchar **args, struct cmd_help_t help)
return TRUE;
} else {
index = atoi(args[0]);
if (index == 0) {
index = 9;
} else if (index != 10) {
index--;
}
}
if (index == 0) {
if (index < 0 || index == 10) {
cons_show("No such window exists.");
return TRUE;
}
if (index == 1) {
cons_show("Cannot close console window.");
return TRUE;
}
if (index > 9 || index < 0) {
cons_show("No such window exists.");
return TRUE;
if (index == 0) {
index = 10;
}
if (!ui_win_exists(index)) {
@@ -3123,7 +3089,6 @@ _cmd_close(gchar **args, struct cmd_help_t help)
return TRUE;
}
// handle leaving rooms, or chat
if (conn_status == JABBER_CONNECTED) {
ui_close_connected_win(index);
@@ -3131,11 +3096,7 @@ _cmd_close(gchar **args, struct cmd_help_t help)
// close the window
ui_close_win(index);
int ui_index = index + 1;
if (ui_index == 10) {
ui_index = 0;
}
cons_show("Closed window %d", ui_index);
cons_show("Closed window %d", index);
return TRUE;
}