MPD protocol: emit Last-Modified-Date for directories where appropriate

This commit is contained in:
Andrew Kelley 2014-02-27 16:38:25 -05:00
parent 667fd0c76f
commit 406eae55aa
2 changed files with 9 additions and 3 deletions

View file

@ -265,7 +265,7 @@ Player.prototype.refreshFilesIndex = function(dir, cb) {
var scannedDirs = {};
walker.on('directory', function(fullDirPath, stat, stop) {
var dirName = path.relative(self.musicDirectory, fullDirPath);
var dirEntry = getOrCreateDir(dirName);
var dirEntry = getOrCreateDir(dirName, stat);
scannedDirs[dirName] = dirEntry;
if (fullDirPath === dir) return; // ignore root search path
var baseName = path.basename(dirName);
@ -315,7 +315,7 @@ Player.prototype.refreshFilesIndex = function(dir, cb) {
cb();
});
function getOrCreateDir(dirName) {
function getOrCreateDir(dirName, stat) {
var dirEntry = self.dirs[dirName];
var fullDirPath = path.join(self.musicDirectory, dirName);
var changeTriggered = null;
@ -335,7 +335,10 @@ Player.prototype.refreshFilesIndex = function(dir, cb) {
entries: {},
dirEntries: {},
watcher: watcher,
mtime: stat && stat.mtime,
};
} else if (stat && dirEntry.mtime !== stat.mtime) {
dirEntry.mtime = stat.mtime;
}
return dirEntry;

View file

@ -406,7 +406,9 @@ var commands = {
}
for (baseName in dirEntry.dirEntries) {
relPath = path.join(dirName, baseName);
var childEntry = self.gb.player.dirs[relPath];
socket.write("directory: " + relPath + "\n");
socket.write("Last-Modified: " + new Date(childEntry.mtime).toISOString() + "\n");
}
cb();
},
@ -1017,7 +1019,7 @@ MpdServer.prototype.initialize = function(cb) {
};
socket.setEncoding('utf8');
socket.write("OK MPD 0.17.0\n");
socket.write("OK MPD 0.19.0\n");
socket.on('data', bufferStr);
socket.on('error', onError);
self.gb.player.on('volumeUpdate', onVolumeUpdate);
@ -1484,6 +1486,7 @@ function forEachListAll(self, socket, args, onTrack, cb) {
var baseName, relPath;
if (dirEntry.dirName) { // exclude root
socket.write("directory: " + dirEntry.dirName + "\n");
socket.write("Last-Modified: " + new Date(dirEntry.mtime).toISOString() + "\n");
}
var dbFilesByPath = self.gb.player.dbFilesByPath;
for (baseName in dirEntry.entries) {