* Fix vite build (tauri build still broken) * Fix yarn builds with a couple of shortcuts * Fix file creation * Fix documentDir behavior * Got stream with default file * Clean up * Clean up * Use 'unstable'; fix devtools callsite The API changed a bit here, which forces us to use the unstable crate feature. The call to open devtools is also new; it's now on the webview not window. Signed-off-by: Paul R. Tagliamonte <paul@kittycad.io> * Bring back read_dir_recursive from v1 * Fix dates * More fixes, incl. conf files * cargo fmt * Add Updater plugin * Fix types * Fix isTauri detection and updater bootup * Schemas * Clean up * Disable devtools * Attempt at fixing builds * WIP Ubuntu dep * WIP Ubuntu dep * WIP keys in debug * Enable updater only on release builds * Reenable webtools on debug * No linux bundles * Typo * Attemp at fixing --bundles none * Manual tauri debug build * Empty commit to trigger the CI * Fix settings * Empty commit to trigger the CI * Merge branch 'main' into pierremtb/issue1349 * Add allow-create perm * tauri-driver no cap * Empty commit to trigger the CI * Clean up * Clean up * Migrate to tauri v2 Fixes #1349 * Fix fmt * Merge branch 'main' into pierremtb/issue1349 * Force BUILD_RELEASE: true * Bump tauri to new beta * Merge branch 'main' into pierremtb/issue1349 * Fix linux tests * Fix types * Add --verbose to tauri-action * Move --verbose to front * Back to tauri-driver@0.1.3 and single \ for win * Back to latest driver, and windows wip * Disable release conf temporarily * Rollback to 2.0.0-beta.2 * Rollback to 2.0.0-beta.1 * Move bundle to root for src-tauri/tauri.release.conf.json * All packages to latest (add http and shell to package.json) * Testing latest commit for tauri-action * Remove tauri action * Add cat * WIP * Update ci.yml * Disable release conf * Disable rust cache * Add tauri-action back for release builds * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * Update .codespellrc * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * Trigger CI * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * Fix type * Clean up * More clean up * Fix path concatenation with join * Attempt at fixing linux tests * Config clean up * Downgrade to tauri-driver@0.1.3 * Looks like tauri v2 is actually doing better with linux package names ah! * Change Linux apt packages * Increase wdio connectionRetryTimeout * Revert connectionRetryTimeout and bump tauri packages * Back to latest tauri-driver * Disable linux e2e tests * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * Trigger CI * Clean up * Update snapshots * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * Trigger CI * Remove @sentry/react * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * Rename migrated.json to desktop.json * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu) * Trigger CI * Change wasm url to http on Windows --------- Signed-off-by: Paul R. Tagliamonte <paul@kittycad.io> Co-authored-by: Paul R. Tagliamonte <paul@kittycad.io> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Adam Chalmers <adam.chalmers@zoo.dev>
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import { isTauri } from './isTauri'
|
|
import { deserialize_files } from '../wasm-lib/pkg/wasm_lib'
|
|
import { browserSaveFile } from './browserSaveFile'
|
|
import { save } from '@tauri-apps/plugin-dialog'
|
|
import { writeFile } from '@tauri-apps/plugin-fs'
|
|
|
|
import JSZip from 'jszip'
|
|
|
|
interface ModelingAppFile {
|
|
name: string
|
|
contents: number[]
|
|
}
|
|
|
|
const save_ = async (file: ModelingAppFile) => {
|
|
try {
|
|
if (isTauri()) {
|
|
// Open a dialog to save the file.
|
|
const filePath = await save({
|
|
defaultPath: file.name,
|
|
})
|
|
|
|
if (filePath === null) {
|
|
// The user canceled the save.
|
|
// Return early.
|
|
return
|
|
}
|
|
|
|
// Write the file.
|
|
await writeFile(filePath, new Uint8Array(file.contents))
|
|
} else {
|
|
// Download the file to the user's computer.
|
|
// Now we need to download the files to the user's downloads folder.
|
|
// Or the destination they choose.
|
|
// Iterate over the files.
|
|
// Create a new blob.
|
|
const blob = new Blob([new Uint8Array(file.contents)])
|
|
// Save the file.
|
|
await browserSaveFile(blob, file.name)
|
|
}
|
|
} catch (e) {
|
|
// TODO: do something real with the error.
|
|
console.log('export error', e)
|
|
}
|
|
}
|
|
|
|
// Saves files locally from an export call.
|
|
export async function exportSave(data: ArrayBuffer) {
|
|
// This converts the ArrayBuffer to a Rust equivalent Vec<u8>.
|
|
let uintArray = new Uint8Array(data)
|
|
|
|
const files: ModelingAppFile[] = deserialize_files(uintArray)
|
|
|
|
if (files.length > 1) {
|
|
let zip = new JSZip()
|
|
for (const file of files) {
|
|
zip.file(file.name, new Uint8Array(file.contents), { binary: true })
|
|
}
|
|
return zip.generateAsync({ type: 'array' }).then((contents) => {
|
|
return save_({ name: 'output.zip', contents })
|
|
})
|
|
} else {
|
|
return save_(files[0])
|
|
}
|
|
}
|