476 lines
16 KiB
JavaScript
Raw Normal View History

2024-10-25 18:09:59 +08:00
/* eslint-disable no-param-reassign */
2024-10-23 09:14:01 +08:00
import response from './response';
import moduleHelper from './module-helper';
import { cacheArrayBuffer, formatJsonStr, formatResponse } from './utils';
import { fileInfoHandler, fileInfoType, responseWrapper } from './file-info';
function runMethod(method, option, callbackId, isString = false) {
try {
const fs = wx.getFileSystemManager();
let config;
if (typeof option === 'string') {
config = formatJsonStr(option);
}
else {
config = option;
}
if (method === 'readZipEntry' && !config.encoding) {
config.encoding = 'utf-8';
console.error('fs.readZipEntry不支持读取ArrayBuffer已改为utf-8');
}
fs[method]({
...config,
success(res) {
let returnRes = '';
if (method === 'read') {
cacheArrayBuffer(callbackId, res.arrayBuffer);
returnRes = JSON.stringify({
bytesRead: res.bytesRead,
arrayBufferLength: res.arrayBuffer?.byteLength ?? 0,
});
}
else if (method === 'readCompressedFile') {
cacheArrayBuffer(callbackId, res.data);
returnRes = JSON.stringify({
arrayBufferLength: res.data?.byteLength ?? 0,
});
}
else if (method === 'readFile') {
if (config.encoding) {
returnRes = JSON.stringify({
stringData: res.data || '',
});
}
else {
cacheArrayBuffer(callbackId, res.data);
returnRes = JSON.stringify({
arrayBufferLength: res.data?.byteLength ?? 0,
});
}
}
else {
returnRes = JSON.stringify(res);
}
// console.log(`fs.${method} success:`, res);
moduleHelper.send('FileSystemManagerCallback', JSON.stringify({
callbackId, type: 'success', res: returnRes, method: isString ? `${method}_string` : method,
}));
},
fail(res) {
moduleHelper.send('FileSystemManagerCallback', JSON.stringify({
callbackId, type: 'fail', res: JSON.stringify(res), method: isString ? `${method}_string` : method,
}));
},
complete(res) {
moduleHelper.send('FileSystemManagerCallback', JSON.stringify({
callbackId, type: 'complete', res: JSON.stringify(res), method: isString ? `${method}_string` : method,
}));
},
});
}
catch (e) {
moduleHelper.send('FileSystemManagerCallback', JSON.stringify({
callbackId, type: 'complete', res: 'fail', method: isString ? `${method}_string` : method,
}));
}
}
export default {
WXGetUserDataPath() {
return wx.env.USER_DATA_PATH;
},
WXWriteFileSync(filePath, data, encoding) {
try {
const fs = wx.getFileSystemManager();
2024-10-25 18:09:59 +08:00
// @ts-ignore
2024-10-23 09:14:01 +08:00
fs.writeFileSync(filePath, data, encoding);
fileInfoHandler.addFileInfo(filePath, data);
}
catch (e) {
console.error(e);
if (e.message) {
return e.message;
}
return 'fail';
}
return 'ok';
},
WXAccessFileSync(filePath) {
try {
const fs = wx.getFileSystemManager();
fs.accessSync(filePath);
return 'access:ok';
}
catch (e) {
if (e.message) {
return e.message;
}
return 'fail';
}
},
WXAccessFile(path, s, f, c) {
const fs = wx.getFileSystemManager();
fs.access({
path,
...response.handleText(s, f, c),
});
},
WXCopyFileSync(src, dst) {
try {
const fs = wx.getFileSystemManager();
fs.copyFileSync(src, dst);
return 'copyFile:ok';
}
catch (e) {
console.error(e);
if (e.message) {
return e.message;
}
return 'fail';
}
},
WXCopyFile(srcPath, destPath, s, f, c) {
const fs = wx.getFileSystemManager();
fs.copyFile({
srcPath,
destPath,
...response.handleText(s, f, c),
});
},
WXUnlinkSync(filePath) {
try {
const fs = wx.getFileSystemManager();
fs.unlinkSync(filePath);
fileInfoHandler.removeFileInfo(filePath);
return 'unlink:ok';
}
catch (e) {
console.error(e);
if (e.message) {
return e.message;
}
return 'fail';
}
},
WXUnlink(filePath, s, f, c) {
const fs = wx.getFileSystemManager();
fs.unlink({
filePath,
...responseWrapper(response.handleText(s, f, c), { filePath, type: fileInfoType.remove }),
});
},
WXWriteFile(filePath, data, encoding, s, f, c) {
const fs = wx.getFileSystemManager();
fs.writeFile({
filePath,
data: data.buffer,
encoding,
...responseWrapper(response.handleTextLongBack(s, f, c), { filePath, data: data.buffer, type: fileInfoType.add }),
});
},
WXWriteStringFile(filePath, data, encoding, s, f, c) {
const fs = wx.getFileSystemManager();
fs.writeFile({
filePath,
data,
encoding,
...responseWrapper(response.handleTextLongBack(s, f, c), { filePath, data, type: fileInfoType.add }),
});
},
WXAppendFile(filePath, data, encoding, s, f, c) {
const fs = wx.getFileSystemManager();
fs.appendFile({
filePath,
data: data.buffer,
encoding,
...response.handleTextLongBack(s, f, c),
});
},
WXAppendStringFile(filePath, data, encoding, s, f, c) {
const fs = wx.getFileSystemManager();
fs.appendFile({
filePath,
data,
encoding,
...response.handleTextLongBack(s, f, c),
});
},
WXWriteBinFileSync(filePath, data, encoding) {
const fs = wx.getFileSystemManager();
try {
fs.writeFileSync(filePath, data.buffer, encoding);
fileInfoHandler.addFileInfo(filePath, data.buffer);
}
catch (e) {
console.error(e);
if (e.message) {
return e.message;
}
return 'fail';
}
return 'ok';
},
WXReadFile(option, callbackId) {
runMethod('readFile', option, callbackId);
},
WXReadFileSync(option) {
const fs = wx.getFileSystemManager();
const config = formatJsonStr(option);
try {
const { filePath } = config;
const res = fs.readFileSync(config.filePath, config.encoding, config.position, config.length);
if (!config.encoding && typeof res !== 'string') {
cacheArrayBuffer(filePath, res);
return `${res.byteLength}`;
}
return res;
}
catch (e) {
console.error(e);
if (e.message) {
return e.message;
}
return 'fail';
}
},
WXMkdir(dirPath, recursive, s, f, c) {
const fs = wx.getFileSystemManager();
fs.mkdir({
dirPath,
recursive: Boolean(recursive),
...response.handleText(s, f, c),
});
},
WXMkdirSync(dirPath, recursive) {
try {
const fs = wx.getFileSystemManager();
fs.mkdirSync(dirPath, Boolean(recursive));
return 'mkdir:ok';
}
catch (e) {
console.error(e);
if (e.message) {
return e.message;
}
return 'fail';
}
},
WXRmdir(dirPath, recursive, s, f, c) {
const fs = wx.getFileSystemManager();
fs.rmdir({
dirPath,
recursive: Boolean(recursive),
...response.handleText(s, f, c),
});
},
WXRmdirSync(dirPath, recursive) {
try {
const fs = wx.getFileSystemManager();
fs.rmdirSync(dirPath, Boolean(recursive));
return 'rmdirSync:ok';
}
catch (e) {
console.error(e);
if (e.message) {
return e.message;
}
return 'fail';
}
},
WXStat(conf, callbackId) {
const config = formatJsonStr(conf);
wx.getFileSystemManager().stat({
...config,
success(res) {
if (!Array.isArray(res.stats)) {
2024-10-25 18:09:59 +08:00
// @ts-ignore C#中特殊处理
2024-10-23 09:14:01 +08:00
res.one_stat = res.stats;
2024-10-25 18:09:59 +08:00
// @ts-ignore C#中特殊处理
2024-10-23 09:14:01 +08:00
res.stats = null;
}
moduleHelper.send('StatCallback', JSON.stringify({
callbackId,
type: 'success',
res: JSON.stringify(res),
}));
},
fail(res) {
moduleHelper.send('StatCallback', JSON.stringify({
callbackId,
type: 'fail',
res: JSON.stringify(res),
}));
},
complete(res) {
2024-10-25 18:09:59 +08:00
// @ts-ignore C#中特殊处理
2024-10-23 09:14:01 +08:00
if (!Array.isArray(res.stats)) {
2024-10-25 18:09:59 +08:00
// @ts-ignore C#中特殊处理
2024-10-23 09:14:01 +08:00
res.one_stat = res.stats;
2024-10-25 18:09:59 +08:00
// @ts-ignore C#中特殊处理
2024-10-23 09:14:01 +08:00
res.stats = null;
}
moduleHelper.send('StatCallback', JSON.stringify({
callbackId,
type: 'complete',
res: JSON.stringify(res),
}));
},
});
},
WX_FileSystemManagerClose(option, callbackId) {
runMethod('close', option, callbackId);
},
WX_FileSystemManagerFstat(option, callbackId) {
runMethod('fstat', option, callbackId);
},
WX_FileSystemManagerFtruncate(option, callbackId) {
runMethod('ftruncate', option, callbackId);
},
WX_FileSystemManagerGetFileInfo(option, callbackId) {
runMethod('getFileInfo', option, callbackId);
},
WX_FileSystemManagerGetSavedFileList(option, callbackId) {
runMethod('getSavedFileList', option, callbackId);
},
WX_FileSystemManagerOpen(option, callbackId) {
runMethod('open', option, callbackId);
},
WX_FileSystemManagerRead(option, data, callbackId) {
const config = formatJsonStr(option);
config.arrayBuffer = data.buffer;
runMethod('read', config, callbackId);
},
WX_FileSystemManagerReadCompressedFile(option, callbackId) {
runMethod('readCompressedFile', option, callbackId);
},
WX_FileSystemManagerReadZipEntry(option, callbackId) {
runMethod('readZipEntry', option, callbackId);
},
WX_FileSystemManagerReadZipEntryString(option, callbackId) {
runMethod('readZipEntry', option, callbackId, true);
},
WX_FileSystemManagerReaddir(option, callbackId) {
runMethod('readdir', option, callbackId);
},
WX_FileSystemManagerRemoveSavedFile(option, callbackId) {
runMethod('removeSavedFile', option, callbackId);
},
WX_FileSystemManagerRename(option, callbackId) {
runMethod('rename', option, callbackId);
},
WX_FileSystemManagerSaveFile(option, callbackId) {
runMethod('saveFile', option, callbackId);
},
WX_FileSystemManagerTruncate(option, callbackId) {
runMethod('truncate', option, callbackId);
},
WX_FileSystemManagerUnzip(option, callbackId) {
runMethod('unzip', option, callbackId);
},
WX_FileSystemManagerWrite(option, data, callbackId) {
const config = formatJsonStr(option);
config.data = data.buffer;
runMethod('write', config, callbackId);
},
WX_FileSystemManagerWriteString(option, callbackId) {
runMethod('write', option, callbackId, true);
},
WX_FileSystemManagerReaddirSync(dirPath) {
const fs = wx.getFileSystemManager();
try {
return JSON.stringify(fs.readdirSync(dirPath) || []);
}
catch (e) {
console.error(e);
return '[]';
}
},
WX_FileSystemManagerReadCompressedFileSync(option, callbackId) {
const fs = wx.getFileSystemManager();
const res = fs.readCompressedFileSync(formatJsonStr(option));
cacheArrayBuffer(callbackId, res);
return res.byteLength;
},
WX_FileSystemManagerAppendFileStringSync(filePath, data, encoding) {
const fs = wx.getFileSystemManager();
fs.appendFileSync(filePath, data, encoding);
},
WX_FileSystemManagerAppendFileSync(filePath, data, encoding) {
const fs = wx.getFileSystemManager();
fs.appendFileSync(filePath, data.buffer, encoding);
},
WX_FileSystemManagerRenameSync(oldPath, newPath) {
const fs = wx.getFileSystemManager();
fs.renameSync(oldPath, newPath);
return 'ok';
},
WX_FileSystemManagerReadSync(option, callbackId) {
const fs = wx.getFileSystemManager();
const res = fs.readSync(formatJsonStr(option));
cacheArrayBuffer(callbackId, res.arrayBuffer);
return JSON.stringify({
bytesRead: res.bytesRead,
arrayBufferLength: res.arrayBuffer?.byteLength ?? 0,
});
},
WX_FileSystemManagerFstatSync(option) {
const fs = wx.getFileSystemManager();
const res = fs.fstatSync(formatJsonStr(option));
formatResponse('Stats', res);
return JSON.stringify(res);
},
WX_FileSystemManagerStatSync(path, recursive) {
const fs = wx.getFileSystemManager();
const res = fs.statSync(path, recursive);
let resArray;
if (Array.isArray(res)) {
resArray = res;
}
else {
resArray = [res];
}
return JSON.stringify(resArray);
},
WX_FileSystemManagerWriteSync(option, data) {
const fs = wx.getFileSystemManager();
const optionConfig = formatJsonStr(option);
optionConfig.data = data.buffer;
const res = fs.writeSync(optionConfig);
return JSON.stringify({
mode: res.bytesWritten,
});
},
WX_FileSystemManagerWriteStringSync(option) {
const fs = wx.getFileSystemManager();
const res = fs.writeSync(formatJsonStr(option));
return JSON.stringify({
mode: res.bytesWritten,
});
},
WX_FileSystemManagerOpenSync(option) {
const fs = wx.getFileSystemManager();
return fs.openSync(formatJsonStr(option));
},
WX_FileSystemManagerSaveFileSync(tempFilePath, filePath) {
const fs = wx.getFileSystemManager();
return fs.saveFileSync(tempFilePath, filePath);
},
WX_FileSystemManagerCloseSync(option) {
const fs = wx.getFileSystemManager();
fs.closeSync(formatJsonStr(option));
return 'ok';
},
WX_FileSystemManagerFtruncateSync(option) {
const fs = wx.getFileSystemManager();
fs.ftruncateSync(formatJsonStr(option));
return 'ok';
},
WX_FileSystemManagerTruncateSync(option) {
const fs = wx.getFileSystemManager();
fs.truncateSync(formatJsonStr(option));
return 'ok';
},
};