Improved reliability of direct to folder downloads.
This commit is contained in:
@@ -78,7 +78,7 @@ const filesystemdl = async (sel: SelectedItems, handle: FileSystemDirectoryHandl
|
|||||||
h = await h.getDirectoryHandle(dir.normalize('NFC'), { create: true })
|
h = await h.getDirectoryHandle(dir.normalize('NFC'), { create: true })
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to create directory', hdir, error)
|
console.error('Failed to create directory', hdir, error)
|
||||||
return
|
throw new Error(`Failed to create directory ${hdir}: ${error}`)
|
||||||
}
|
}
|
||||||
console.log('Created', hdir)
|
console.log('Created', hdir)
|
||||||
}
|
}
|
||||||
@@ -90,37 +90,42 @@ const filesystemdl = async (sel: SelectedItems, handle: FileSystemDirectoryHandl
|
|||||||
fileHandle = await h.getFileHandle(name, { create: true })
|
fileHandle = await h.getFileHandle(name, { create: true })
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to create file', rel, full, hdir + name, error)
|
console.error('Failed to create file', rel, full, hdir + name, error)
|
||||||
return
|
throw new Error(`Failed to create file ${hdir + name}: ${error}`)
|
||||||
}
|
}
|
||||||
const writable = await fileHandle.createWritable()
|
try {
|
||||||
const url = `/files/${rel}`
|
const writable = await fileHandle.createWritable()
|
||||||
console.log('Fetching', url)
|
const url = `/files/${rel}`
|
||||||
const res = await fetch(url)
|
console.log('Fetching', url)
|
||||||
if (!res.ok) {
|
const res = await fetch(url)
|
||||||
store.error = `Failed to download ${url}: ${res.status} ${res.statusText}`
|
if (!res.ok) {
|
||||||
throw new Error(`Failed to download ${url}: ${res.status} ${res.statusText}`)
|
store.error = `Failed to download ${url}: ${res.status} ${res.statusText}`
|
||||||
}
|
throw new Error(`Failed to download ${url}: ${res.status} ${res.statusText}`)
|
||||||
if (res.body) {
|
|
||||||
++store.dprogress.fileidx
|
|
||||||
const reader = res.body.getReader()
|
|
||||||
await writable.truncate(0)
|
|
||||||
store.error = "Direct download."
|
|
||||||
store.dprogress.tlast = Date.now()
|
|
||||||
while (true) {
|
|
||||||
const { value, done } = await reader.read()
|
|
||||||
if (done) break
|
|
||||||
await writable.write(value)
|
|
||||||
const now = Date.now()
|
|
||||||
const size = value.byteLength
|
|
||||||
store.dprogress.xfer += size
|
|
||||||
store.dprogress.filepos += size
|
|
||||||
store.dprogress.statbytes += size
|
|
||||||
store.dprogress.statdur += now - store.dprogress.tlast
|
|
||||||
store.dprogress.tlast = now
|
|
||||||
}
|
}
|
||||||
|
if (res.body) {
|
||||||
|
++store.dprogress.fileidx
|
||||||
|
const reader = res.body.getReader()
|
||||||
|
await writable.truncate(0)
|
||||||
|
store.error = "Direct download."
|
||||||
|
store.dprogress.tlast = Date.now()
|
||||||
|
while (true) {
|
||||||
|
const { value, done } = await reader.read()
|
||||||
|
if (done) break
|
||||||
|
await writable.write(value)
|
||||||
|
const now = Date.now()
|
||||||
|
const size = value.byteLength
|
||||||
|
store.dprogress.xfer += size
|
||||||
|
store.dprogress.filepos += size
|
||||||
|
store.dprogress.statbytes += size
|
||||||
|
store.dprogress.statdur += now - store.dprogress.tlast
|
||||||
|
store.dprogress.tlast = now
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await writable.close()
|
||||||
|
console.log('Saved', hdir + name)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to write file', hdir + name, error)
|
||||||
|
throw new Error(`Failed to write file ${hdir + name}: ${error}`)
|
||||||
}
|
}
|
||||||
await writable.close()
|
|
||||||
console.log('Saved', hdir + name)
|
|
||||||
}
|
}
|
||||||
statReset()
|
statReset()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user