Skip to content

Commit 0cdf215

Browse files
author
sheepzh
committed
Merge branch 'main' of github.com:sheepzh/timer
2 parents 0f8660f + 8d2bb3f commit 0cdf215

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

src/background/badge-text-manager.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
import TimerDatabase from "@db/timer-database"
9+
import whitelistHolder from "@service/components/whitelist-holder"
910
import optionService from "@service/option-service"
1011
import { extractHostname, isBrowserUrl } from "@util/pattern"
1112

@@ -18,9 +19,9 @@ export type BadgeLocation = {
1819
*/
1920
tabId: number
2021
/**
21-
* The host to gain the focus time, can be undefined or null
22+
* The url of tab
2223
*/
23-
host: string
24+
url: string
2425
}
2526

2627
function mill2Str(milliseconds: number) {
@@ -35,8 +36,12 @@ function mill2Str(milliseconds: number) {
3536
}
3637
}
3738

38-
function setBadgeText(milliseconds: number | undefined, tabId: number | undefined) {
39+
function setBadgeTextOfMills(milliseconds: number | undefined, tabId: number | undefined) {
3940
const text = milliseconds === undefined ? '' : mill2Str(milliseconds)
41+
setBadgeText(text, tabId)
42+
}
43+
44+
function setBadgeText(text: string, tabId: number | undefined) {
4045
chrome.browserAction?.setBadgeText?.({ text, tabId })
4146
}
4247

@@ -64,8 +69,7 @@ function findActiveTab(): Promise<BadgeLocation> {
6469
resolve(undefined)
6570
} else {
6671
const { url, id } = tabs[0]
67-
const host = extractHostname(url).host
68-
resolve({ tabId: id, host })
72+
resolve({ tabId: id, url })
6973
}
7074
})
7175
}))
@@ -76,9 +80,17 @@ async function updateFocus(badgeLocation?: BadgeLocation) {
7680
if (!badgeLocation) {
7781
return
7882
}
79-
const { host, tabId } = badgeLocation
83+
const { url, tabId } = badgeLocation
84+
if (!url || isBrowserUrl(url)) {
85+
return
86+
}
87+
const host = extractHostname(url)?.host
88+
if (whitelistHolder.contains(host)) {
89+
setBadgeText('W', tabId)
90+
return
91+
}
8092
const milliseconds = host ? (await timerDb.get(host, new Date())).focus : undefined
81-
setBadgeText(milliseconds, tabId)
93+
setBadgeTextOfMills(milliseconds, tabId)
8294
}
8395

8496
const ALARM_NAME = 'timer-badge-text-manager-alarm'
@@ -102,14 +114,16 @@ class BadgeTextManager {
102114
const option: Partial<timer.option.AllOption> = await optionService.getAllOption()
103115
this.pauseOrResumeAccordingToOption(!!option.displayBadgeText)
104116
optionService.addOptionChangeListener(({ displayBadgeText }) => this.pauseOrResumeAccordingToOption(displayBadgeText))
117+
whitelistHolder.addPostHandler(updateFocus)
105118
}
106119

107120
/**
108121
* Hide the badge text
109122
*/
110-
pause() {
123+
async pause() {
111124
this.isPaused = true
112-
setBadgeText(undefined, undefined)
125+
const tab = await findActiveTab()
126+
setBadgeText('P', tab?.tabId)
113127
}
114128

115129
/**

src/background/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { getGuidePageUrl } from "@util/constant/url"
1919
import MessageDispatcher from "./message-dispatcher"
2020
import initLimitProcesser from "./limit-processor"
2121
import initCsHandler from "./content-script-handler"
22-
import { isBrowserUrl } from "@util/pattern"
2322

2423
// Open the log of console
2524
openLog()
@@ -52,7 +51,7 @@ badgeTextManager.init()
5251

5352
// Listen to tab active changed
5453
new ActiveTabListener()
55-
.register(({ url, host, tabId }) => !isBrowserUrl(url) && badgeTextManager.forceUpdate({ host, tabId }))
54+
.register(({ url, tabId }) => badgeTextManager.forceUpdate({ url, tabId }))
5655
.listen()
5756

5857
// Collect the install time

src/service/components/whitelist-holder.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,29 @@ const whitelistDatabase = new WhitelistDatabase(chrome.storage.local)
1414
*/
1515
class WhitelistHolder {
1616
private whitelist: string[]
17+
private postHandlers: (() => void)[]
1718

1819
constructor() {
1920
const whitelistSetter = (whitelist: string[]) => this.whitelist = whitelist
2021
whitelistDatabase.selectAll().then(whitelistSetter)
21-
whitelistDatabase.addChangeListener(whitelistSetter)
22+
whitelistDatabase.addChangeListener((whitelist: string[]) => {
23+
whitelistSetter(whitelist)
24+
this.postHandlers.forEach(handler => handler())
25+
})
26+
this.postHandlers = []
27+
}
28+
29+
addPostHandler(handler: () => void) {
30+
this.postHandlers.push(handler)
2231
}
2332

2433
notContains(host: string): boolean {
2534
return !this.whitelist.includes(host)
2635
}
36+
37+
contains(host: string): boolean {
38+
return this.whitelist.includes(host)
39+
}
2740
}
2841

2942
export default new WhitelistHolder()

0 commit comments

Comments
 (0)