diff options
-rw-r--r-- | src/command/command.c | 31 | ||||
-rw-r--r-- | src/xmpp/presence.c | 12 | ||||
-rw-r--r-- | src/xmpp/xmpp.h | 2 |
3 files changed, 44 insertions, 1 deletions
diff --git a/src/command/command.c b/src/command/command.c index cebb10c2..d22e3953 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -74,6 +74,7 @@ static gboolean _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help, const char * const display, preference_t pref); static void _cmd_complete_parameters(char *input, int *size); +static void _sub_autocomplete(char *input, int *size); static void _notify_autocomplete(char *input, int *size); static void _titlebar_autocomplete(char *input, int *size); static void _theme_autocomplete(char *input, int *size); @@ -965,6 +966,7 @@ cmd_reset_autocomplete() accounts_reset_all_search(); accounts_reset_enabled_search(); prefs_reset_boolean_choice(); + presence_reset_sub_request_search(); autocomplete_reset(help_ac); autocomplete_reset(notify_ac); autocomplete_reset(sub_ac); @@ -1181,13 +1183,13 @@ _cmd_complete_parameters(char *input, int *size) _parameter_autocomplete(input, size, "/connect", accounts_find_enabled); - _parameter_autocomplete_with_ac(input, size, "/sub", sub_ac); _parameter_autocomplete_with_ac(input, size, "/help", help_ac); _parameter_autocomplete_with_ac(input, size, "/who", who_ac); _parameter_autocomplete_with_ac(input, size, "/prefs", prefs_ac); _parameter_autocomplete_with_ac(input, size, "/log", log_ac); _parameter_autocomplete_with_ac(input, size, "/disco", disco_ac); + _sub_autocomplete(input, size); _notify_autocomplete(input, size); _autoaway_autocomplete(input, size); _titlebar_autocomplete(input, size); @@ -3074,6 +3076,33 @@ _parameter_autocomplete_with_ac(char *input, int *size, char *command, } static void +_sub_autocomplete(char *input, int *size) +{ + char *found = NULL; + char *auto_msg = NULL; + char inp_cpy[*size]; + int i; + + if ((strncmp(input, "/sub allow ", 11) == 0) && (*size > 11)) { + for (i = 11; i < *size; i++) { + inp_cpy[i-11] = input[i]; + } + inp_cpy[(*size) - 11] = '\0'; + found = presence_sub_request_find(inp_cpy); + if (found != NULL) { + auto_msg = (char *) malloc((11 + (strlen(found) + 1)) * sizeof(char)); + strcpy(auto_msg, "/sub allow "); + strcat(auto_msg, found); + inp_replace_input(input, auto_msg, size); + free(auto_msg); + free(found); + } + } else if ((strncmp(input, "/sub ", 5) == 0) && (*size > 5)) { + _parameter_autocomplete_with_ac(input, size, "/sub", sub_ac); + } +} + +static void _notify_autocomplete(char *input, int *size) { char *found = NULL; diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index 1bd1ec93..4f450f70 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -141,6 +141,18 @@ presence_free_sub_requests(void) autocomplete_free(sub_requests_ac); } +char * +presence_sub_request_find(char * search_str) +{ + return autocomplete_complete(sub_requests_ac, search_str); +} + +void +presence_reset_sub_request_search(void) +{ + autocomplete_reset(sub_requests_ac); +} + void presence_update(const resource_presence_t presence_type, const char * const msg, const int idle) diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index c38674b4..ff30ba90 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -105,6 +105,8 @@ void message_send_duck(const char * const query); void presence_subscription(const char * const jid, const jabber_subscr_t action); GSList* presence_get_subscription_requests(void); gint presence_sub_request_count(void); +void presence_reset_sub_request_search(void); +char * presence_sub_request_find(char * search_str); void presence_join_room(Jid *jid); void presence_change_room_nick(const char * const room, const char * const nick); void presence_leave_chat_room(const char * const room_jid); |