Commit ba13aab9 authored by tom's avatar tom

better types

parent 9201965e
...@@ -3,15 +3,15 @@ export async function getAllFileEntries(dataTransferItemList: DataTransferItemLi ...@@ -3,15 +3,15 @@ export async function getAllFileEntries(dataTransferItemList: DataTransferItemLi
const fileEntries: Array<FileSystemFileEntry> = []; const fileEntries: Array<FileSystemFileEntry> = [];
// Use BFS to traverse entire directory/file structure // Use BFS to traverse entire directory/file structure
const queue: Array<FileSystemEntry | FileSystemDirectoryEntry | null> = []; const queue: Array<FileSystemFileEntry | FileSystemDirectoryEntry> = [];
// Unfortunately dataTransferItemList is not iterable i.e. no forEach // Unfortunately dataTransferItemList is not iterable i.e. no forEach
for (let i = 0; i < dataTransferItemList.length; i++) { for (let i = 0; i < dataTransferItemList.length; i++) {
// Note webkitGetAsEntry a non-standard feature and may change // Note webkitGetAsEntry a non-standard feature and may change
// Usage is necessary for handling directories // Usage is necessary for handling directories
// + typescript types are kinda wrong - https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry // + typescript types are kinda wrong - https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry
const item = dataTransferItemList[i].webkitGetAsEntry(); const item = dataTransferItemList[i].webkitGetAsEntry() as FileSystemFileEntry | FileSystemDirectoryEntry | null;
queue.push(item); item && queue.push(item);
} }
while (queue.length > 0) { while (queue.length > 0) {
...@@ -28,7 +28,7 @@ export async function getAllFileEntries(dataTransferItemList: DataTransferItemLi ...@@ -28,7 +28,7 @@ export async function getAllFileEntries(dataTransferItemList: DataTransferItemLi
// Get all the entries (files or sub-directories) in a directory // Get all the entries (files or sub-directories) in a directory
// by calling readEntries until it returns empty array // by calling readEntries until it returns empty array
async function readAllDirectoryEntries(directoryReader: DirectoryReader) { async function readAllDirectoryEntries(directoryReader: DirectoryReader) {
const entries: Array<FileSystemEntry> = []; const entries: Array<FileSystemFileEntry> = [];
let readEntries = await readEntriesPromise(directoryReader); let readEntries = await readEntriesPromise(directoryReader);
while (readEntries && readEntries.length > 0) { while (readEntries && readEntries.length > 0) {
...@@ -41,10 +41,15 @@ async function readAllDirectoryEntries(directoryReader: DirectoryReader) { ...@@ -41,10 +41,15 @@ async function readAllDirectoryEntries(directoryReader: DirectoryReader) {
// Wrap readEntries in a promise to make working with readEntries easier // Wrap readEntries in a promise to make working with readEntries easier
// readEntries will return only some of the entries in a directory // readEntries will return only some of the entries in a directory
// e.g. Chrome returns at most 100 entries at a time // e.g. Chrome returns at most 100 entries at a time
async function readEntriesPromise(directoryReader: DirectoryReader): Promise<Array<FileSystemEntry> | undefined> { async function readEntriesPromise(directoryReader: DirectoryReader): Promise<Array<FileSystemFileEntry> | undefined> {
try { try {
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
directoryReader.readEntries(resolve, reject); directoryReader.readEntries(
(fileEntry) => {
resolve(fileEntry as Array<FileSystemFileEntry>);
},
reject,
);
}); });
} catch (err) {} } catch (err) {}
} }
......
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