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

View file

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