Files
tauri-plugins-workspace/plugins/upload/guest-js/index.ts
T
Amr Bashir cf4d7d4e6c chore: adjust prettier config, .gitignore and use taplo to format toml files (#1728)
* chore: adjust prettier config, .gitignore and use taplo to format toml files

This brings the plugins-workspace repository to the same code style of the main tauri repo

* format toml

* ignore examples gen dir

* add .vscode/extensions.json

* remove packageManager field

* fmt

* fix audit

* taplo ignore permissions autogenerated files

* remove create dummy dist

* fix prettier workflow

* install fmt in prettier workflow

---------

Co-authored-by: Lucas Nogueira <lucas@tauri.app>
2024-09-04 08:54:23 -03:00

67 lines
1.5 KiB
TypeScript

// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
import { invoke, Channel } from '@tauri-apps/api/core'
interface ProgressPayload {
progress: number
total: number
}
type ProgressHandler = (progress: ProgressPayload) => void
async function upload(
url: string,
filePath: string,
progressHandler?: ProgressHandler,
headers?: Map<string, string>
): Promise<string> {
const ids = new Uint32Array(1)
window.crypto.getRandomValues(ids)
const id = ids[0]
const onProgress = new Channel<ProgressPayload>()
if (progressHandler) {
onProgress.onmessage = progressHandler
}
return await invoke('plugin:upload|upload', {
id,
url,
filePath,
headers: headers ?? {},
onProgress
})
}
/// Download file from given url.
///
/// Note that `filePath` currently must include the file name.
/// Furthermore the progress events will report a total length of 0 if the server did not sent a `Content-Length` header or if the file is compressed.
async function download(
url: string,
filePath: string,
progressHandler?: ProgressHandler,
headers?: Map<string, string>
): Promise<void> {
const ids = new Uint32Array(1)
window.crypto.getRandomValues(ids)
const id = ids[0]
const onProgress = new Channel<ProgressPayload>()
if (progressHandler) {
onProgress.onmessage = progressHandler
}
await invoke('plugin:upload|download', {
id,
url,
filePath,
headers: headers ?? {},
onProgress
})
}
export { download, upload }