Skip to content

Commit

Permalink
fix: zip downloads, transfer visual state
Browse files Browse the repository at this point in the history
  • Loading branch information
Dwynr committed Dec 9, 2024
1 parent 69e9459 commit 819657c
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 100 deletions.
3 changes: 2 additions & 1 deletion locales/de/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,8 @@
"error": "Fehler",
"stopped": "Gestoppt",
"paused": "Pausiert",
"creatingDirectories": "Verzeichnisse werden erstellt"
"creatingDirectories": "Verzeichnisse werden erstellt",
"finishing": "Fertigstellung"
},
"pause": "Pausieren",
"resume": "Fortsetzen",
Expand Down
3 changes: 2 additions & 1 deletion locales/en/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,8 @@
"error": "Error",
"stopped": "Stopped",
"paused": "Paused",
"creatingDirectories": "Creating directories"
"creatingDirectories": "Creating directories",
"finishing": "Finishing"
},
"pause": "Pause",
"resume": "Resume",
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"@emoji-mart/react": "^1.1.1",
"@filen/desktop": "^3.0.38",
"@filen/network-drive": "^0.9.39",
"@filen/sdk": "^0.1.189",
"@filen/sdk": "^0.1.191",
"@filen/sync": "^0.1.91",
"@radix-ui/react-alert-dialog": "^1.0.5",
"@radix-ui/react-avatar": "^1.0.4",
Expand Down
15 changes: 13 additions & 2 deletions src/components/transfers/transfer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ export const TransferActions = memo(
</>
) : (
<>
{progressNormalized < 95 && (
{progressNormalized < 95 ? (
<>
{state === "paused" ? (
<Button
Expand Down Expand Up @@ -168,7 +168,18 @@ export const TransferActions = memo(
/>
</Button>
</>
)}
) : state !== "finished" && state !== "paused" && state !== "stopped" ? (
<Badge
variant="secondary"
className="items-center gap-2"
>
<Loader
className="animate-spin-medium"
size={14}
/>
{t("transfers.state.finishing")}
</Badge>
) : null}
</>
)}
</div>
Expand Down
178 changes: 87 additions & 91 deletions src/lib/worker/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1197,108 +1197,104 @@ export async function downloadMultipleFilesAndDirectoriesAsZip({
abortControllers[directoryId] = new AbortController()
}

await promiseAllChunked(
itemsWithPath.map(async item => {
if (item.type !== "file") {
return
}

await zipWriter.add(
item.path,
getSDK()
.cloud()
.downloadFileToReadableStream({
uuid: item.uuid,
bucket: item.bucket,
region: item.region,
version: item.version,
chunks: item.chunks,
size: item.size,
key: item.key,
pauseSignal: pauseSignals[directoryId],
abortSignal: abortControllers[directoryId]!.signal,
onProgressId: directoryId,
onQueued: () => {
if (didQueue) {
return
}

didQueue = true
for (const item of itemsWithPath.sort((a, b) => a.path.split("/").length - b.path.split("/").length)) {
if (item.type !== "file") {
continue
}

postMessageToMain({
type: "download",
data: {
type: "queued",
uuid: directoryId,
name: directoryName
await new Promise<void>((resolve, reject) => {
zipWriter
.add(
item.path,
getSDK()
.cloud()
.downloadFileToReadableStream({
uuid: item.uuid,
bucket: item.bucket,
region: item.region,
version: item.version,
chunks: item.chunks,
size: item.size,
key: item.key,
pauseSignal: pauseSignals[directoryId],
abortSignal: abortControllers[directoryId]!.signal,
onProgressId: directoryId,
onQueued: () => {
if (didQueue) {
return
}
})
},
onStarted: () => {
if (didStart) {
return
}

didStart = true
didQueue = true

postMessageToMain({
type: "download",
data: {
type: "started",
uuid: directoryId,
name: directoryName,
size: directorySize
}
})
},
onProgress: transferred => {
postMessageToMain({
type: "download",
data: {
type: "progress",
uuid: directoryId,
name: directoryName,
bytes: transferred
postMessageToMain({
type: "download",
data: {
type: "queued",
uuid: directoryId,
name: directoryName
}
})
},
onStarted: () => {
if (didStart) {
return
}
})
},
onError: async err => {
await zipWriter.close().catch(console.error)
await writer.abort(err).catch(console.error)

if (err instanceof DOMException && err.name === "AbortError") {
return
}
didStart = true

if (didError) {
return
}
postMessageToMain({
type: "download",
data: {
type: "started",
uuid: directoryId,
name: directoryName,
size: directorySize
}
})
},
onProgress: transferred => {
postMessageToMain({
type: "download",
data: {
type: "progress",
uuid: directoryId,
name: directoryName,
bytes: transferred
}
})
},
onError: async err => {
if (err instanceof DOMException && err.name === "AbortError") {
return
}

didError = true
postMessageToMain({
type: "download",
data: {
type: "error",
uuid: directoryId,
name: directoryName,
size: directorySize,
err
}
})

postMessageToMain({
type: "download",
data: {
type: "error",
uuid: directoryId,
name: directoryName,
size: directorySize,
err
}
})
delete pauseSignals[directoryId]
delete abortControllers[directoryId]

delete pauseSignals[directoryId]
delete abortControllers[directoryId]
}
}),
{
lastModDate: new Date(item.lastModified),
lastAccessDate: new Date(item.lastModified),
creationDate: new Date(item.lastModified)
}
)
reject(err)
}
}),
{
lastModDate: new Date(item.lastModified),
lastAccessDate: new Date(item.lastModified),
creationDate: new Date(item.creation ?? item.lastModified)
}
)
.then(() => resolve())
.catch(reject)
})
)
}

await zipWriter.close()

Expand Down

0 comments on commit 819657c

Please sign in to comment.