fix: messages sync is not threadsafe (#784)

This commit is contained in:
Louis 2023-11-30 11:19:17 +07:00 committed by GitHub
parent 3b20d48de3
commit 70a8d03c9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 61 deletions

View File

@ -60,15 +60,11 @@ export function handleFsIPCs() {
ipcMain.handle(
'writeFile',
async (event, path: string, data: string): Promise<void> => {
return new Promise((resolve, reject) => {
fs.writeFile(join(userSpacePath, path), data, 'utf8', (err) => {
if (err) {
reject(err)
} else {
resolve()
}
})
})
try {
await fs.writeFileSync(join(userSpacePath, path), data, 'utf8')
} catch (err) {
console.error(`writeFile ${path} result: ${err}`)
}
}
)
@ -79,15 +75,11 @@ export function handleFsIPCs() {
* @returns A promise that resolves when the directory has been created.
*/
ipcMain.handle('mkdir', async (event, path: string): Promise<void> => {
return new Promise((resolve, reject) => {
fs.mkdir(join(userSpacePath, path), { recursive: true }, (err) => {
if (err) {
reject(err)
} else {
resolve()
}
})
})
try {
fs.mkdirSync(join(userSpacePath, path), { recursive: true })
} catch (err) {
console.error(`mkdir ${path} result: ${err}`)
}
})
/**
@ -97,15 +89,11 @@ export function handleFsIPCs() {
* @returns A promise that resolves when the directory is removed successfully.
*/
ipcMain.handle('rmdir', async (event, path: string): Promise<void> => {
return new Promise((resolve, reject) => {
fs.rm(join(userSpacePath, path), { recursive: true }, (err) => {
if (err) {
reject(err)
} else {
resolve()
}
})
})
try {
await fs.rmSync(join(userSpacePath, path), { recursive: true })
} catch (err) {
console.error(`rmdir ${path} result: ${err}`)
}
})
/**
@ -136,23 +124,11 @@ export function handleFsIPCs() {
* @returns A string indicating the result of the operation.
*/
ipcMain.handle('deleteFile', async (_event, filePath) => {
const fullPath = join(userSpacePath, filePath)
let result = 'NULL'
fs.unlink(fullPath, function (err) {
if (err && err.code == 'ENOENT') {
result = `File not exist: ${err}`
} else if (err) {
result = `File delete error: ${err}`
} else {
result = 'File deleted successfully'
}
console.debug(
`Delete file ${filePath} from ${fullPath} result: ${result}`
)
})
return result
try {
await fs.unlinkSync(join(userSpacePath, filePath))
} catch (err) {
console.error(`unlink ${filePath} result: ${err}`)
}
})
/**
@ -163,17 +139,19 @@ export function handleFsIPCs() {
* @returns A promise that resolves when the file has been written.
*/
ipcMain.handle('appendFile', async (_event, path: string, data: string) => {
return new Promise((resolve, reject) => {
fs.appendFile(join(userSpacePath, path), data, 'utf8', (err) => {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
try {
await fs.appendFileSync(join(userSpacePath, path), data, 'utf8')
} catch (err) {
console.error(`appendFile ${path} result: ${err}`)
}
})
/**
* Reads a file line by line.
* @param event - The event object.
* @param path - The path of the file to read.
* @returns A promise that resolves with the contents of the file.
*/
ipcMain.handle('readLineByLine', async (_event, path: string) => {
const fullPath = join(userSpacePath, path)

View File

@ -13,8 +13,7 @@
"renderer/**/*",
"build/*.{js,map}",
"build/**/*.{js,map}",
"core/pre-install",
"core/plugin-manager/facade"
"core/pre-install"
],
"asarUnpack": [
"core/pre-install"

View File

@ -1,4 +1,4 @@
import * as cn from './cloudNativeService'
import * as restAPI from './cloudNativeService'
import { EventEmitter } from './eventsService'
export const setupCoreServices = () => {
if (typeof window === 'undefined') {
@ -13,11 +13,7 @@ export const setupCoreServices = () => {
}
window.coreAPI = {}
window.coreAPI = window.electronAPI ?? {
invokePluginFunc: cn.invokePluginFunc,
downloadFile: cn.downloadFile,
deleteFile: cn.deleteFile,
appVersion: cn.appVersion,
openExternalUrl: cn.openExternalUrl,
...restAPI,
}
}
}