tag: added function tag_name_parse()
Convert a string into a tag_type enum.
This commit is contained in:
		| @@ -42,9 +42,9 @@ locate_parse_type(const char *str) | ||||
| 	if (0 == g_ascii_strcasecmp(str, LOCATE_TAG_ANY_KEY)) | ||||
| 		return LOCATE_TAG_ANY_TYPE; | ||||
|  | ||||
| 	for (i = 0; i < TAG_NUM_OF_ITEM_TYPES; i++) | ||||
| 		if (0 == g_ascii_strcasecmp(str, tag_item_names[i])) | ||||
| 			return i; | ||||
| 	i = tag_name_parse_i(str); | ||||
| 	if (i != TAG_NUM_OF_ITEM_TYPES) | ||||
| 		return i; | ||||
|  | ||||
| 	return -1; | ||||
| } | ||||
|   | ||||
| @@ -61,19 +61,6 @@ void songvec_save(FILE *fp, struct songvec *sv) | ||||
| 	songvec_for_each(sv, song_save, fp); | ||||
| } | ||||
|  | ||||
| static enum tag_type | ||||
| parse_tag_name(const char *name) | ||||
| { | ||||
| 	int i; | ||||
|  | ||||
| 	for (i = 0; i < TAG_NUM_OF_ITEM_TYPES; i++) { | ||||
| 		if (strcmp(name, tag_item_names[i]) == 0) | ||||
| 			return i; | ||||
| 	} | ||||
|  | ||||
| 	return TAG_NUM_OF_ITEM_TYPES; | ||||
| } | ||||
|  | ||||
| struct song * | ||||
| song_load(FILE *fp, struct directory *parent, const char *uri, | ||||
| 	  GString *buffer, GError **error_r) | ||||
| @@ -99,7 +86,7 @@ song_load(FILE *fp, struct directory *parent, const char *uri, | ||||
| 		*colon++ = 0; | ||||
| 		value = g_strchug(colon); | ||||
|  | ||||
| 		if ((type = parse_tag_name(line)) != TAG_NUM_OF_ITEM_TYPES) { | ||||
| 		if ((type = tag_name_parse(line)) != TAG_NUM_OF_ITEM_TYPES) { | ||||
| 			if (!song->tag) { | ||||
| 				song->tag = tag_new(); | ||||
| 				tag_begin_add(song->tag); | ||||
|   | ||||
							
								
								
									
										50
									
								
								src/tag.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								src/tag.c
									
									
									
									
									
								
							| @@ -66,6 +66,36 @@ const char *tag_item_names[TAG_NUM_OF_ITEM_TYPES] = { | ||||
|  | ||||
| bool ignore_tag_items[TAG_NUM_OF_ITEM_TYPES]; | ||||
|  | ||||
| enum tag_type | ||||
| tag_name_parse(const char *name) | ||||
| { | ||||
| 	assert(name != NULL); | ||||
|  | ||||
| 	for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i) { | ||||
| 		assert(tag_item_names[i] != NULL); | ||||
|  | ||||
| 		if (strcmp(name, tag_item_names[i]) == 0) | ||||
| 			return (enum tag_type)i; | ||||
| 	} | ||||
|  | ||||
| 	return TAG_NUM_OF_ITEM_TYPES; | ||||
| } | ||||
|  | ||||
| enum tag_type | ||||
| tag_name_parse_i(const char *name) | ||||
| { | ||||
| 	assert(name != NULL); | ||||
|  | ||||
| 	for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i) { | ||||
| 		assert(tag_item_names[i] != NULL); | ||||
|  | ||||
| 		if (g_ascii_strcasecmp(name, tag_item_names[i]) == 0) | ||||
| 			return (enum tag_type)i; | ||||
| 	} | ||||
|  | ||||
| 	return TAG_NUM_OF_ITEM_TYPES; | ||||
| } | ||||
|  | ||||
| static size_t items_size(const struct tag *tag) | ||||
| { | ||||
| 	return tag->num_items * sizeof(struct tag_item *); | ||||
| @@ -78,7 +108,7 @@ void tag_lib_init(void) | ||||
| 	char *temp; | ||||
| 	char *s; | ||||
| 	char *c; | ||||
| 	int i; | ||||
| 	enum tag_type type; | ||||
|  | ||||
| 	/* parse the "metadata_to_use" config parameter below */ | ||||
|  | ||||
| @@ -100,16 +130,18 @@ void tag_lib_init(void) | ||||
| 			if (*s == '\0') | ||||
| 				quit = 1; | ||||
| 			*s = '\0'; | ||||
| 			for (i = 0; i < TAG_NUM_OF_ITEM_TYPES; i++) { | ||||
| 				if (g_ascii_strcasecmp(c, tag_item_names[i]) == 0) { | ||||
| 					ignore_tag_items[i] = false; | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			if (strlen(c) && i == TAG_NUM_OF_ITEM_TYPES) { | ||||
|  | ||||
| 			c = g_strstrip(c); | ||||
| 			if (*c == 0) | ||||
| 				continue; | ||||
|  | ||||
| 			type = tag_name_parse_i(c); | ||||
| 			if (type == TAG_NUM_OF_ITEM_TYPES) | ||||
| 				g_error("error parsing metadata item \"%s\"", | ||||
| 					c); | ||||
| 			} | ||||
|  | ||||
| 			ignore_tag_items[type] = false; | ||||
|  | ||||
| 			s++; | ||||
| 			c = s; | ||||
| 		} | ||||
|   | ||||
							
								
								
									
										16
									
								
								src/tag.h
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/tag.h
									
									
									
									
									
								
							| @@ -95,6 +95,22 @@ struct tag { | ||||
| 	unsigned num_items; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Parse the string, and convert it into a #tag_type.  Returns | ||||
|  * #TAG_NUM_OF_ITEM_TYPES if the string could not be recognized. | ||||
|  */ | ||||
| enum tag_type | ||||
| tag_name_parse(const char *name); | ||||
|  | ||||
| /** | ||||
|  * Parse the string, and convert it into a #tag_type.  Returns | ||||
|  * #TAG_NUM_OF_ITEM_TYPES if the string could not be recognized. | ||||
|  * | ||||
|  * Case does not matter. | ||||
|  */ | ||||
| enum tag_type | ||||
| tag_name_parse_i(const char *name); | ||||
|  | ||||
| /** | ||||
|  * Creates an empty #tag. | ||||
|  */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann