MPD: Support "any" as a search type in find and search.

Currently I am just searching all the defined tag types. I am not sure if
there should be a specific order they are searched in or whether we should
just be searching string ones.

Now coerces the tag value to a string.
This commit is contained in:
jimmy 2014-04-26 13:05:59 +12:00
parent 6745455a74
commit 9a24b61d81

View file

@ -1320,7 +1320,7 @@ function writePlaylistInfo(self, start, end) {
}
function forEachMatchingTrack(self, filters, caseSensitive, fn) {
// TODO: support 'any' and 'in' as tag types
// TODO: support 'in' as tag type
var trackTable = self.player.libraryIndex.trackTable;
if (!caseSensitive) {
filters.forEach(function(filter) {
@ -1329,10 +1329,11 @@ function forEachMatchingTrack(self, filters, caseSensitive, fn) {
}
for (var key in trackTable) {
var track = trackTable[key];
var matches = true;
var matches = false;
for (var filterIndex = 0; filterIndex < filters.length; filterIndex += 1) {
var filter = filters[filterIndex];
var filterField = track[filter.field];
var filterField = String(track[filter.field]);
if (!filterField) continue;
if (!caseSensitive && filterField) filterField = filterField.toLowerCase();
/* assumes:
@ -1341,11 +1342,11 @@ function forEachMatchingTrack(self, filters, caseSensitive, fn) {
*/
if (caseSensitive) {
if (filterField === filter.value) {
matches = false;
matches = true;
break;
}
} else if (filterField.indexOf(filter.value) < 0) {
matches = false;
} else if (filterField.indexOf(filter.value) > -1) {
matches = true;
break;
}
}
@ -1393,12 +1394,23 @@ function parseFindArgs(self, args, caseSensitive, onTrack, cb, onFinish) {
}
var filters = [];
for (var i = 0; i < args.length; i += 2) {
var tagType = tagTypes[args[i].toLowerCase()];
if (!tagType) return cb(ERR_CODE_ARG, "\"" + args[i] + "\" is not known");
filters.push({
field: tagType.grooveTag,
value: args[i+1],
});
var tagsToSearch = [];
if (args[i].toLowerCase() === "any") {
// Special case the any key. Just search everything.
for (var tagType in tagTypes) {
tagsToSearch.push(tagTypes[tagType]);
}
} else {
var tagType = tagTypes[args[i].toLowerCase()];
if (!tagType) return cb(ERR_CODE_ARG, "\"" + args[i] + "\" is not known");
tagsToSearch.push(tagType);
}
for (var j = 0; j < tagsToSearch.length; j++) {
filters.push({
field: tagsToSearch[j].grooveTag,
value: args[i+1],
});
}
forEachMatchingTrack(self, filters, caseSensitive, onTrack);
}
onFinish();