Added /bookmark with no args usage when in chat room

issue #402
This commit is contained in:
James Booth
2014-08-19 22:51:00 +01:00
parent 5b40696ea0
commit 7bac097d60
3 changed files with 97 additions and 63 deletions

View File

@@ -304,9 +304,9 @@ static struct cmd_t command_defs[] =
NULL } } }, NULL } } },
{ "/bookmark", { "/bookmark",
cmd_bookmark, parse_args, 1, 8, NULL, cmd_bookmark, parse_args, 0, 8, NULL,
{ "/bookmark list|add|update|remove|join [room@server] [nick value] [password value] [autojoin on|off]", "Manage bookmarks.", { "/bookmark [list|add|update|remove|join] [room@server] [nick value] [password value] [autojoin on|off]", "Manage bookmarks.",
{ "/bookmark list|add|update|remove|join [room@server] [nick value] [password value] [autojoin on|off]", { "/bookmark [list|add|update|remove|join] [room@server] [nick value] [password value] [autojoin on|off]",
"---------------------------------------------------------------------------------------------------", "---------------------------------------------------------------------------------------------------",
"Manage bookmarks.", "Manage bookmarks.",
"list: List all bookmarks.", "list: List all bookmarks.",
@@ -317,6 +317,7 @@ static struct cmd_t command_defs[] =
"update: Update any of the above properties associated with the bookmark.", "update: Update any of the above properties associated with the bookmark.",
"remove: Remove the bookmark for room@server.", "remove: Remove the bookmark for room@server.",
"join: Join room@server using the properties associated with the bookmark.", "join: Join room@server using the properties associated with the bookmark.",
"When in a chat room, the /bookmark command with no arguments will bookmark the current room with the current settings, and set autojoin to \"on\".",
NULL } } }, NULL } } },
{ "/disco", { "/disco",

View File

@@ -1807,6 +1807,29 @@ cmd_bookmark(gchar **args, struct cmd_help_t help)
return TRUE; return TRUE;
} }
win_type_t win_type = ui_current_win_type();
if (win_type == WIN_MUC) {
gchar *cmd = args[0];
// default to current nickname, password, and autojoin "on"
if (cmd == NULL) {
char *jid = ui_current_recipient();
char *nick = muc_get_room_nick(jid);
char *password = muc_get_room_password(jid);
gboolean added = bookmark_add(jid, nick, password, "on");
if (added) {
ui_current_print_formatted_line('!', 0, "Bookmark added for %s.", jid);
} else {
ui_current_print_formatted_line('!', 0, "Bookmark already exists for %s.", jid);
}
return TRUE;
} else {
ui_current_print_formatted_line('!', 0, "No arguments required for /bookmark in a chat room");
return TRUE;
}
} else {
gchar *cmd = args[0]; gchar *cmd = args[0];
if (cmd == NULL) { if (cmd == NULL) {
cons_show("Usage: %s", help.usage); cons_show("Usage: %s", help.usage);
@@ -1888,6 +1911,7 @@ cmd_bookmark(gchar **args, struct cmd_help_t help)
options_destroy(options); options_destroy(options);
} }
}
return TRUE; return TRUE;
} }

View File

@@ -60,6 +60,7 @@ void cmd_bookmark_shows_message_when_undefined(void **state)
void cmd_bookmark_shows_usage_when_no_args(void **state) void cmd_bookmark_shows_usage_when_no_args(void **state)
{ {
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
help->usage = "some usage"; help->usage = "some usage";
gchar *args[] = { NULL }; gchar *args[] = { NULL };
@@ -83,6 +84,7 @@ static void _free_bookmark(Bookmark *bookmark)
void cmd_bookmark_list_shows_bookmarks(void **state) void cmd_bookmark_list_shows_bookmarks(void **state)
{ {
mock_cons_show_bookmarks(); mock_cons_show_bookmarks();
mock_current_win_type(WIN_CONSOLE);
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
gchar *args[] = { "list", NULL }; gchar *args[] = { "list", NULL };
GList *bookmarks = NULL; GList *bookmarks = NULL;
@@ -130,6 +132,7 @@ void cmd_bookmark_add_shows_message_when_invalid_jid(void **state)
{ {
mock_bookmark_add(); mock_bookmark_add();
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
char *jid = "room"; char *jid = "room";
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
gchar *args[] = { "add", jid, NULL }; gchar *args[] = { "add", jid, NULL };
@@ -148,6 +151,7 @@ void cmd_bookmark_add_adds_bookmark_with_jid(void **state)
{ {
mock_bookmark_add(); mock_bookmark_add();
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
char *jid = "room@conf.server"; char *jid = "room@conf.server";
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
gchar *args[] = { "add", jid, NULL }; gchar *args[] = { "add", jid, NULL };
@@ -167,6 +171,7 @@ void cmd_bookmark_add_adds_bookmark_with_jid_nick(void **state)
{ {
mock_bookmark_add(); mock_bookmark_add();
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
char *jid = "room@conf.server"; char *jid = "room@conf.server";
char *nick = "bob"; char *nick = "bob";
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
@@ -187,6 +192,7 @@ void cmd_bookmark_add_adds_bookmark_with_jid_autojoin(void **state)
{ {
mock_bookmark_add(); mock_bookmark_add();
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
char *jid = "room@conf.server"; char *jid = "room@conf.server";
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
gchar *args[] = { "add", jid, "autojoin", "on", NULL }; gchar *args[] = { "add", jid, "autojoin", "on", NULL };
@@ -206,6 +212,7 @@ void cmd_bookmark_add_adds_bookmark_with_jid_nick_autojoin(void **state)
{ {
mock_bookmark_add(); mock_bookmark_add();
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
char *jid = "room@conf.server"; char *jid = "room@conf.server";
char *nick = "bob"; char *nick = "bob";
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
@@ -226,6 +233,7 @@ void cmd_bookmark_remove_removes_bookmark(void **state)
{ {
mock_bookmark_remove(); mock_bookmark_remove();
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
char *jid = "room@conf.server"; char *jid = "room@conf.server";
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
gchar *args[] = { "remove", jid, NULL }; gchar *args[] = { "remove", jid, NULL };
@@ -245,6 +253,7 @@ void cmd_bookmark_remove_shows_message_when_no_bookmark(void **state)
{ {
mock_bookmark_remove(); mock_bookmark_remove();
mock_cons_show(); mock_cons_show();
mock_current_win_type(WIN_CONSOLE);
char *jid = "room@conf.server"; char *jid = "room@conf.server";
CommandHelp *help = malloc(sizeof(CommandHelp)); CommandHelp *help = malloc(sizeof(CommandHelp));
gchar *args[] = { "remove", jid, NULL }; gchar *args[] = { "remove", jid, NULL };