diff options
Diffstat (limited to 'src/command/commands.c')
-rw-r--r-- | src/command/commands.c | 125 |
1 files changed, 81 insertions, 44 deletions
diff --git a/src/command/commands.c b/src/command/commands.c index 1680c27b..3647bb22 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -1219,24 +1219,12 @@ cmd_msg(gchar **args, struct cmd_help_t help) barejid = usr; } - // if msg to current recipient, and resource specified, set resource - char *resource = NULL; - ProfWin *current = wins_get_current(); - if (current->type == WIN_CHAT) { - ProfChatWin *chatwin = (ProfChatWin*)current; - assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); - if ((g_strcmp0(chatwin->barejid, barejid) == 0) && (chatwin->resource)) { - resource = chatwin->resource; - } - } - if (msg != NULL) { #ifdef HAVE_LIBOTR if (otr_is_secure(barejid)) { char *encrypted = otr_encrypt_message(barejid, msg); if (encrypted != NULL) { - gboolean send_state = chat_session_on_message_send(barejid); - message_send_chat(barejid, resource, encrypted, send_state); + message_send_chat(barejid, encrypted); otr_free_message(encrypted); ui_outgoing_chat_msg("me", barejid, msg); @@ -1265,13 +1253,11 @@ cmd_msg(gchar **args, struct cmd_help_t help) GString *otr_message = g_string_new(msg); g_string_append(otr_message, OTRL_MESSAGE_TAG_BASE); g_string_append(otr_message, OTRL_MESSAGE_TAG_V2); - gboolean send_state = chat_session_on_message_send(barejid); - message_send_chat(barejid, resource, otr_message->str, send_state); + message_send_chat(barejid, otr_message->str); g_string_free(otr_message, TRUE); } else { - gboolean send_state = chat_session_on_message_send(barejid); - message_send_chat(barejid, resource, msg, send_state); + message_send_chat(barejid, msg); } ui_outgoing_chat_msg("me", barejid, msg); @@ -1284,8 +1270,7 @@ cmd_msg(gchar **args, struct cmd_help_t help) } return TRUE; #else - gboolean send_state = chat_session_on_message_send(barejid); - message_send_chat(barejid, resource, msg, send_state); + message_send_chat(barejid, msg); ui_outgoing_chat_msg("me", barejid, msg); if (((win_type == WIN_CHAT) || (win_type == WIN_CONSOLE)) && prefs_get_boolean(PREF_CHLOG)) { @@ -1298,7 +1283,6 @@ cmd_msg(gchar **args, struct cmd_help_t help) #endif } else { // msg == NULL - chat_session_on_window_open(barejid); ui_new_chat_win(barejid); #ifdef HAVE_LIBOTR if (otr_is_secure(barejid)) { @@ -1603,16 +1587,33 @@ cmd_roster(gchar **args, struct cmd_help_t help) gboolean cmd_resource(gchar **args, struct cmd_help_t help) { + char *cmd = args[0]; + char *setting = NULL; + if (g_strcmp0(cmd, "message") == 0) { + setting = args[1]; + if (!setting) { + cons_show("Usage: %s", help.usage); + return TRUE; + } else { + return _cmd_set_boolean_preference(setting, help, "Message resource", PREF_RESOURCE_MESSAGE); + } + } else if (g_strcmp0(cmd, "title") == 0) { + setting = args[1]; + if (!setting) { + cons_show("Usage: %s", help.usage); + return TRUE; + } else { + return _cmd_set_boolean_preference(setting, help, "Title resource", PREF_RESOURCE_TITLE); + } + } + ProfWin *current = wins_get_current(); if (current->type != WIN_CHAT) { - cons_show("The /resource command is only valid in chat windows."); + cons_show("Resource can only be changed in chat windows."); return TRUE; } - ProfChatWin *chatwin = (ProfChatWin*)current; - char *cmd = args[0]; - if (g_strcmp0(cmd, "set") == 0) { char *resource = args[1]; if (!resource) { @@ -1638,11 +1639,17 @@ cmd_resource(gchar **args, struct cmd_help_t help) return TRUE; } - chatwin->resource = strdup(resource); + chatwin->resource_override = strdup(resource); + chat_state_free(chatwin->state); + chatwin->state = chat_state_new(); + chat_session_resource_override(chatwin->barejid, resource); return TRUE; } else if (g_strcmp0(cmd, "off") == 0) { - FREE_SET_NULL(chatwin->resource); + FREE_SET_NULL(chatwin->resource_override); + chat_state_free(chatwin->state); + chatwin->state = chat_state_new(); + chat_session_remove(chatwin->barejid); return TRUE; } else { cons_show("Usage: %s", help.usage); @@ -3025,8 +3032,7 @@ cmd_tiny(gchar **args, struct cmd_help_t help) if (otr_is_secure(chatwin->barejid)) { char *encrypted = otr_encrypt_message(chatwin->barejid, tiny); if (encrypted != NULL) { - gboolean send_state = chat_session_on_message_send(chatwin->barejid); - message_send_chat(chatwin->barejid, chatwin->resource, encrypted, send_state); + message_send_chat(chatwin->barejid, encrypted); otr_free_message(encrypted); if (prefs_get_boolean(PREF_CHLOG)) { const char *jid = jabber_get_fulljid(); @@ -3046,8 +3052,7 @@ cmd_tiny(gchar **args, struct cmd_help_t help) cons_show_error("Failed to send message."); } } else { - gboolean send_state = chat_session_on_message_send(chatwin->barejid); - message_send_chat(chatwin->barejid, chatwin->resource, tiny, send_state); + message_send_chat(chatwin->barejid, tiny); if (prefs_get_boolean(PREF_CHLOG)) { const char *jid = jabber_get_fulljid(); Jid *jidp = jid_create(jid); @@ -3058,8 +3063,7 @@ cmd_tiny(gchar **args, struct cmd_help_t help) ui_outgoing_chat_msg("me", chatwin->barejid, tiny); } #else - gboolean send_state = chat_session_on_message_send(chatwin->barejid); - message_send_chat(chatwin->barejid, chatwin->resource, tiny, send_state); + message_send_chat(chatwin->barejid, tiny); if (prefs_get_boolean(PREF_CHLOG)) { const char *jid = jabber_get_fulljid(); Jid *jidp = jid_create(jid); @@ -3264,10 +3268,18 @@ cmd_states(gchar **args, struct cmd_help_t help) gboolean cmd_titlebar(gchar **args, struct cmd_help_t help) { - if (g_strcmp0(args[0], "off") == 0) { + if (g_strcmp0(args[0], "show") != 0 && g_strcmp0(args[0], "goodbye") != 0) { + cons_show("Usage: %s", help.usage); + return TRUE; + } + if (g_strcmp0(args[0], "show") == 0 && g_strcmp0(args[1], "off") == 0) { ui_clear_win_title(); } - return _cmd_set_boolean_preference(args[0], help, "Titlebar", PREF_TITLEBAR); + if (g_strcmp0(args[0], "show") == 0) { + return _cmd_set_boolean_preference(args[1], help, "Titlebar show", PREF_TITLEBAR_SHOW); + } else { + return _cmd_set_boolean_preference(args[1], help, "Titlebar goodbye", PREF_TITLEBAR_GOODBYE); + } } gboolean @@ -3454,13 +3466,41 @@ cmd_notify(gchar **args, struct cmd_help_t help) gboolean cmd_inpblock(gchar **args, struct cmd_help_t help) { - char *value = args[0]; + char *subcmd = args[0]; + char *value = args[1]; int intval; - if (_strtoi(value, &intval, 1, 1000) == 0) { - cons_show("Input blocking set to %d milliseconds.", intval); - prefs_set_inpblock(intval); - ui_input_nonblocking(); + + if (g_strcmp0(subcmd, "timeout") == 0) { + if (value == NULL) { + cons_show("Usage: %s", help.usage); + return TRUE; + } + + if (_strtoi(value, &intval, 1, 1000) == 0) { + cons_show("Input blocking set to %d milliseconds.", intval); + prefs_set_inpblock(intval); + ui_input_nonblocking(FALSE); + } + + return TRUE; + } + + if (g_strcmp0(subcmd, "dynamic") == 0) { + if (value == NULL) { + cons_show("Usage: %s", help.usage); + return TRUE; + } + + if (g_strcmp0(value, "on") != 0 && g_strcmp0(value, "off") != 0) { + cons_show("Dynamic must be one of 'on' or 'off'"); + return TRUE; + } + + return _cmd_set_boolean_preference(value, help, "Dynamic input blocking", PREF_INPBLOCK_DYNAMIC); } + + cons_show("Usage: %s", help.usage); + return TRUE; } @@ -3967,7 +4007,6 @@ cmd_otr(gchar **args, struct cmd_help_t help) barejid = contact; } - chat_session_on_window_open(barejid); ui_new_chat_win(barejid); if (ui_current_win_is_otr()) { @@ -3977,8 +4016,7 @@ cmd_otr(gchar **args, struct cmd_help_t help) ui_current_print_formatted_line('!', 0, "You have not generated or loaded a private key, use '/otr gen'"); } else if (!otr_is_secure(barejid)) { char *otr_query_message = otr_start_query(); - gboolean send_state = chat_session_on_message_send(barejid); - message_send_chat(barejid, NULL, otr_query_message, send_state); + message_send_chat(barejid, otr_query_message); } else { ui_gone_secure(barejid, otr_is_trusted(barejid)); } @@ -3996,8 +4034,7 @@ cmd_otr(gchar **args, struct cmd_help_t help) } else { ProfChatWin *chatwin = ui_get_current_chat(); char *otr_query_message = otr_start_query(); - gboolean send_state = chat_session_on_message_send(chatwin->barejid); - message_send_chat(chatwin->barejid, NULL, otr_query_message, send_state); + message_send_chat(chatwin->barejid, otr_query_message); } } } |