52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
// Author: fruit.com.cn
|
|
|
|
const SEEN_KEY = 'transcode-notice-seen'
|
|
|
|
export const TRANSCODE_NOTICE_SEEN = 'transcode-notice-seen'
|
|
|
|
export interface NoticeCounts {
|
|
running: number
|
|
success: number
|
|
failed: number
|
|
}
|
|
|
|
/** 上次打开通知页时已经看过的数量。 */
|
|
export function readSeen(): NoticeCounts {
|
|
try {
|
|
const raw = localStorage.getItem(SEEN_KEY)
|
|
if (!raw) return { running: 0, success: 0, failed: 0 }
|
|
const data = JSON.parse(raw) as NoticeCounts
|
|
return {
|
|
running: Number(data.running || 0),
|
|
success: Number(data.success || 0),
|
|
failed: Number(data.failed || 0)
|
|
}
|
|
} catch {
|
|
return { running: 0, success: 0, failed: 0 }
|
|
}
|
|
}
|
|
|
|
/** 比上次查看多出来的数量,看过的不再计入角标。 */
|
|
export function unreadCounts(current: NoticeCounts): NoticeCounts {
|
|
const seen = readSeen()
|
|
return {
|
|
running: Math.max(0, current.running - seen.running),
|
|
success: Math.max(0, current.success - seen.success),
|
|
failed: Math.max(0, current.failed - seen.failed)
|
|
}
|
|
}
|
|
|
|
/** 把当前数量记为已读,并通知顶栏收起角标。 */
|
|
export function markTranscodeNoticeSeen(current: NoticeCounts) {
|
|
const seen = readSeen()
|
|
localStorage.setItem(
|
|
SEEN_KEY,
|
|
JSON.stringify({
|
|
running: Math.max(seen.running, current.running),
|
|
success: Math.max(seen.success, current.success),
|
|
failed: Math.max(seen.failed, current.failed)
|
|
})
|
|
)
|
|
window.dispatchEvent(new Event(TRANSCODE_NOTICE_SEEN))
|
|
}
|