feat(stage-tamagotchi): lock screen and unlock screen api

This commit is contained in:
Neko Ayaka
2026-03-30 03:27:47 +08:00
parent ec9436a173
commit 58401c8b6d
6 changed files with 46 additions and 3 deletions
@@ -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,
}
+1 -1
View File
@@ -9,4 +9,4 @@ export type {
ResizeDirection,
VibrancyType,
} from './electron/index'
export { electron } from './electron/index'
export { electron, electronEvents } from './electron/index'