mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-01-23 14:48:13 -05:00
✨ Feature(config): auto configuration backup & fallback to avoid main process crash
ISSUES CLOSED: #568
This commit is contained in:
parent
eab014dc88
commit
32b8b976be
@ -1,7 +1,9 @@
|
|||||||
import {
|
import {
|
||||||
app,
|
app,
|
||||||
globalShortcut,
|
globalShortcut,
|
||||||
protocol
|
protocol,
|
||||||
|
dialog,
|
||||||
|
Notification
|
||||||
} from 'electron'
|
} from 'electron'
|
||||||
import {
|
import {
|
||||||
createProtocol,
|
createProtocol,
|
||||||
@ -75,6 +77,14 @@ class LifeCycle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (global.notificationList?.length > 0) {
|
||||||
|
while (global.notificationList.length) {
|
||||||
|
const option = global.notificationList.pop()
|
||||||
|
const notice = new Notification(option!)
|
||||||
|
notice.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
private onRunning () {
|
private onRunning () {
|
||||||
|
55
src/universal/datastore/dbChecker.ts
Normal file
55
src/universal/datastore/dbChecker.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import fs from 'fs-extra'
|
||||||
|
import path from 'path'
|
||||||
|
import { app } from 'electron'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
|
const errorMsg = {
|
||||||
|
broken: 'PicGo 配置文件损坏,已经恢复为默认配置',
|
||||||
|
brokenButBackup: 'PicGo 配置文件损坏,已经恢复为备份配置'
|
||||||
|
}
|
||||||
|
|
||||||
|
function dbChecker () {
|
||||||
|
if (process.type !== 'renderer') {
|
||||||
|
if (!global.notificationList) global.notificationList = []
|
||||||
|
const STORE_PATH = app.getPath('userData')
|
||||||
|
const configFilePath = path.join(STORE_PATH, 'data.json')
|
||||||
|
const configFileBackupPath = path.join(STORE_PATH, 'data.bak.json')
|
||||||
|
if (!fs.existsSync(configFilePath)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let configFile: string = ''
|
||||||
|
let optionsTpl = {
|
||||||
|
title: '注意',
|
||||||
|
body: ''
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
configFile = fs.readFileSync(configFilePath, { encoding: 'utf-8' })
|
||||||
|
JSON.parse(configFile)
|
||||||
|
} catch (e) {
|
||||||
|
fs.unlinkSync(configFilePath)
|
||||||
|
if (fs.existsSync(configFileBackupPath)) {
|
||||||
|
try {
|
||||||
|
configFile = fs.readFileSync(configFileBackupPath, { encoding: 'utf-8' })
|
||||||
|
JSON.parse(configFile)
|
||||||
|
fs.writeFileSync(configFilePath, configFile, { encoding: 'utf-8' })
|
||||||
|
const stats = fs.statSync(configFileBackupPath)
|
||||||
|
optionsTpl.body = `${errorMsg.brokenButBackup}\n备份文件版本:${dayjs(stats.mtime).format('YYYY-MM-DD HH:mm:ss')}`
|
||||||
|
global.notificationList.push(optionsTpl)
|
||||||
|
return
|
||||||
|
} catch (e) {
|
||||||
|
optionsTpl.body = errorMsg.broken
|
||||||
|
global.notificationList.push(optionsTpl)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
optionsTpl.body = errorMsg.broken
|
||||||
|
global.notificationList.push(optionsTpl)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fs.writeFileSync(configFileBackupPath, configFile, { encoding: 'utf-8' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
dbChecker
|
||||||
|
}
|
@ -5,6 +5,7 @@ import FileSync from 'lowdb/adapters/FileSync'
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import { remote, app } from 'electron'
|
import { remote, app } from 'electron'
|
||||||
|
import { dbChecker } from './dbChecker'
|
||||||
|
|
||||||
const APP = process.type === 'renderer' ? remote.app : app
|
const APP = process.type === 'renderer' ? remote.app : app
|
||||||
const STORE_PATH = APP.getPath('userData')
|
const STORE_PATH = APP.getPath('userData')
|
||||||
@ -15,6 +16,8 @@ if (process.type !== 'renderer') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbChecker()
|
||||||
|
|
||||||
class DB {
|
class DB {
|
||||||
private db: Datastore.LowdbSync<Datastore.AdapterSync>
|
private db: Datastore.LowdbSync<Datastore.AdapterSync>
|
||||||
constructor () {
|
constructor () {
|
||||||
|
1
src/universal/types/electron.d.ts
vendored
1
src/universal/types/electron.d.ts
vendored
@ -27,6 +27,7 @@ declare global {
|
|||||||
interface Global {
|
interface Global {
|
||||||
PICGO_GUI_VERSION: string
|
PICGO_GUI_VERSION: string
|
||||||
PICGO_CORE_VERSION: string
|
PICGO_CORE_VERSION: string
|
||||||
|
notificationList: IAppNotification[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
src/universal/types/types.d.ts
vendored
6
src/universal/types/types.d.ts
vendored
@ -279,3 +279,9 @@ interface IUpYunConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ILoggerType = string | Error | boolean | number | undefined
|
type ILoggerType = string | Error | boolean | number | undefined
|
||||||
|
|
||||||
|
interface IAppNotification {
|
||||||
|
title: string
|
||||||
|
body: string
|
||||||
|
icon?: string
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user