feat: sync mixly root files and common folder
This commit is contained in:
161
mixly/common/modules/mixly-modules/web/fs.js
Normal file
161
mixly/common/modules/mixly-modules/web/fs.js
Normal file
@@ -0,0 +1,161 @@
|
||||
goog.loadJs('web', () => {
|
||||
|
||||
goog.require('workerpool');
|
||||
goog.require('Mixly.Web');
|
||||
goog.provide('Mixly.Web.FS');
|
||||
|
||||
const { FS } = Mixly.Web;
|
||||
|
||||
FS.pool = workerpool.pool('../common/modules/mixly-modules/workers/web/file-system-access.js', {
|
||||
workerOpts: {
|
||||
name: 'fileSystemAccess'
|
||||
},
|
||||
workerType: 'web'
|
||||
});
|
||||
|
||||
FS.showOpenFilePicker = async () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
FS.showDirectoryPicker = async () => {
|
||||
const directoryHandle = await window.showDirectoryPicker({ mode: 'readwrite' });
|
||||
const permissionStatus = await directoryHandle.requestPermission({ mode: 'readwrite' });
|
||||
if (permissionStatus !== 'granted') {
|
||||
throw new Error('readwrite access to directory not granted');
|
||||
}
|
||||
await FS.pool.exec('addFileSystemHandler', [directoryHandle]);
|
||||
return directoryHandle;
|
||||
}
|
||||
|
||||
FS.showSaveFilePicker = async () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
FS.readFile = (path) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [data] = await FS.pool.exec('readFile', [path, 'utf8']);
|
||||
resolve(data);
|
||||
});
|
||||
}
|
||||
|
||||
FS.writeFile = (path, data) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [error, entries] = await FS.pool.exec('writeFile', [path, data, 'utf8']);
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(entries);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
FS.isFile = (path) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [_, stats] = await FS.pool.exec('stat', [path]);
|
||||
if (!stats) {
|
||||
resolve(false);
|
||||
return;
|
||||
}
|
||||
if (stats.mode === 33188) {
|
||||
resolve(true);
|
||||
} else {
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
FS.renameFile = (oldFilePath, newFilePath) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [error] = await FS.pool.exec('rename', [oldFilePath, newFilePath]);
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
FS.moveFile = (oldFilePath, newFilePath) => {
|
||||
return FS.renameFile(oldFilePath, newFilePath);
|
||||
}
|
||||
|
||||
FS.deleteFile = (filePath) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [error] = await FS.pool.exec('unlink', [filePath]);
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
FS.createDirectory = (folderPath) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [error] = await FS.pool.exec('mkdir', [folderPath, 0o777]);
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
FS.readDirectory = (path) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [error, entries] = await FS.pool.exec('readdir', [path]);
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(entries);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
FS.isDirectory = (path) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [_, stats] = await FS.pool.exec('stat', [path]);
|
||||
if (!stats) {
|
||||
resolve(false);
|
||||
return;
|
||||
}
|
||||
if (stats.mode === 33188) {
|
||||
resolve(false);
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
FS.isDirectoryEmpty = async (path) => {
|
||||
return !(await FS.readDirectory(path) ?? []).length;
|
||||
}
|
||||
|
||||
FS.moveDirectory = (oldFolderPath, newFolderPath) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
FS.copyDirectory = (oldFolderPath, newFolderPath) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
FS.deleteDirectory = (folderPath) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const [error] = await FS.pool.exec('rmdir', [folderPath]);
|
||||
if (!error) {
|
||||
resolve();
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user