Commit b9272fa9 authored by Warren Dukes's avatar Warren Dukes

ok, tagtracker now tracks title, this has the disadvantage of needing to sort

the title tracker list, and it wastes more memory. But it makes implementing list command elegant, since we've just visit tags, then print out the visited tags in tag tracker (which has the benefit of making sure everything is in sorted order) git-svn-id: https://svn.musicpd.org/mpd/trunk@2608 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent 1d123cd4
......@@ -213,7 +213,7 @@ void freeListCommandItem(ListCommandItem * item) {
free(item);
}
void printUnvisitedTags(FILE * fp, Song * song, int tagType) {
void visitTag(FILE * fp, Song * song, int tagType) {
int i;
MpdTag * tag = song->tag;
......@@ -225,11 +225,8 @@ void printUnvisitedTags(FILE * fp, Song * song, int tagType) {
if(!tag) return;
for(i = 0; i < tag->numOfItems; i++) {
if(tag->items[i].type == tagType &&
!wasVisitedInTagTracker(tagType, tag->items[i].value))
{
myfprintf(fp, "%s: %s\n", mpdTagItemKeys[tagType],
tag->items[i].value);
if(tag->items[i].type == tagType) {
visitInTagTracker(tagType, tag->items[i].value);
}
}
}
......@@ -246,7 +243,7 @@ int listUniqueTagsInDirectory(FILE * fp, Song * song, void * data) {
}
}
printUnvisitedTags(fp, song, item->tagType);
visitTag(fp, song, item->tagType);
return 0;
}
......@@ -265,6 +262,10 @@ int listAllUniqueTags(FILE * fp, int type, int numConditionals,
ret = traverseAllIn(fp, NULL, listUniqueTagsInDirectory, NULL,
(void *)item);
if(type >= 0 && type <= TAG_NUM_OF_ITEM_TYPES) {
printVisitedInTagTracker(fp, type);
}
freeListCommandItem(item);
return ret;
......
......@@ -24,8 +24,6 @@ typedef struct tagTrackerItem {
char * getTagItemString(int type, char * string) {
ListNode * node;
if(type == TAG_ITEM_TITLE) return strdup(string);
if(tagLists[type] == NULL) {
tagLists[type] = makeList(free, 1);
}
......@@ -48,11 +46,6 @@ void removeTagItemString(int type, char * string) {
assert(string);
if(type == TAG_ITEM_TITLE) {
free(string);
return;
}
assert(tagLists[type]);
if(tagLists[type] == NULL) return;
......@@ -124,9 +117,7 @@ void resetVisitedFlagsInTagTracker(int type) {
}
int wasVisitedInTagTracker(int type, char * str) {
int ret;
ListNode * node;
TagTrackerItem * item;
if(!tagLists[type]) return 0;
......@@ -134,9 +125,35 @@ int wasVisitedInTagTracker(int type, char * str) {
if(!node) return 0;
item = node->data;
ret = item->visited;
item->visited = 1;
return ((TagTrackerItem *)node->data)->visited;
}
void visitInTagTracker(int type, char * str) {
ListNode * node;
if(!tagLists[type]) return;
node = findNodeInList(tagLists[type], str);
return ret;
if(!node) return;
((TagTrackerItem *)node->data)->visited = 1;
}
void printVisitedInTagTracker(FILE * fp, int type) {
ListNode * node;
TagTrackerItem * item;
if(!tagLists[type]) return;
node = tagLists[type]->firstNode;
while(node) {
item = node->data;
if(item->visited) {
myfprintf(fp, "%s: %s\n", mpdTagItemKeys[type],
node->key);
}
node = node->nextNode;
}
......@@ -17,4 +17,8 @@ void resetVisitedFlagsInTagTracker(int type);
int wasVisitedInTagTracker(int type, char * str);
void visitInTagTracker(int type, char * str);
void printVisitedInTagTracker(FILE * fp, int type);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment