Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 1x 1x 2x 1x 3x 2x 1x 1x 1x 1x 1x 1x | import type { TimerPhase, TimerSnapshot } from '@shared/types'
export const WINDOWS_APP_USER_MODEL_ID = 'com.focusflow.timer'
export interface NotificationOptionsLike {
title: string
body: string
icon?: string
}
export interface NotificationInstanceLike {
show(): void
on?(event: 'click', listener: () => void): unknown
}
export type NotificationFactoryLike = (options: NotificationOptionsLike) => NotificationInstanceLike
export const resolveWindowsAppUserModelId = (isPackaged: boolean, execPath: string): string =>
isPackaged ? WINDOWS_APP_USER_MODEL_ID : execPath
export const buildTimerFinishedNotificationCopy = (
phase: TimerPhase
): Pick<NotificationOptionsLike, 'title' | 'body'> => {
if (phase === 'focus') {
return {
title: '专注结束',
body: '该休息一下了。'
}
}
return {
title: '休息结束',
body: '准备开始下一轮专注。'
}
}
export const showTimerFinishedNotification = ({
snapshot,
iconPath,
createNotification,
onClick
}: {
snapshot: Pick<TimerSnapshot, 'phase'>
iconPath: string
createNotification: NotificationFactoryLike
onClick?: () => void
}): void => {
const notification = createNotification({
...buildTimerFinishedNotificationCopy(snapshot.phase),
icon: iconPath
})
Eif (onClick && typeof notification.on === 'function') {
notification.on('click', onClick)
}
notification.show()
}
|