* start of settings types Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * add validator Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * start of settings in rust Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix wasm Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix wasm Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * more tests Signed-off-by: Jess Frazelle <github@jessfraz.com> * derive docs Signed-off-by: Jess Frazelle <github@jessfraz.com> * configuration Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * read and write functions with migration Signed-off-by: Jess Frazelle <github@jessfraz.com> * make more dry Signed-off-by: Jess Frazelle <github@jessfraz.com> * more parsing of app settings Signed-off-by: Jess Frazelle <github@jessfraz.com> * more things Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup Signed-off-by: Jess Frazelle <github@jessfraz.com> * trim end Signed-off-by: Jess Frazelle <github@jessfraz.com> * project settings Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup tauri commands Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * refactor Signed-off-by: Jess Frazelle <github@jessfraz.com> * refactor Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * change to files Signed-off-by: Jess Frazelle <github@jessfraz.com> * better Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup more Signed-off-by: Jess Frazelle <github@jessfraz.com> * get rid of dead code Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixed Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup some more shit Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * add validation Signed-off-by: Jess Frazelle <github@jessfraz.com> * validation Signed-off-by: Jess Frazelle <github@jessfraz.com> * validate Signed-off-by: Jess Frazelle <github@jessfraz.com> * validate Signed-off-by: Jess Frazelle <github@jessfraz.com> * clippuy Signed-off-by: Jess Frazelle <github@jessfraz.com> * clippuy Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix; Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
84 lines
2.1 KiB
TypeScript
84 lines
2.1 KiB
TypeScript
import { readFile, exists as tauriExists } from '@tauri-apps/plugin-fs'
|
|
import { isTauri } from 'lib/isTauri'
|
|
import { join } from '@tauri-apps/api/path'
|
|
import { readDirRecursive } from 'lib/tauri'
|
|
|
|
/// FileSystemManager is a class that provides a way to read files from the local file system.
|
|
/// It assumes that you are in a project since it is solely used by the std lib
|
|
/// when executing code.
|
|
class FileSystemManager {
|
|
private _dir: string | null = null
|
|
|
|
get dir() {
|
|
if (this._dir === null) {
|
|
throw new Error('current project dir is not set')
|
|
}
|
|
|
|
return this._dir
|
|
}
|
|
|
|
set dir(dir: string) {
|
|
this._dir = dir
|
|
}
|
|
|
|
readFile(path: string): Promise<Uint8Array | void> {
|
|
// Using local file system only works from Tauri.
|
|
if (!isTauri()) {
|
|
throw new Error(
|
|
'This function can only be called from a Tauri application'
|
|
)
|
|
}
|
|
|
|
return join(this.dir, path)
|
|
.catch((error) => {
|
|
throw new Error(`Error reading file: ${error}`)
|
|
})
|
|
.then((file) => {
|
|
return readFile(file)
|
|
})
|
|
}
|
|
|
|
exists(path: string): Promise<boolean | void> {
|
|
// Using local file system only works from Tauri.
|
|
if (!isTauri()) {
|
|
throw new Error(
|
|
'This function can only be called from a Tauri application'
|
|
)
|
|
}
|
|
|
|
return join(this.dir, path)
|
|
.catch((error) => {
|
|
throw new Error(`Error checking file exists: ${error}`)
|
|
})
|
|
.then((file) => {
|
|
return tauriExists(file)
|
|
})
|
|
}
|
|
|
|
getAllFiles(path: string): Promise<string[] | void> {
|
|
// Using local file system only works from Tauri.
|
|
if (!isTauri()) {
|
|
throw new Error(
|
|
'This function can only be called from a Tauri application'
|
|
)
|
|
}
|
|
|
|
return join(this.dir, path)
|
|
.catch((error) => {
|
|
throw new Error(`Error joining dir: ${error}`)
|
|
})
|
|
.then((p) => {
|
|
readDirRecursive(p)
|
|
.catch((error) => {
|
|
throw new Error(`Error reading dir: ${error}`)
|
|
})
|
|
|
|
.then((files) => {
|
|
return files.map((file) => file.path)
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
export const fileSystemManager = new FileSystemManager()
|