Skip to content

Commit d37ed96

Browse files
committed
fix problem where directories with over 100 files weren't read correctly
1 parent 5a845be commit d37ed96

9 files changed

+199
-101
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## 4.7.1
4+
5+
- Fix problem where directories with over 100 files weren't read correctly.
6+
7+
38
## 4.7.0
49

510
- Add support for [chunked uploads](https://pqina.nl/filepond/docs/patterns/api/server/#process-chunks). Thanks to Ryan Olson (@ams-ryanolson) Arctic Media for donating the funds to build this.

dist/filepond.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* FilePond 4.7.0
2+
* FilePond 4.7.1
33
* Licensed under MIT, https://opensource.org/licenses/MIT/
44
* Please visit https://pqina.nl/filepond/ for details.
55
*/

dist/filepond.esm.js

+57-29
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* FilePond 4.7.0
2+
* FilePond 4.7.1
33
* Licensed under MIT, https://opensource.org/licenses/MIT/
44
* Please visit https://pqina.nl/filepond/ for details.
55
*/
@@ -6845,16 +6845,18 @@ const getFiles = dataTransfer =>
68456845
}
68466846

68476847
// done!
6848-
Promise.all(promisedFiles).then(returendFileGroups => {
6849-
// flatten groups
6850-
const files = [];
6851-
returendFileGroups.forEach(group => {
6852-
files.push.apply(files, group);
6853-
});
6848+
Promise.all(promisedFiles)
6849+
.then(returnedFileGroups => {
6850+
// flatten groups
6851+
const files = [];
6852+
returnedFileGroups.forEach(group => {
6853+
files.push.apply(files, group);
6854+
});
68546855

6855-
// done (filter out empty files)!
6856-
resolve(files.filter(file => file));
6857-
});
6856+
// done (filter out empty files)!
6857+
resolve(files.filter(file => file));
6858+
})
6859+
.catch(console.error);
68586860
});
68596861

68606862
const isFileSystemItem = item => {
@@ -6870,7 +6872,9 @@ const isFileSystemItem = item => {
68706872
const getFilesFromItem = item =>
68716873
new Promise((resolve, reject) => {
68726874
if (isDirectoryEntry(item)) {
6873-
getFilesInDirectory(getAsEntry(item)).then(resolve);
6875+
getFilesInDirectory(getAsEntry(item))
6876+
.then(resolve)
6877+
.catch(reject);
68746878
return;
68756879
}
68766880

@@ -6882,29 +6886,53 @@ const getFilesInDirectory = entry =>
68826886
const files = [];
68836887

68846888
// the total entries to read
6885-
let totalFilesFound = 0;
6889+
let dirCounter = 0;
6890+
let fileCounter = 0;
6891+
6892+
const resolveIfDone = () => {
6893+
if (fileCounter === 0 && dirCounter === 0) {
6894+
resolve(files);
6895+
}
6896+
};
68866897

68876898
// the recursive function
68886899
const readEntries = dirEntry => {
6900+
dirCounter++;
6901+
68896902
const directoryReader = dirEntry.createReader();
6890-
directoryReader.readEntries(entries => {
6891-
entries.forEach(entry => {
6892-
// recursively read more directories
6893-
if (entry.isDirectory) {
6894-
readEntries(entry);
6895-
} else {
6896-
// read as file
6897-
totalFilesFound++;
6898-
entry.file(file => {
6899-
files.push(correctMissingFileType(file));
6900-
6901-
if (totalFilesFound === files.length) {
6902-
resolve(files);
6903-
}
6904-
});
6903+
6904+
// directories are returned in batches, we need to process all batches before we're done
6905+
const readBatch = () => {
6906+
directoryReader.readEntries(entries => {
6907+
if (entries.length === 0) {
6908+
dirCounter--;
6909+
resolveIfDone();
6910+
return;
69056911
}
6906-
});
6907-
});
6912+
6913+
entries.forEach(entry => {
6914+
// recursively read more directories
6915+
if (entry.isDirectory) {
6916+
readEntries(entry);
6917+
} else {
6918+
// read as file
6919+
fileCounter++;
6920+
6921+
entry.file(file => {
6922+
files.push(correctMissingFileType(file));
6923+
fileCounter--;
6924+
resolveIfDone();
6925+
});
6926+
}
6927+
});
6928+
6929+
// try to get next batch of files
6930+
readBatch();
6931+
}, reject);
6932+
};
6933+
6934+
// read first batch of files
6935+
readBatch();
69086936
};
69096937

69106938
// go!

dist/filepond.esm.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/filepond.js

+60-32
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* FilePond 4.7.0
2+
* FilePond 4.7.1
33
* Licensed under MIT, https://opensource.org/licenses/MIT/
44
* Please visit https://pqina.nl/filepond/ for details.
55
*/
@@ -9573,20 +9573,22 @@
95739573
}
95749574

95759575
// done!
9576-
Promise.all(promisedFiles).then(function(returendFileGroups) {
9577-
// flatten groups
9578-
var files = [];
9579-
returendFileGroups.forEach(function(group) {
9580-
files.push.apply(files, group);
9581-
});
9576+
Promise.all(promisedFiles)
9577+
.then(function(returnedFileGroups) {
9578+
// flatten groups
9579+
var files = [];
9580+
returnedFileGroups.forEach(function(group) {
9581+
files.push.apply(files, group);
9582+
});
95829583

9583-
// done (filter out empty files)!
9584-
resolve(
9585-
files.filter(function(file) {
9586-
return file;
9587-
})
9588-
);
9589-
});
9584+
// done (filter out empty files)!
9585+
resolve(
9586+
files.filter(function(file) {
9587+
return file;
9588+
})
9589+
);
9590+
})
9591+
.catch(console.error);
95909592
});
95919593
};
95929594

@@ -9603,7 +9605,9 @@
96039605
var getFilesFromItem = function getFilesFromItem(item) {
96049606
return new Promise(function(resolve, reject) {
96059607
if (isDirectoryEntry(item)) {
9606-
getFilesInDirectory(getAsEntry(item)).then(resolve);
9608+
getFilesInDirectory(getAsEntry(item))
9609+
.then(resolve)
9610+
.catch(reject);
96079611
return;
96089612
}
96099613

@@ -9616,29 +9620,53 @@
96169620
var files = [];
96179621

96189622
// the total entries to read
9619-
var totalFilesFound = 0;
9623+
var dirCounter = 0;
9624+
var fileCounter = 0;
9625+
9626+
var resolveIfDone = function resolveIfDone() {
9627+
if (fileCounter === 0 && dirCounter === 0) {
9628+
resolve(files);
9629+
}
9630+
};
96209631

96219632
// the recursive function
96229633
var readEntries = function readEntries(dirEntry) {
9634+
dirCounter++;
9635+
96239636
var directoryReader = dirEntry.createReader();
9624-
directoryReader.readEntries(function(entries) {
9625-
entries.forEach(function(entry) {
9626-
// recursively read more directories
9627-
if (entry.isDirectory) {
9628-
readEntries(entry);
9629-
} else {
9630-
// read as file
9631-
totalFilesFound++;
9632-
entry.file(function(file) {
9633-
files.push(correctMissingFileType(file));
96349637

9635-
if (totalFilesFound === files.length) {
9636-
resolve(files);
9637-
}
9638-
});
9638+
// directories are returned in batches, we need to process all batches before we're done
9639+
var readBatch = function readBatch() {
9640+
directoryReader.readEntries(function(entries) {
9641+
if (entries.length === 0) {
9642+
dirCounter--;
9643+
resolveIfDone();
9644+
return;
96399645
}
9640-
});
9641-
});
9646+
9647+
entries.forEach(function(entry) {
9648+
// recursively read more directories
9649+
if (entry.isDirectory) {
9650+
readEntries(entry);
9651+
} else {
9652+
// read as file
9653+
fileCounter++;
9654+
9655+
entry.file(function(file) {
9656+
files.push(correctMissingFileType(file));
9657+
fileCounter--;
9658+
resolveIfDone();
9659+
});
9660+
}
9661+
});
9662+
9663+
// try to get next batch of files
9664+
readBatch();
9665+
}, reject);
9666+
};
9667+
9668+
// read first batch of files
9669+
readBatch();
96429670
};
96439671

96449672
// go!

dist/filepond.min.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/filepond.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "filepond",
3-
"version": "4.7.0",
3+
"version": "4.7.1",
44
"description": "FilePond, Where files go to stretch their bits.",
55
"license": "MIT",
66
"author": {

0 commit comments

Comments
 (0)