Skip to content

Commit 8059c3c

Browse files
committed
feat: export and import sites and categories (#895)
1 parent 254428c commit 8059c3c

21 files changed

Lines changed: 106 additions & 220 deletions

File tree

src/api/sw/merge.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ export const listAllMergeRules = () => sendMsg2Runtime('merge.all')
44

55
export const deleteMergeRule = (origin: string) => sendMsg2Runtime('merge.delete', origin)
66

7-
export const addMergeRule = (rule: tt4b.merge.Rule) => sendMsg2Runtime('merge.add', rule)
7+
export const addMergeRule = (rule: tt4b.site.MergeRule) => sendMsg2Runtime('merge.add', rule)

src/background/content-script-handler.ts

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

88
import { getTab } from '@api/chrome/tab'
9-
import { saveSite } from '@service/site-service'
9+
import { getSite, saveSite } from '@service/site-service'
1010
import { IS_ANDROID, IS_CHROME, IS_FIREFOX, IS_SAFARI, isNotTrackable } from "@util/constant/environment"
1111
import { extractHostname, isHomepage } from "@util/pattern"
1212
import { extractSiteName } from "@util/site"
@@ -30,7 +30,11 @@ async function processTabInfo(tab: ChromeTab): Promise<void> {
3030
IS_CHROME && /^localhost(:.+)?/.test(host) && (iconUrl = undefined)
3131
// Only collect site name for homepage
3232
const alias = isHomepage(url) ? extractSiteName(title) : undefined
33-
await saveSite({ host, type: 'normal', alias, iconUrl }, false)
33+
if (!iconUrl && !alias) return
34+
const exist = await getSite({ host, type: 'normal' })
35+
exist.iconUrl ??= iconUrl
36+
exist.alias ??= alias
37+
await saveSite(exist)
3438
}
3539

3640
/**

src/background/database/cate-database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class CateDatabase extends BaseDatabase {
5454

5555
const ids = Object.keys(items).map(Number).filter(Number.isFinite)
5656
const id = (ids.length ? Math.max(...ids) : 0) + 1
57-
items[id] = {n: name}
57+
items[id] = { n: name }
5858

5959
await this.saveItems(items)
6060
return { name, id }

src/background/database/common/constant.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@
1212
*/
1313
export const REMAIN_WORD_PREFIX = '__timer__'
1414

15-
/**
16-
* Key of white list
17-
* @since 0.0.5
18-
*/
19-
export const WHITELIST_KEY = REMAIN_WORD_PREFIX + 'WHITELIST'
20-
2115
/**
2216
* Key of metadata
2317
* @since 0.6.0

src/background/database/merge-rule-database.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const isMergeValue = createUnionGuard(isString, isInt)
2020

2121
const isMergeRuleSet = createRecordGuard(isMergeValue)
2222

23-
const isMergeRule = createObjectGuard<tt4b.merge.Rule>({
23+
const isMergeRule = createObjectGuard<tt4b.site.MergeRule>({
2424
origin: isString,
2525
merged: isMergeValue,
2626
})
@@ -42,10 +42,9 @@ class MergeRuleDatabase extends BaseDatabase implements BrowserMigratable<'__mer
4242
return this.setByKey(DB_KEY, data)
4343
}
4444

45-
async selectAll(): Promise<tt4b.merge.Rule[]> {
45+
async selectAll(): Promise<tt4b.site.MergeRule[]> {
4646
const set = await this.refresh()
47-
return Object.entries(set)
48-
.map(([origin, merged]) => ({ origin, merged } satisfies tt4b.merge.Rule))
47+
return Object.entries(set).map(([origin, merged]) => ({ origin, merged }))
4948
}
5049

5150
async remove(origin: string): Promise<void> {
@@ -57,7 +56,7 @@ class MergeRuleDatabase extends BaseDatabase implements BrowserMigratable<'__mer
5756
/**
5857
* Add to the db
5958
*/
60-
async add(...toAdd: tt4b.merge.Rule[]): Promise<void> {
59+
async add(...toAdd: tt4b.site.MergeRule[]): Promise<void> {
6160
const set = await this.refresh()
6261
// Not rewrite
6362
toAdd.forEach(({ origin, merged }) => set[origin] = set[origin] ?? merged)
@@ -87,7 +86,7 @@ class MergeRuleDatabase extends BaseDatabase implements BrowserMigratable<'__mer
8786
await this.update(exist)
8887
}
8988

90-
exportData(): Promise<tt4b.merge.Rule[]> {
89+
exportData(): Promise<tt4b.site.MergeRule[]> {
9190
return this.selectAll()
9291
}
9392
}

src/background/database/site-database/index.ts renamed to src/background/database/site-database.ts

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

88
import { CATE_NOT_SET_ID } from '@util/site'
9-
import { BaseIDBStorage, iterateCursor, type Key, req2Promise, type Table } from '../common/indexed-storage'
9+
import { BaseIDBStorage, iterateCursor, type Key, req2Promise, type Table } from './common/indexed-storage'
1010

1111
const INDEXES: (Key<tt4b.site.SiteInfo> | Key<tt4b.site.SiteInfo>[])[] = [
1212
'host',

src/background/database/site-database/classic.ts

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

src/background/database/whitelist-database.ts

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

src/background/install-handler/version/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { getVersion } from "@api/chrome/runtime"
99
import CateInitializer from "./cate-initializer"
1010
import HostMergeInitializer from "./host-merge-initializer"
1111
import LocalFileInitializer from "./local-file-initializer"
12-
import SiteMigrator from './site-migrator'
1312
import type { Migrator } from "./types"
1413
import WhitelistInitializer from "./whitelist-initializer"
1514

@@ -27,7 +26,6 @@ class VersionManager {
2726
new LocalFileInitializer(),
2827
new WhitelistInitializer(),
2928
new CateInitializer(),
30-
new SiteMigrator(),
3129
)
3230
}
3331

src/background/install-handler/version/local-file-initializer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default class LocalFileInitializer implements Migrator {
3434
[TXT_HOST]: t(msg => msg.initial.localFile.txt),
3535
}
3636
for (const [host, alias] of Object.entries(hostAlias)) {
37-
void saveSite({ host, type: 'normal', alias, iconUrl: undefined }, true)
37+
void saveSite({ host, type: 'normal', alias, iconUrl: undefined })
3838
}
3939
}
4040
}

0 commit comments

Comments
 (0)