Merge pull request #233 from toofar/mpd

Make MPD server more like MPD.
This commit is contained in:
Andrew Kelley 2014-04-27 20:06:10 -07:00
commit 656d3068c4

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,14 +1329,25 @@ 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();
if (filterField !== filter.value) {
matches = false;
break;
/* assumes:
* caseSensitive implies "find"
* !caseSensitive implies "search"
*/
if (caseSensitive) {
if (filterField === filter.value) {
matches = true;
break;
}
} else if (filterField.indexOf(filter.value) > -1) {
matches = true;
break;
}
}
if (matches) fn(track);
@ -1383,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();