Commit 60c97054 authored by John Pogas's avatar John Pogas Committed by Julien Fontanet

fix(readdir): read all items (#50)

Fixes #49

Readdir only lists 510 items. This fix returns the full directory listing.
parent 5687d375
...@@ -17,28 +17,76 @@ var SMB2Request = SMB2Forge.request; ...@@ -17,28 +17,76 @@ var SMB2Request = SMB2Forge.request;
module.exports = function readdir(path, cb) { module.exports = function readdir(path, cb) {
var connection = this; var connection = this;
// SMB2 open directory function queryDirectory(filesBatch, file, connection, cb) {
SMB2Request('open', { path: path }, connection, function(err, file) { SMB2Request('query_directory', file, connection, function(err, files) {
if (err) cb && cb(err); if (err) {
// SMB2 query directory if(err.code === 'STATUS_NO_MORE_FILES') {
else cb(null, filesBatch);
SMB2Request('query_directory', file, connection, function(err, files) { } else {
SMB2Request('close', file, connection, function() { cb(err);
if (err) cb && cb(err); }
// SMB2 close directory
else } else {
cb && filesBatch.push(
cb( files
null, .map(function(v) {
files // get the filename only
.map(function(v) { return v.Filename;
return v.Filename; })
}) // get the filename only .filter(function(v) {
.filter(function(v) { // remove '.' and '..' values
return v !== '.' && v !== '..'; return v !== '.' && v !== '..';
}) // remove '.' and '..' values })
); );
}); queryDirectory(filesBatch, file, connection, cb);
}); }
});
}
function openDirectory(path, connection, cb) {
SMB2Request('open', { path: path }, connection, function(err, file) {
if (err) {
cb(err);
} else {
return cb(null, file);
}
});
}
function closeDirectory(file, connection, cb) {
// SMB2 query directory
SMB2Request('close', file, connection, function(err, res) {
if (err) {
if(err.code !== 'STATUS_FILE_CLOSED') {
cb(err);
}
}
// SMB2 close directory
cb(null, res);
});
}
openDirectory(path, connection, function(err, file) {
var totalFiles = [];
var filesBatch = [];
if (err) {
cb(err);
} else {
queryDirectory(filesBatch, file, connection, function(err, file) {
if (err) {
cb(err);
} else {
closeDirectory(file, connection, function(err, file) {
if (err) {
cb(err);
} else {
totalFiles = [].concat(...filesBatch);
cb(null, totalFiles);
}
});
}
})
}
}); });
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment