Skip to content

Commit 4b4fb9f

Browse files
committed
Fix badge display error with mutiple monitors open (#398)
1 parent 1253c62 commit 4b4fb9f

File tree

3 files changed

+20
-11
lines changed

3 files changed

+20
-11
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@
3232
"@rsdoctor/webpack-plugin": "^0.4.13",
3333
"@swc/core": "^1.10.18",
3434
"@swc/jest": "^0.2.37",
35-
"@types/chrome": "0.0.305",
35+
"@types/chrome": "0.0.306",
3636
"@types/decompress": "^4.2.7",
3737
"@types/echarts": "^5.0.0",
3838
"@types/generate-json-webpack-plugin": "^0.3.7",
3939
"@types/jest": "^29.5.14",
40-
"@types/node": "^22.13.4",
40+
"@types/node": "^22.13.5",
4141
"@types/psl": "^1.1.3",
4242
"@types/punycode": "^2.1.4",
4343
"@types/webpack": "^5.28.5",
@@ -46,7 +46,7 @@
4646
"copy-webpack-plugin": "^12.0.2",
4747
"css-loader": "^7.1.2",
4848
"decompress": "^4.2.1",
49-
"eslint": "^9.20.1",
49+
"eslint": "^9.21.0",
5050
"filemanager-webpack-plugin": "^8.0.0",
5151
"generate-json-webpack-plugin": "^2.0.0",
5252
"html-webpack-plugin": "^5.6.3",

src/api/chrome/action.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { handleError } from "./common"
33

44
const action = IS_MV3 ? chrome.action : chrome.browserAction
55

6-
export function setBadgeText(text: string): Promise<void> {
7-
return new Promise(resolve => action?.setBadgeText({ text }, () => {
6+
export function setBadgeText(text: string, tabId: number): Promise<void> {
7+
return new Promise(resolve => action?.setBadgeText({ text, tabId }, () => {
88
handleError('setBadgeText')
99
resolve()
1010
}))

src/background/badge-manager.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function mill2Str(milliseconds: number) {
4343

4444
function setBadgeTextOfMills(milliseconds: number | undefined, tabId: number | undefined) {
4545
const text = milliseconds === undefined ? '' : mill2Str(milliseconds)
46-
setBadgeText(text)
46+
setBadgeText(text, tabId)
4747
}
4848

4949
async function findActiveTab(): Promise<BadgeLocation> {
@@ -61,6 +61,14 @@ async function findActiveTab(): Promise<BadgeLocation> {
6161
return { tabId: tab.id, url: tab.url }
6262
}
6363

64+
async function clearAllBadge(): Promise<void> {
65+
const tabs = await listTabs()
66+
if (!tabs?.length) return
67+
for (const tab of tabs) {
68+
await setBadgeText('', tab?.id)
69+
}
70+
}
71+
6472
type BadgeState = 'HIDDEN' | 'NOT_SUPPORTED' | 'PAUSED' | 'TIME' | 'WHITELIST'
6573

6674
class BadgeManager {
@@ -106,8 +114,9 @@ class BadgeManager {
106114

107115
private processOption(option: timer.option.AppearanceOption) {
108116
const { displayBadgeText, badgeBgColor } = option || {}
117+
const before = this.visible
109118
this.visible = !!displayBadgeText
110-
this.render()
119+
!this.visible && before && clearAllBadge()
111120
setBadgeBgColor(badgeBgColor)
112121
}
113122

@@ -118,20 +127,20 @@ class BadgeManager {
118127
private async processState(): Promise<BadgeState> {
119128
const { url, tabId, focus } = this.current || {}
120129
if (!this.visible || !url) {
121-
this.state !== 'HIDDEN' && setBadgeText('')
130+
this.state !== 'HIDDEN' && setBadgeText('', tabId)
122131
return 'HIDDEN'
123132
}
124133
if (isBrowserUrl(url)) {
125-
this.state !== 'NOT_SUPPORTED' && setBadgeText('∅')
134+
this.state !== 'NOT_SUPPORTED' && setBadgeText('∅', tabId)
126135
return 'NOT_SUPPORTED'
127136
}
128137
const host = extractHostname(url)?.host
129138
if (whitelistHolder.contains(host, url)) {
130-
this.state !== 'WHITELIST' && setBadgeText('W')
139+
this.state !== 'WHITELIST' && setBadgeText('W', tabId)
131140
return 'WHITELIST'
132141
}
133142
if (this.pausedTabId === tabId) {
134-
this.state !== 'PAUSED' && setBadgeText('P')
143+
this.state !== 'PAUSED' && setBadgeText('P', tabId)
135144
return 'PAUSED'
136145
}
137146
const milliseconds = focus || (host ? (await statDatabase.get(host, new Date())).focus : undefined)

0 commit comments

Comments
 (0)