fix: Windows操作系统,开着DS应用重启电脑后无法上网的问题说明 #109

pull/377/head
starknt 2024-10-18 07:10:51 +08:00
parent c68e504e69
commit 10de2465dd
3 changed files with 124 additions and 2 deletions

View File

@ -43,7 +43,8 @@
"sass-loader": "^10.0.4", "sass-loader": "^10.0.4",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-json-editor-fix-cn": "^1.4.3", "vue-json-editor-fix-cn": "^1.4.3",
"vue-router": "^3.4.8" "vue-router": "^3.4.8",
"@natmri/platform-napi": "0.0.8"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "^4.5.0", "@vue/cli-plugin-babel": "^4.5.0",

View File

@ -1,7 +1,8 @@
'use strict' 'use strict'
/* global __static */ /* global __static */
import path from 'path' import path from 'path'
import { app, protocol, BrowserWindow, Menu, Tray, ipcMain, dialog, powerMonitor, nativeImage, nativeTheme, globalShortcut } from 'electron' import { app, protocol, BrowserWindow, Menu, Tray, ipcMain, dialog, nativeImage, nativeTheme, globalShortcut } from 'electron'
import { powerMonitor } from './background/powerMonitor'
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib' import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
import backend from './bridge/backend' import backend from './bridge/backend'
import DevSidecar from '@docmirror/dev-sidecar' import DevSidecar from '@docmirror/dev-sidecar'

View File

@ -0,0 +1,120 @@
import { powerMonitor as _powerMonitor } from 'electron/main'
import { createShutdownBlocker, destroyShutdownBlocker } from '@natmri/platform-napi'
class PowerMonitor {
_listeners = []
_shutdownCallback = null
addListener(event, listener) {
return this.on(event, listener)
}
removeListener(event, listener) {
return this.off(event, listener)
}
removeAllListeners(event) {
if(event === 'shutdown' && process.platform === 'win32') {
this._listeners = []
if(this._shutdownCallback) {
destroyShutdownBlocker()
this._shutdownCallback = null
}
} else {
return _powerMonitor.removeAllListeners(event)
}
}
on(event, listener) {
if(event === 'shutdown' && process.platform === 'win32') {
if(!this._shutdownCallback) {
this._shutdownCallback = async () => {
await Promise.all(this._listeners.map((fn) => fn()))
destroyShutdownBlocker()
}
createShutdownBlocker("正在停止 DevSidecar 代理", this._shutdownCallback)
}
this._listeners.push(listener)
} else {
return _powerMonitor.on(event, listener)
}
}
off(event, listener) {
if(event === 'shutdown' && process.platform === 'win32') {
this._listeners = this._listeners.filter((fn) => fn !== listener)
} else {
return _powerMonitor.off(event, listener)
}
}
once(event, listener) {
if(event === 'shutdown' && process.platform === 'win32') {
} else {
return _powerMonitor.once(event, listener)
}
}
emit(event, ...args) {
return _powerMonitor.emit(event, ...args)
}
eventNames() {
return _powerMonitor.eventNames()
}
getMaxListeners() {
return _powerMonitor.getMaxListeners()
}
listeners(event) {
return _powerMonitor.listeners(event)
}
rawListeners(event) {
return _powerMonitor.rawListeners(event)
}
listenerCount(event, listener) {
return _powerMonitor.listenerCount(event, listener)
}
/**
* @returns {boolean}
*/
get onBatteryPower() {
return _powerMonitor.onBatteryPower
}
/**
* @param {number} idleThreshold
* @returns {'active'|'idle'|'locked'|'unknown'}
*/
getSystemIdleState(idleThreshold) {
return _powerMonitor.getSystemIdleState(idleThreshold)
}
/**
* @returns {number}
*/
getSystemIdleTime() {
return _powerMonitor.getSystemIdleTime()
}
/**
* @returns {'unknown'|'nominal'|'fair'|'serious'|'critical'}
*/
getCurrentThermalState() {
return _powerMonitor.getCurrentThermalState()
}
/**
* @returns {boolean}
*/
isOnBatteryPower() {
return _powerMonitor.isOnBatteryPower()
}
}
export const powerMonitor = new PowerMonitor()