Skip to content

Commit cb011f2

Browse files
committed
Refacotr declarations
1 parent 019f675 commit cb011f2

File tree

15 files changed

+160
-130
lines changed

15 files changed

+160
-130
lines changed

global.d.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ declare namespace timer {
4242
| "off"
4343
// Timed on
4444
| "timed"
45+
4546
type AppearanceOption = {
4647
/**
4748
* Whether to display the whitelist button in the context menu
@@ -135,4 +136,32 @@ declare namespace timer {
135136
// @since 0.9.0
136137
| 'zh_TW'
137138

139+
namespace stat {
140+
/**
141+
* Time waste per day
142+
*
143+
* @since 0.0.1
144+
*/
145+
type WastePerDay = {
146+
/**
147+
* Duration of visit
148+
*/
149+
total: number
150+
/**
151+
* Duration of focus
152+
*/
153+
focus: number
154+
/**
155+
* Visit times
156+
*/
157+
time: number
158+
}
159+
160+
/**
161+
* Waste data
162+
*
163+
* @since 0.3.3
164+
*/
165+
type WasteData = { [host: string]: WastePerDay }
166+
}
138167
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import MetaDatabase from "@db/meta-database"
2+
import TimerDatabase from "@db/timer-database"
3+
import { MILL_PER_DAY } from "@util/time"
4+
5+
const metaDb = new MetaDatabase(chrome.storage.local)
6+
const local = chrome.storage.local
7+
const sync = chrome.storage.sync
8+
9+
async function syncData() {
10+
const current = new Date().getTime()
11+
const meta = (await metaDb.getMeta())?.sync
12+
syncTimer(current, 11)
13+
}
14+
15+
async function syncTimer(current: number, lastSyncTs: number) {
16+
const startTime = lastSyncTs
17+
const endTime = current - MILL_PER_DAY
18+
const localDb = new TimerDatabase(local)
19+
const syncDb = new TimerDatabase(sync)
20+
21+
const dateRange = [
22+
startTime ? new Date(startTime) : undefined,
23+
new Date(endTime)
24+
]
25+
26+
const localItems = await localDb.select({ date: dateRange })
27+
const remoteItems = await syncDb.select({ date: dateRange })
28+
localItems.forEach(item => {
29+
syncDb.accumulate(item.host, item.date, item)
30+
})
31+
32+
console.log(localItems, remoteItems)
33+
}
34+
35+
export default class ChromeSynchronizer {
36+
sync = syncData
37+
}

src/background/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import ActiveTabListener from "./active-tab-listener"
1616
import badgeTextManager from "./badge-text-manager"
1717
import metaService from "@service/meta-service"
1818
import UninstallListener from "./uninstall-listener"
19+
import ChromeSynchronizer from "./chrome-synchronizer"
1920

2021
// Open the log of console
2122
openLog()
@@ -51,4 +52,6 @@ chrome.runtime.onInstalled.addListener(async detail => {
5152
detail.reason === "install" && await metaService.updateInstallTime(new Date())
5253
// Questionnaire for uninstall
5354
new UninstallListener().listen()
54-
})
55+
})
56+
57+
new ChromeSynchronizer().sync()

src/content-script/printer.ts

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

88
import TimerDatabase from "@db/timer-database"
9-
import WastePerDay from "@entity/dao/waste-per-day"
109
import { t2Chrome } from "@util/i18n/chrome/t"
1110
import { formatPeriod } from "@util/time"
1211

@@ -16,7 +15,7 @@ const timerDatabase = new TimerDatabase(chrome.storage.local)
1615
* Print info of today
1716
*/
1817
export default async function printInfo(host: string) {
19-
const waste: WastePerDay = await timerDatabase.get(host, new Date())
18+
const waste: timer.stat.WastePerDay = await timerDatabase.get(host, new Date())
2019
const hourMsg = t2Chrome(root => root.message.timeWithHour)
2120
const minuteMsg = t2Chrome(root => root.message.timeWithMinute)
2221
const secondMsg = t2Chrome(root => root.message.timeWithSecond)

src/database/archived-database.ts

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

88
import { log } from "../common/logger"
9-
import WastePerDay from "@entity/dao/waste-per-day"
109
import DataItem from "@entity/dto/data-item"
1110
import BaseDatabase from "./common/base-database"
1211
import { ARCHIVED_PREFIX } from "./common/constant"
@@ -79,7 +78,7 @@ class ArchivedDatabase extends BaseDatabase {
7978
const result: DataItem[] = Object.entries(items)
8079
.filter(([key]) => domains.has(key))
8180
.map(([host, waste]) => {
82-
const { focus, total, time } = waste as WastePerDay
81+
const { focus, total, time } = waste as timer.stat.WastePerDay
8382
return { focus, total, time, host, date: '', mergedHosts: [] }
8483
})
8584
return await Promise.resolve(result)

src/database/meta-database.ts

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

8-
import { ExtensionMeta } from "@entity/dao/extension-meta"
98
import BaseDatabase from "./common/base-database"
109
import { META_KEY } from "./common/constant"
1110

1211
/**
1312
* @since 0.6.0
1413
*/
1514
class MetaDatabase extends BaseDatabase {
16-
async getMeta(): Promise<ExtensionMeta> {
17-
const meta = (await this.storage.getOne(META_KEY)) as ExtensionMeta
15+
async getMeta(): Promise<timer.meta.ExtensionMeta> {
16+
const meta = (await this.storage.getOne(META_KEY)) as timer.meta.ExtensionMeta
1817
if (!meta) {
1918
return {}
2019
} else {
@@ -23,7 +22,7 @@ class MetaDatabase extends BaseDatabase {
2322
}
2423

2524
async importData(data: any): Promise<void> {
26-
const meta: ExtensionMeta = data[META_KEY] as ExtensionMeta
25+
const meta: timer.meta.ExtensionMeta = data[META_KEY] as timer.meta.ExtensionMeta
2726
if (!meta) {
2827
return
2928
}
@@ -45,7 +44,7 @@ class MetaDatabase extends BaseDatabase {
4544
await this.update(existMeta)
4645
}
4746

48-
async update(existMeta: ExtensionMeta): Promise<void> {
47+
async update(existMeta: timer.meta.ExtensionMeta): Promise<void> {
4948
await this.storage.put(META_KEY, existMeta)
5049
}
5150
}

src/database/timer-database.ts

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

88
import { log } from "../common/logger"
9-
import WastePerDay, { merge, WasteData } from "@entity/dao/waste-per-day"
109
import DataItem from "@entity/dto/data-item"
1110
import { formatTime } from "@util/time"
1211
import BaseDatabase from "./common/base-database"
1312
import { ARCHIVED_PREFIX, DATE_FORMAT, REMAIN_WORD_PREFIX } from "./common/constant"
13+
import { zero, merge, isNotZero } from "@util/waste-per-day"
1414

1515
export type TimerCondition = {
1616
/**
@@ -107,20 +107,20 @@ function processCondition(condition: TimerCondition): _TimerCondition {
107107
return result
108108
}
109109

110-
function mergeMigration(exist: WastePerDay | undefined, another: any) {
111-
exist = exist || WastePerDay.zero()
112-
return merge(exist, WastePerDay.of(another.total || 0, another.focus || 0, another.time || 0))
110+
function mergeMigration(exist: timer.stat.WastePerDay | undefined, another: any) {
111+
exist = exist || zero()
112+
return merge(exist, { total: another.total || 0, focus: another.focus || 0, time: another.time || 0 })
113113
}
114114

115-
function migrate(exists: { [key: string]: WastePerDay }, data: any): { [key: string]: WastePerDay } {
115+
function migrate(exists: { [key: string]: timer.stat.WastePerDay }, data: any): { [key: string]: timer.stat.WastePerDay } {
116116
const result = {}
117117
Object.entries(data)
118118
.filter(([key]) => /^20\d{2}[01]\d[0-3]\d.*/.test(key))
119119
.forEach(([key, value]) => {
120120
if (typeof value !== "object") return
121121
const exist = exists[key]
122122
const merged = mergeMigration(exist, value)
123-
merged && merged.isNotZero() && (result[key] = mergeMigration(exist, value))
123+
merged && isNotZero(merged) && (result[key] = mergeMigration(exist, value))
124124
})
125125
return result
126126
}
@@ -151,10 +151,10 @@ class TimerDatabase extends BaseDatabase {
151151
* @param host host
152152
* @since 0.1.3
153153
*/
154-
async accumulate(host: string, date: Date, item: WastePerDay): Promise<void> {
154+
async accumulate(host: string, date: Date | string, item: timer.stat.WastePerDay): Promise<void> {
155155
const key = this.generateKey(host, date)
156156
const items = await this.storage.get(key)
157-
const exist: WastePerDay = merge(items[key] as WastePerDay || new WastePerDay(), item)
157+
const exist: timer.stat.WastePerDay = merge(items[key] as timer.stat.WastePerDay || zero(), item)
158158
const toUpdate = {}
159159
toUpdate[key] = exist
160160
log('toUpdate', toUpdate)
@@ -168,7 +168,7 @@ class TimerDatabase extends BaseDatabase {
168168
* @param date date
169169
* @since 0.1.8
170170
*/
171-
async accumulateBatch(data: WasteData, date: Date): Promise<WasteData> {
171+
async accumulateBatch(data: timer.stat.WasteData, date: Date): Promise<timer.stat.WasteData> {
172172
const hosts = Object.keys(data)
173173
if (!hosts.length) return
174174
const dateStr = formatTime(date, DATE_FORMAT)
@@ -178,10 +178,10 @@ class TimerDatabase extends BaseDatabase {
178178
const items = await this.storage.get(Object.values(keys))
179179

180180
const toUpdate = {}
181-
const afterUpdated: WasteData = {}
181+
const afterUpdated: timer.stat.WasteData = {}
182182
Object.entries(keys).forEach(([host, key]) => {
183183
const item = data[host]
184-
const exist: WastePerDay = merge(items[key] as WastePerDay || new WastePerDay(), item)
184+
const exist: timer.stat.WastePerDay = merge(items[key] as timer.stat.WastePerDay || zero(), item)
185185
toUpdate[key] = afterUpdated[host] = exist
186186
})
187187
await this.storage.set(toUpdate)
@@ -203,7 +203,7 @@ class TimerDatabase extends BaseDatabase {
203203
for (let key in items) {
204204
const date = key.substring(0, 8)
205205
const host = key.substring(8)
206-
const val: WastePerDay = items[key]
206+
const val: timer.stat.WastePerDay = items[key]
207207
if (this.filterBefore(date, host, val, _cond)) {
208208
const { total, focus, time } = val
209209
result.push({ date, host, total, focus, time, mergedHosts: [] })
@@ -250,7 +250,7 @@ class TimerDatabase extends BaseDatabase {
250250
* @param condition query parameters
251251
* @return true if valid, or false
252252
*/
253-
private filterBefore(date: string, host: string, val: WastePerDay, condition: _TimerCondition): boolean {
253+
private filterBefore(date: string, host: string, val: timer.stat.WastePerDay, condition: _TimerCondition): boolean {
254254
const { focus, total, time } = val
255255
const { timeStart, timeEnd, totalStart, totalEnd, focusStart, focusEnd } = condition
256256

@@ -266,10 +266,10 @@ class TimerDatabase extends BaseDatabase {
266266
*
267267
* @since 0.0.5
268268
*/
269-
async get(host: string, date: Date): Promise<WastePerDay> {
269+
async get(host: string, date: Date): Promise<timer.stat.WastePerDay> {
270270
const key = this.generateKey(host, date)
271271
const items = await this.storage.get(null)
272-
return Promise.resolve(items[key] || new WastePerDay())
272+
return Promise.resolve(items[key] || zero())
273273
}
274274

275275
/**
@@ -342,7 +342,7 @@ class TimerDatabase extends BaseDatabase {
342342
for (let key in items) {
343343
const date = key.substring(0, 8)
344344
const host = key.substring(8)
345-
const val: WastePerDay = items[key]
345+
const val: timer.stat.WastePerDay = items[key]
346346
if (this.filterBefore(date, host, val, _cond)) {
347347
count++
348348
}

src/entity/dao/waste-per-day.ts

Lines changed: 0 additions & 59 deletions
This file was deleted.

src/service/meta-service.ts

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

88
import MetaDatabase from "@db/meta-database"
9-
import { ExtensionMeta } from "@entity/dao/extension-meta"
109

1110
const storage = chrome.storage.local
1211
const db: MetaDatabase = new MetaDatabase(storage)
1312

1413
async function getInstallTime() {
15-
const meta: ExtensionMeta = await db.getMeta()
14+
const meta: timer.meta.ExtensionMeta = await db.getMeta()
1615
return meta && meta.installTime ? new Date(meta.installTime) : undefined
1716
}
1817

1918
async function updateInstallTime(installTime: Date) {
20-
const meta: ExtensionMeta = await db.getMeta()
19+
const meta: timer.meta.ExtensionMeta = await db.getMeta()
2120
if (meta?.installTime) {
2221
// Must not rewrite
2322
return

src/service/timer-service.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ import { log } from "../common/logger"
1212
import CustomizedHostMergeRuler from "./components/host-merge-ruler"
1313
import HostMergeRuleItem from "@entity/dto/host-merge-rule-item"
1414
import MergeRuleDatabase from "@db/merge-rule-database"
15-
import WastePerDay, { WasteData } from "@entity/dao/waste-per-day"
1615
import IconUrlDatabase from "@db/icon-url-database"
1716
import HostAliasDatabase from "@db/host-alias-database"
1817
import { PageParam, PageResult, slicePageResult } from "./components/page-info"
1918
import whitelistHolder from './components/whitelist-holder'
19+
import { wasteOf } from "@util/waste-per-day"
2020

2121
const storage = chrome.storage.local
2222

@@ -75,16 +75,16 @@ export type HostSet = {
7575
*/
7676
class TimerService {
7777

78-
async addFocusAndTotal(data: { [host: string]: { run: number, focus: number } }): Promise<WasteData> {
78+
async addFocusAndTotal(data: { [host: string]: { run: number, focus: number } }): Promise<timer.stat.WasteData> {
7979
const toUpdate = {}
8080
Object.entries(data)
8181
.filter(([host]) => whitelistHolder.notContains(host))
82-
.forEach(([host, item]) => toUpdate[host] = WastePerDay.of(item.run, item.focus, 0))
82+
.forEach(([host, item]) => toUpdate[host] = wasteOf(item.run, item.focus, 0))
8383
return timerDatabase.accumulateBatch(toUpdate, new Date())
8484
}
8585

8686
async addOneTime(host: string) {
87-
timerDatabase.accumulate(host, new Date(), WastePerDay.of(0, 0, 1))
87+
timerDatabase.accumulate(host, new Date(), wasteOf(0, 0, 1))
8888
}
8989

9090
/**

0 commit comments

Comments
 (0)