int listAllUniqueTags(struct client *client, int type, const struct locate_item_list *criteria) { int ret; ListCommandItem *item = newListCommandItem(type, criteria); struct list_tags_data data = { .client = client, .item = item, }; if (type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) { data.set = strset_new(); } ret = db_walk(NULL, listUniqueTagsInDirectory, NULL, &data); if (type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) { const char *value; strset_rewind(data.set); while ((value = strset_next(data.set)) != NULL) client_printf(client, "%s: %s\n", tag_item_names[type], value); strset_free(data.set); } freeListCommandItem(item); return ret; }
int listAllUniqueTags(FILE * fp, int type, int numConditionals, LocateTagItem * conditionals) { int ret; ListCommandItem * item = newListCommandItem(type, numConditionals, conditionals); if(type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) { resetVisitedFlagsInTagTracker(type); } ret = traverseAllIn(fp, NULL, listUniqueTagsInDirectory, NULL, (void *)item); if(type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) { printVisitedInTagTracker(fp, type); } freeListCommandItem(item); return ret; }
bool listAllUniqueTags(struct client *client, int type, const struct locate_item_list *criteria, GError **error_r) { ListCommandItem *item = newListCommandItem(type, criteria); struct list_tags_data data = { .client = client, .item = item, }; if (type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) { data.set = strset_new(); } if (!db_walk("", &unique_tags_visitor, &data, error_r)) { freeListCommandItem(item); return false; } if (type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) { const char *value; strset_rewind(data.set); while ((value = strset_next(data.set)) != NULL) client_printf(client, "%s: %s\n", tag_item_names[type], value); strset_free(data.set); } freeListCommandItem(item); return true; }