StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.5 KiB
51 lines
1.5 KiB
import window from '../global/window'
|
|
import FileReader from '../global/fileReader'
|
|
import FileWriterSync from './fileWriterSync'
|
|
|
|
export default class FileSystemSync {
|
|
constructor(type = window.TEMPORARY, size = Math.pow(1024, 3)) {
|
|
this.type = type
|
|
this.size = size
|
|
}
|
|
|
|
get root() {
|
|
if (this._root)
|
|
return this._root
|
|
|
|
const request = window.requestFileSystem ||
|
|
window.webkitRequestFileSystem
|
|
|
|
return new Promise((resolve, reject) =>
|
|
request(this.type, this.size, fs =>
|
|
resolve(this._root = Promise.resolve(fs.root)), reject))
|
|
}
|
|
|
|
async getFileEntry(path, config) {
|
|
const root = await this.root
|
|
return new Promise((resolve, reject) =>
|
|
root.getFile(path, config, resolve, reject))
|
|
}
|
|
|
|
async getDirectoryEntry(path, {create, exclusive = true} = {}) {
|
|
const root = await this.root
|
|
return new Promise((resolve, reject) =>
|
|
root.getDirectory(path, {create, exclusive}, resolve, reject))
|
|
}
|
|
|
|
async getFileReader(path) {
|
|
const entry = await this.getFileEntry(path, {create: false})
|
|
return new Promise((resolve, reject) => {
|
|
entry.file(file => {
|
|
const reader = new FileReader()
|
|
reader.onloadend = () => resolve(reader)
|
|
reader.readAsText(file)
|
|
}, reject)
|
|
})
|
|
}
|
|
|
|
async getFileWriter(path, {create = true, exclusive = false} = {}) {
|
|
const entry = await this.getFileEntry(path, {create, exclusive})
|
|
return new Promise((resolve, reject) => entry.createWriter((writer) =>
|
|
resolve(new FileWriterSync(writer, path)), reject))
|
|
}
|
|
}
|
|
|