mirror of
https://github.com/penxio/penx.git
synced 2026-01-13 23:48:18 -05:00
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import { getSpaceInfo } from '@/lib/getSpaceInfo'
|
|
import { matchPattern } from '@/lib/matchPattern'
|
|
import { onMessage } from '@/lib/message'
|
|
import { storage } from '@/lib/storage'
|
|
import { browser } from '#imports'
|
|
import { Creation, Struct } from '@penx/domain'
|
|
import { localDB } from '@penx/local-db'
|
|
import { UserscriptProps } from '@penx/model-type'
|
|
|
|
export async function setupUserscripts() {
|
|
onMessage('setupUserscript', async ({ data, ...rest }) => {
|
|
const session = await storage.getSession()
|
|
|
|
if (!session) return
|
|
|
|
const { userscriptNodes, userscriptStruct, area } = await getSpaceInfo()
|
|
|
|
// console.log('=========userscriptNodes:', userscriptNodes)
|
|
|
|
for (const item of userscriptNodes) {
|
|
const creation = new Creation(item)
|
|
const fields = creation.getCells<UserscriptProps>(new Struct(userscriptStruct))
|
|
|
|
if (!fields.enabled) continue
|
|
|
|
const patterns = fields.match
|
|
.split('\n')
|
|
.filter(Boolean)
|
|
.map((i) => i.trim())
|
|
|
|
if (!patterns.length) continue
|
|
|
|
const some = patterns.some((p) => matchPattern(p, data.url))
|
|
|
|
if (!some) continue
|
|
|
|
const script: Browser.userScripts.RegisteredUserScript[] = [
|
|
{
|
|
id: item.id,
|
|
matches: patterns,
|
|
js: [{ code: fields.code }],
|
|
},
|
|
]
|
|
|
|
// console.log('====>>>>>>fields:', fields)
|
|
|
|
if (await isUserScriptRegistered(item.id)) {
|
|
browser.userScripts.update(script)
|
|
} else {
|
|
browser.userScripts.register(script)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
async function isUserScriptRegistered(id: string) {
|
|
const scripts = await browser.userScripts.getScripts()
|
|
console.log('======scripts:', scripts)
|
|
|
|
return scripts.some((script) => script.id === id)
|
|
}
|