[Asterisk-code-review] media_cache.c: Various CLI improvements (asterisk[16])

George Joseph asteriskteam at digium.com
Mon Dec 2 16:02:16 CST 2019


George Joseph has submitted this change. ( https://gerrit.asterisk.org/c/asterisk/+/13305 )

Change subject: media_cache.c: Various CLI improvements
......................................................................

media_cache.c: Various CLI improvements

* Use ast_cli_completion_add() to improve performance when large number of
  cached items are present.

* Only complete one URI for commands that only accept a single URI.

* Change command documentation to wrap at 80 characters to improve
  readability.

Change-Id: Iedb0a2c3541e49561bc231dca2dcc0ebd8612902
---
M main/media_cache.c
1 file changed, 19 insertions(+), 28 deletions(-)

Approvals:
  Benjamin Keith Ford: Looks good to me, but someone else must approve
  Joshua Colp: Looks good to me, but someone else must approve
  George Joseph: Looks good to me, approved; Approved for Submit



diff --git a/main/media_cache.c b/main/media_cache.c
index 4493235..15f70d0 100644
--- a/main/media_cache.c
+++ b/main/media_cache.c
@@ -493,8 +493,7 @@
 		e->command = "media cache show all";
 		e->usage =
 			"Usage: media cache show all\n"
-			"       Display a summary of all current items\n"
-			"       in the media cache.\n";
+			"       Display a summary of all current items in the media cache.\n";
 		return NULL;
 	case CLI_GENERATE:
 		return NULL;
@@ -515,27 +514,22 @@
  * \internal
  * \brief CLI tab completion function for URIs
  */
-static char *cli_complete_uri(const char *word, int state)
+static char *cli_complete_uri(const char *word)
 {
 	struct ast_bucket_file *bucket_file;
 	struct ao2_iterator it_media_items;
 	int wordlen = strlen(word);
-	int which = 0;
-	char *result = NULL;
 
 	it_media_items = ao2_iterator_init(media_cache, 0);
 	while ((bucket_file = ao2_iterator_next(&it_media_items))) {
-		if (!strncasecmp(word, ast_sorcery_object_get_id(bucket_file), wordlen)
-			&& ++which > state) {
-			result = ast_strdup(ast_sorcery_object_get_id(bucket_file));
+		if (!strncasecmp(word, ast_sorcery_object_get_id(bucket_file), wordlen)) {
+			ast_cli_completion_add(ast_strdup(ast_sorcery_object_get_id(bucket_file)));
 		}
 		ao2_ref(bucket_file, -1);
-		if (result) {
-			break;
-		}
 	}
 	ao2_iterator_destroy(&it_media_items);
-	return result;
+
+	return NULL;
 }
 
 static char *media_cache_handle_show_item(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
@@ -550,11 +544,10 @@
 		e->command = "media cache show";
 		e->usage =
 			"Usage: media cache show <uri>\n"
-			"       Display all information about a particular\n"
-			"       item in the media cache.\n";
+			"       Display all information about a particular item in the media cache.\n";
 		return NULL;
 	case CLI_GENERATE:
-		return cli_complete_uri(a->word, a->n);
+		return a->pos == e->args ? cli_complete_uri(a->word) : NULL;
 	}
 
 	if (a->argc != 4) {
@@ -590,14 +583,13 @@
 		e->command = "media cache delete";
 		e->usage =
 			"Usage: media cache delete <uri>\n"
-			"       Delete an item from the media cache.\n"
-			"       Note that this will also remove any local\n"
-			"       storage of the media associated with the URI,\n"
-			"       and will inform the backend supporting the URI\n"
-			"       scheme that it should remove the item.\n";
+			"       Delete an item from the media cache.\n\n"
+			"       Note that this will also remove any local storage of the media associated\n"
+			"       with the URI, and will inform the backend supporting the URI scheme that\n"
+			"       it should remove the item.\n";
 		return NULL;
 	case CLI_GENERATE:
-		return cli_complete_uri(a->word, a->n);
+		return a->pos == e->args ? cli_complete_uri(a->word) : NULL;
 	}
 
 	if (a->argc != 4) {
@@ -622,13 +614,12 @@
 		e->command = "media cache refresh";
 		e->usage =
 			"Usage: media cache refresh <uri>\n"
-			"       Ask for a refresh of a particular URI.\n"
-			"       If the item does not already exist in the\n"
-			"       media cache, the item will be populated from\n"
-			"       the backend supporting the URI scheme.\n";
+			"       Ask for a refresh of a particular URI.\n\n"
+			"       If the item does not already exist in the media cache, the item will be\n"
+			"       populated from the backend supporting the URI scheme.\n";
 		return NULL;
 	case CLI_GENERATE:
-		return cli_complete_uri(a->word, a->n);
+		return a->pos == e->args ? cli_complete_uri(a->word) : NULL;
 	}
 
 	if (a->argc != 4) {
@@ -651,8 +642,8 @@
 		e->command = "media cache create";
 		e->usage =
 			"Usage: media cache create <uri> <file>\n"
-			"       Create an item in the media cache by associating\n"
-			"       a local media file with some URI.\n";
+			"       Create an item in the media cache by associating a local media file with\n"
+			"       some URI.\n";
 		return NULL;
 	case CLI_GENERATE:
 		return NULL;

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/13305
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 16
Gerrit-Change-Id: Iedb0a2c3541e49561bc231dca2dcc0ebd8612902
Gerrit-Change-Number: 13305
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Bright <sean.bright at gmail.com>
Gerrit-Reviewer: Benjamin Keith Ford <bford at digium.com>
Gerrit-Reviewer: Friendly Automation
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20191202/25cf80b7/attachment-0001.html>


More information about the asterisk-code-review mailing list