Skip to content

Commit da15a27

Browse files
committed
Refactor code of service worker (#327)
1 parent e9216ae commit da15a27

File tree

5 files changed

+52
-43
lines changed

5 files changed

+52
-43
lines changed

src/background/content-script-handler.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
* https://opensource.org/licenses/MIT
66
*/
77

8+
import { getUrl } from "@api/chrome/runtime"
9+
import { createTab } from "@api/chrome/tab"
10+
import { ANALYSIS_ROUTE, LIMIT_ROUTE } from "@app/router/constants"
11+
import whitelistHolder from "@service/components/whitelist-holder"
12+
import itemService from "@service/item-service"
813
import limitService from "@service/limit-service"
914
import optionService from "@service/option-service"
10-
import statService from "@service/stat-service"
11-
import MessageDispatcher from "./message-dispatcher"
12-
import whitelistHolder from "@service/components/whitelist-holder"
13-
import { extractFileHost, extractHostname } from "@util/pattern"
14-
import { getUrl } from "@api/chrome/runtime"
1515
import { getAppPageUrl } from "@util/constant/url"
16-
import { ANALYSIS_ROUTE, LIMIT_ROUTE } from "@app/router/constants"
17-
import { createTab } from "@api/chrome/tab"
16+
import { extractFileHost, extractHostname } from "@util/pattern"
17+
import MessageDispatcher from "./message-dispatcher"
1818

1919
const handleOpenAnalysisPage = (sender: ChromeMessageSender) => {
2020
const { tab, url } = sender || {}
@@ -53,7 +53,7 @@ export default function init(dispatcher: MessageDispatcher) {
5353
host = param?.host
5454
url = param?.url
5555
}
56-
statService.addOneTime(host, url)
56+
itemService.addOneTime(host, url)
5757
})
5858
// Judge is in whitelist
5959
.register<{ host?: string, url?: string }, boolean>('cs.isInWhitelist', ({ host, url } = {}) => whitelistHolder.contains(host, url))
@@ -63,7 +63,7 @@ export default function init(dispatcher: MessageDispatcher) {
6363
return !!option.printInConsole
6464
})
6565
// Get today info
66-
.register<string, timer.stat.Result>('cs.getTodayInfo', host => statService.getResult(host, new Date()))
66+
.register<string, timer.stat.Result>('cs.getTodayInfo', host => itemService.getResult(host, new Date()))
6767
// cs.getLimitedRules
6868
.register<string, timer.limit.Item[]>('cs.getLimitedRules', url => limitService.getLimited(url))
6969
.register<string, timer.limit.Item[]>('cs.getRelatedRules', url => limitService.getRelated(url))

src/background/timer/server.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { getTab, listTabs, sendMsg2Tab } from "@api/chrome/tab"
22
import { getWindow } from "@api/chrome/window"
3+
import itemService from "@service/item-service"
34
import limitService from "@service/limit-service"
5+
import optionService from "@service/option-service"
46
import periodService from "@service/period-service"
5-
import statService from "@service/stat-service"
67
import { extractHostname } from "@util/pattern"
78
import badgeManager from "../badge-manager"
89
import MessageDispatcher from "../message-dispatcher"
9-
import optionService from "@service/option-service"
1010

1111
let option = null
1212
optionService.getAllOption().then(opt => option = opt)
@@ -16,7 +16,7 @@ async function handleTime(host: string, url: string, dateRange: [number, number]
1616
const [start, end] = dateRange
1717
const focusTime = end - start
1818
// 1. Save async
19-
await statService.addFocusTime(host, url, focusTime)
19+
await itemService.addFocusTime(host, url, focusTime)
2020
// 2. Process limit
2121
const metLimits = await limitService.addFocusTime(host, url, focusTime)
2222
// If time limited after this operation, send messages

src/common/backup/processor.ts

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

88
import BackupDatabase from "@db/backup-database"
9+
import itemService from "@service/item-service"
910
import metaService from "@service/meta-service"
1011
import optionService from "@service/option-service"
11-
import statService from "@service/stat-service"
1212
import { judgeVirtualFast } from "@util/pattern"
1313
import { formatTimeYMD, getBirthday } from "@util/time"
1414
import GistCoordinator from "./gist/coordinator"
@@ -112,7 +112,7 @@ async function syncFull(
112112
// 1. select rows
113113
let start = getBirthday()
114114
let end = new Date()
115-
const rows = await statService.select({ date: [start, end] })
115+
const rows = await itemService.selectItems({ date: [start, end] })
116116
const allDates = rows.map(r => r.date).sort((a, b) => a == b ? 0 : a > b ? 1 : -1)
117117
client.maxDate = allDates[allDates.length - 1]
118118
client.minDate = allDates[0]

src/service/item-service.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import StatDatabase, { StatCondition } from "@db/stat-database"
2+
import { resultOf } from "@util/stat"
3+
import virtualSiteHolder from "./components/virtual-site-holder"
4+
import whitelistHolder from "./components/whitelist-holder"
5+
6+
const db = new StatDatabase(chrome.storage.local)
7+
8+
async function addFocusTime(host: string, url: string, focusTime: number): Promise<void> {
9+
if (whitelistHolder.contains(host, url)) return
10+
11+
const resultSet: timer.stat.ResultSet = { [host]: resultOf(focusTime, 0) }
12+
const virtualHosts = virtualSiteHolder.findMatched(url)
13+
virtualHosts.forEach(virtualHost => resultSet[virtualHost] = resultOf(focusTime, 0))
14+
15+
await db.accumulateBatch(resultSet, new Date())
16+
}
17+
18+
async function addOneTime(host: string, url: string) {
19+
if (whitelistHolder.contains(host, url)) return
20+
21+
const resultSet: timer.stat.ResultSet = { [host]: resultOf(0, 1) }
22+
virtualSiteHolder.findMatched(url).forEach(virtualHost => resultSet[virtualHost] = resultOf(0, 1))
23+
await db.accumulateBatch(resultSet, new Date())
24+
}
25+
26+
const getResult = (host: string, date: Date | string) => db.get(host, date)
27+
28+
const selectItems = (cond: StatCondition) => db.select(cond)
29+
30+
export default {
31+
addFocusTime,
32+
addOneTime,
33+
getResult,
34+
selectItems,
35+
}

src/service/stat-service/index.ts

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,14 @@
55
* https://opensource.org/licenses/MIT
66
*/
77

8+
import MergeRuleDatabase from "@db/merge-rule-database"
9+
import SiteDatabase from "@db/site-database"
810
import StatDatabase, { StatCondition } from "@db/stat-database"
11+
import { judgeVirtualFast } from "@util/pattern"
912
import { log } from "../../common/logger"
1013
import CustomizedHostMergeRuler from "../components/host-merge-ruler"
11-
import MergeRuleDatabase from "@db/merge-rule-database"
1214
import { slicePageResult } from "../components/page-info"
13-
import whitelistHolder from '../components/whitelist-holder'
14-
import { resultOf } from "@util/stat"
15-
import SiteDatabase from "@db/site-database"
1615
import { mergeDate, mergeHost } from "./merge"
17-
import virtualSiteHolder from "@service/components/virtual-site-holder"
18-
import { judgeVirtualFast } from "@util/pattern"
1916
import { canReadRemote, processRemote } from "./remote"
2017

2118
const storage = chrome.storage.local
@@ -64,25 +61,6 @@ export type HostSet = {
6461
* @since 0.0.5
6562
*/
6663
class StatService {
67-
68-
async addFocusTime(host: string, url: string, focusTime: number): Promise<void> {
69-
if (whitelistHolder.contains(host, url)) return
70-
71-
const resultSet: timer.stat.ResultSet = { [host]: resultOf(focusTime, 0) }
72-
const virtualHosts = virtualSiteHolder.findMatched(url)
73-
virtualHosts.forEach(virtualHost => resultSet[virtualHost] = resultOf(focusTime, 0))
74-
75-
await statDatabase.accumulateBatch(resultSet, new Date())
76-
}
77-
78-
async addOneTime(host: string, url: string) {
79-
if (whitelistHolder.contains(host, url)) return
80-
81-
const resultSet: timer.stat.ResultSet = { [host]: resultOf(0, 1) }
82-
virtualSiteHolder.findMatched(url).forEach(virtualHost => resultSet[virtualHost] = resultOf(0, 1))
83-
await statDatabase.accumulateBatch(resultSet, new Date())
84-
}
85-
8664
/**
8765
* Query hosts
8866
*
@@ -196,10 +174,6 @@ class StatService {
196174
return origin
197175
}
198176

199-
getResult(host: string, date: Date): Promise<timer.stat.Result> {
200-
return statDatabase.get(host, date)
201-
}
202-
203177
async selectByPage(
204178
param?: StatQueryParam,
205179
page?: timer.common.PageQuery,

0 commit comments

Comments
 (0)