feat(stage-tamagotchi): lock screen and unlock screen api
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
export * from './app'
|
||||
export * from './auto-updater'
|
||||
export * from './powerMonitor'
|
||||
export * from './screen'
|
||||
|
||||
export * from './window'
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import type EventEmitter from 'node:events'
|
||||
|
||||
import type { createContext } from '@moeru/eventa/adapters/electron/main'
|
||||
import type { BrowserWindow } from 'electron'
|
||||
|
||||
import { electronEvents } from '@proj-airi/electron-eventa'
|
||||
import { powerMonitor } from 'electron'
|
||||
|
||||
import { onAppBeforeQuit } from '../../libs/bootkit/lifecycle'
|
||||
|
||||
export function createPowerMonitorService(params: { context: ReturnType<typeof createContext>['context'], window: BrowserWindow }) {
|
||||
function onOff<EM extends EventEmitter, E extends string>(eventEmitter: EM, event: E, listener: Parameters<EM['on']>[1]) {
|
||||
eventEmitter.on(event, listener)
|
||||
onAppBeforeQuit(() => {
|
||||
eventEmitter.off(event, listener)
|
||||
})
|
||||
}
|
||||
|
||||
onOff(powerMonitor, 'suspend', () => params.context.emit(electronEvents.powerMonitor.suspended, undefined))
|
||||
onOff(powerMonitor, 'resume', () => params.context.emit(electronEvents.powerMonitor.resumed, undefined))
|
||||
onOff(powerMonitor, 'lock-screen', () => params.context.emit(electronEvents.powerMonitor.lockScreen, undefined))
|
||||
onOff(powerMonitor, 'unlock-screen', () => params.context.emit(electronEvents.powerMonitor.unlockScreen, undefined))
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import { isMacOS } from 'std-env'
|
||||
|
||||
import { createServerChannelService } from '../../services/airi/channel-server'
|
||||
import { createI18nService } from '../../services/airi/i18n'
|
||||
import { createAppService, createScreenService, createWindowService } from '../../services/electron'
|
||||
import { createAppService, createPowerMonitorService, createScreenService, createWindowService } from '../../services/electron'
|
||||
|
||||
export function toggleWindowShow(window?: BrowserWindow | null): void {
|
||||
if (!window) {
|
||||
@@ -99,6 +99,8 @@ export async function setupBaseWindowElectronInvokes(params: {
|
||||
createScreenService({ context: params.context, window: params.window })
|
||||
createWindowService({ context: params.context, window: params.window })
|
||||
createAppService({ context: params.context, window: params.window })
|
||||
createPowerMonitorService({ context: params.context, window: params.window })
|
||||
|
||||
await createI18nService({ context: params.context, window: params.window, i18n: params.i18n })
|
||||
|
||||
createServerChannelService({ serverChannel: params.serverChannel })
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { app } from './app'
|
||||
import { powerMonitorEvents } from './powerMonitor'
|
||||
import { screen } from './screen'
|
||||
import { systemPreferences } from './system-preferences'
|
||||
import { window } from './window'
|
||||
@@ -13,3 +14,7 @@ export const electron = {
|
||||
systemPreferences,
|
||||
app,
|
||||
}
|
||||
|
||||
export const electronEvents = {
|
||||
powerMonitor: powerMonitorEvents,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import { defineEventa } from '@moeru/eventa'
|
||||
|
||||
const eventSuspended = defineEventa('eventa:event:electron:app:suspended')
|
||||
const eventResumed = defineEventa('eventa:event:electron:app:resumed')
|
||||
const eventLockScreen = defineEventa('eventa:event:electron:app:lock-screen')
|
||||
const eventUnlockScreen = defineEventa('eventa:event:electron:app:unlock-screen')
|
||||
|
||||
export const powerMonitorEvents = {
|
||||
lockScreen: eventLockScreen,
|
||||
resumed: eventResumed,
|
||||
suspended: eventSuspended,
|
||||
unlockScreen: eventUnlockScreen,
|
||||
}
|
||||
@@ -9,4 +9,4 @@ export type {
|
||||
ResizeDirection,
|
||||
VibrancyType,
|
||||
} from './electron/index'
|
||||
export { electron } from './electron/index'
|
||||
export { electron, electronEvents } from './electron/index'
|
||||
|
||||
Reference in New Issue
Block a user