[svn-commits] mmichelson: branch mmichelson/queue-reset r166955 - /team/mmichelson/queue-re...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Dec 31 13:35:58 CST 2008


Author: mmichelson
Date: Wed Dec 31 13:35:58 2008
New Revision: 166955

URL: http://svn.digium.com/view/asterisk?view=rev&rev=166955
Log:
More changes to the tab completion code for reloading queues

This is really close, but the problem is that I can still tab-
complete multiple queue names in a single command.

I also fixed an off-by-one error in the queue reload CLI handler
which I discovered while testing


Modified:
    team/mmichelson/queue-reset/apps/app_queue.c

Modified: team/mmichelson/queue-reset/apps/app_queue.c
URL: http://svn.digium.com/view/asterisk/team/mmichelson/queue-reset/apps/app_queue.c?view=diff&rev=166955&r1=166954&r2=166955
==============================================================================
--- team/mmichelson/queue-reset/apps/app_queue.c (original)
+++ team/mmichelson/queue-reset/apps/app_queue.c Wed Dec 31 13:35:58 2008
@@ -6727,22 +6727,36 @@
 	int wordlen;
 	int which = 0;
 	static int localstate = 0;
+	int rules = strstr(line, "rules") != NULL;
+	int stats = strstr(line, "stats") != NULL;
+	int parameters = strstr(line, "parameters") != NULL;
+	int members = strstr(line, "members") != NULL;
+
+	if (pos > 7) {
+		return NULL;
+	}
 
 	if (ast_strlen_zero(word)) {
 		switch (state) {
 			case 0:
-				return ast_strdup("rules");
+				if (!rules)
+					return ast_strdup("rules");
 			case 1:
-				return ast_strdup("stats");
+				if (!stats)
+					return ast_strdup("stats");
 			case 2:
-				return ast_strdup("parameters");
+				if (!parameters)
+					return ast_strdup("parameters");
 			case 3:
-				return ast_strdup("members");
-			case 4:
+				if (!members)
+					return ast_strdup("members");
+			default:
 				{
-					char *ret = complete_queue(line, word, pos, localstate);
+					char *ret = complete_queue(line, word, pos, localstate++);
 					if (!ret) {
 						localstate = 0;
+					} else if (strstr(line, ret)) {
+						ret = NULL;
 					}
 					return ret;
 				}
@@ -6751,18 +6765,20 @@
 
 	wordlen = strlen(word);
 
-	if (!strncasecmp(word, "rules", wordlen) && (++which > state)) {
+	if (!rules && !strncasecmp(word, "rules", wordlen) && (++which > state)) {
 		return ast_strdup("rules");
-	} else if (!strncasecmp(word, "stats", wordlen) && (++which > state)) {
+	} else if (!stats && !strncasecmp(word, "stats", wordlen) && (++which > state)) {
 		return ast_strdup("stats");
-	} else if (!strncasecmp(word, "parameters", wordlen) && (++which > state)) {
+	} else if (!parameters && !strncasecmp(word, "parameters", wordlen) && (++which > state)) {
 		return ast_strdup("parameters");
-	} else if (!strncasecmp(word, "members", wordlen) && (++which > state)) {
+	} else if (!members && !strncasecmp(word, "members", wordlen) && (++which > state)) {
 		return ast_strdup("members");
 	} else {
 		char *ret = complete_queue(line, word, pos, localstate++);
 		if (!ret) {
 			localstate = 0;
+		} else if (strstr(line, ret)) {
+			return NULL;
 		}
 		return ret;
 	}
@@ -6801,7 +6817,7 @@
 			return complete_queue_reload(a->line, a->word, a->pos, a->n);
 	}
 
-	if (a->argc < 2 || a->argc > 6)
+	if (a->argc < 2 || a->argc > 7)
 		return CLI_SHOWUSAGE;
 
 	if (a->argc == 2) {




More information about the svn-commits mailing list