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:
parent
6745455a74
commit
9a24b61d81
1 changed files with 24 additions and 12 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in a new issue