mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-05-06 20:42:57 +08:00
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import path from 'node:path'
|
|
|
|
import { getLogger } from '@core/utils/localLogger'
|
|
import { app } from 'electron'
|
|
|
|
const STORE_PATH = app.getPath('userData')
|
|
const LOG_PATH = path.join(STORE_PATH, 'piclist-gui-local.log')
|
|
|
|
const logger = getLogger(LOG_PATH, 'PicList')
|
|
|
|
// since the error may occur in picgo-core
|
|
// so we can't use the log from picgo
|
|
|
|
const handleProcessError = (error: Error | string) => {
|
|
logger('error', error)
|
|
}
|
|
|
|
process.on('uncaughtException', error => {
|
|
handleProcessError(error)
|
|
})
|
|
|
|
process.on('unhandledRejection', (error: any) => {
|
|
handleProcessError(error)
|
|
})
|
|
|
|
// acconrding to https://github.com/Molunerfinn/PicGo/commit/7363be798cfef11e980934e542817ff1d6c04389#diff-896d0db4fbd446798fbffec14d456b4cd98d4c72c46856c770a585fa7ab0926f
|
|
function bootstrapEPIPESuppression() {
|
|
let suppressing = false
|
|
function logEPIPEErrorOnce() {
|
|
if (suppressing) {
|
|
return
|
|
}
|
|
|
|
suppressing = true
|
|
handleProcessError('Detected EPIPE error; suppressing further EPIPE errors')
|
|
}
|
|
|
|
epipeBomb(process.stdout, logEPIPEErrorOnce)
|
|
epipeBomb(process.stderr, logEPIPEErrorOnce)
|
|
}
|
|
|
|
bootstrapEPIPESuppression()
|
|
|
|
function epipeBomb(stream: any, callback: any) {
|
|
if (stream === null) stream = process.stdout
|
|
if (callback === null) callback = process.exit
|
|
|
|
function epipeFilter(err: any) {
|
|
if (err.code === 'EPIPE') return callback()
|
|
|
|
// If there's more than one error handler (ie, us),
|
|
// then the error won't be bubbled up anyway
|
|
if (stream.listeners('error').length <= 1) {
|
|
stream.removeAllListeners() // Pretend we were never here
|
|
stream.emit('error', err) // Then emit as if we were never here
|
|
stream.on('error', epipeFilter) // Then reattach, ready for the next error!
|
|
}
|
|
}
|
|
|
|
stream.on('error', epipeFilter)
|
|
}
|