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
	 Leo Vasanko
					Leo Vasanko